使用Face ID保护iOS应用程序

脸部ID和触摸ID等生物识别安全性有助于使iOS移动设备对用户更加安全和便捷。 这些技术也可以由第三方应用程序使用。

接触ID根

2013年,Apple推出了一种新的生物识别方法,即使用主页按钮(Touch ID)中内置的指纹传感器来解锁其移动设备。 在使用Touch ID之前,想要保护iOS设备免遭未经授权的访问的用户可以通过输入4位数的PIN码(后来扩展为更长的6位数的密码)来实现。 虽然iOS设备上的数据继续通过使用底层PIN码进行加密来保护,但Touch ID为用户提供了一种便捷的方式来解锁设备并仅需触摸一下即可确认其身份。

输入面孔ID

随着iPhone X的推出,Apple引入了新的生物识别安全机制-人脸ID。 商标名称“ Face ID”描述其自身。 Face ID不会使用扫描的指纹来识别用户,而是使用对用户面部的扫描来匹配设备上存储的配置文件。

我将针对人脸ID进行讨论,但值得注意的是,人脸ID和触摸ID都是生物识别安全性的不同变体。 从体系结构和开发的角度来看,两者都以相同的方式运行,并提供等效的应用程序体系结构收益。

触摸ID和面部ID以相同的方式操作,并提供等效的应用程序架构

Touch ID使用指纹脊图作为识别其用户的方式,而Face ID使用轮廓和面部特征的3维图。 Face ID使用其签名的True Depth红外摄像机将30,000个点投影到用户的脸上,然后读取图案以创建其面部轮廓图。

Touch ID指纹签名和Face ID面部轮廓图存储在iOS设备的Secure Enclave中。 最终用户只能访问该数据(使用只有该用户知道的PIN加密),并且永远不会离开设备本身。

在第三方应用程序中利用Face ID

尽管大多数用户仅在解锁主屏幕上的iOS设备时才想到Face ID,但我们也可以使用Face ID为我们的第三方应用程序创建更安全,便捷的体验。

尽管用户习惯于在解锁设备时提示输入使用Face ID(或Touch ID)进行身份验证,但我们可以要求iOS随时提示他们使用生物识别安全性重新进行身份验证。 通常,在启动自己的iOS应用程序时,我们会在从iOS读取安全令牌或用户凭据之前提示进行生物识别身份验证

与第三方应用程序可访问的其他硬件功能一样,用户必须授权自定义应用程序使用Face ID。 我们必须在假设用户授权我们使用Face ID(或正在使用不支持生物特征认证的设备)的前提下设计应用程序。 应用程序必须正常运行,并在无法提供生物识别安全性或无法识别用户时提供其他方式来标识/认证用户。

面部识别码的好处

将Face ID集成到我们的iOS安全体系结构中具有一些关键优势:

  • 我们可以确定解锁设备的用户就是访问我们应用程序的同一个人。
  • 我们可以提供额外的安全性,在从用户的钥匙串读取高度敏感的数据(例如,JWT令牌或密码)之前确保用户的身份
  • 当提示用户输入Face ID(或Touch ID)时,可以放心,他们会确保我们认真对待其敏感信息的安全性。

安全架构

将从启动时使用Face ID / Touch ID受益的应用程序通常具有以下一个或多个安全设计元素:

  • 存储在用户钥匙串中的密码
  • 用于访问存储在用户钥匙串中的远程API的Web服务令牌
  • 存储在用户钥匙串中的证书或其他敏感数据

尽管应用程序即使不授权访问敏感信息也可能提示进行生物特征认证,但这并不是典型的方法。 在大多数情况下,应用程序级生物特征认证被用作传统用户名/密码认证的安全替代

具有Face ID的示例应用启动流程

以下示例说明了在访问安全证书之前,将如何使用面部ID(或触摸ID)生物特征认证来提供用户身份的确认。

通常,访问安全信息的应用程序(例如,通过对Web服务API进行经过身份验证的调用)将需要用户名/密码来开始会话,过期令牌(例如Java Web令牌(JWT))。 虽然提示用户在每次启动应用程序时重新输入用户名/密码组合是安全的,但这也使用户感到沮丧。 大多数移动应用程序确实将身份验证令牌或密码存储在钥匙串中,并且确保此信息的安全至关重要。

在以下流程中:

  • 用户名/密码组合(以前由用户输入)或安全令牌(以前从Web服务获得)存储在iOS钥匙串中
  • 钥匙串是此敏感数据的正确位置,因为它随后被加密并且没有设备PIN /生物识别解锁就无法访问。
  • 如果敏感的身份验证信息已存储在钥匙串中(用户已登录,但未注销),则用户ID(而不是密码或令牌!)将存储在用户首选项中。 用户ID在首选项中的存在表明该应用程序应尝试进行生物特征认证,而不是直接进入用户名/密码提示。
  • 如果设备不支持生物特征认证,或者用户拒绝允许应用程序使用该功能,或者传感器只是无法识别用户,则Face ID失败,并且应用程序将退回到传统的用户名/密码认证。

在上面的登录流程中,使用Face ID(或Touch ID)为用户提供了一种方法,使用户可以授予应用程序从钥匙串读取的权限。

可以在不提示进行生物特征验证的情况下从钥匙串读取应用程序吗? 答案是“是”。 不需要面部ID即可访问钥匙串数据-当用户使用PIN(或面部ID /触摸ID)解锁设备时,该钥匙串将为应用程序隐式解锁。

但是,通过使用Face ID / Touch ID,我们提供了一层额外的身份验证,并将我们的应用程序的安全级别提高到了每次启动时都提示输入密码的程度 ,但不会因重复密码而使用户感到沮丧提示。