使用faceId / touchId的应用程序的安全性?它是如何工作的?

时间:2019-06-19 10:29:08

标签: java android ios authentication authorization

在我们国家/地区,我们拥有MFA服务,例如,您可以输入您的手机号码,然后ping您的电话,输入密码并通过身份验证。调用此服务的应用会取回您的“社会保险号”。

在应用中,可以按以下方式使用

  • 您是第一次打开该应用。输入您的电话号码并进行身份验证。
  • 该应用程序还可以让您选择一个大头针,但是首次登录后,它不会提示您再次使用此MFA,它将使用您的面部ID或touchId

这是如何工作的?

这是一个猜测:

  • 在注册过程中,MFA服务被调用,它将获取您的“社会保险号”并将其用作您的用户名
  • 您输入的密码(也许只有4个字母-很短,因此使我对此理论感到怀疑)然后用作您的密码
  • 然后将用户名和密码(密码)存储在您的钥匙串/核心存储中,应用程序会提示您输入faceId / touchId,然后发送您的用户/密码以使用API​​进行身份验证

这是如何工作的?如果是这样,那么4位数字的密码不是太不安全吗?我假设如果您可以使用它来进行身份验证,那么任何可以访问您的API的人都可以尝试对其进行暴力破解。而且由于它是应用程序使用的API,因此这意味着它向所有人开放。

如果我错了,请纠正我。

编辑:我想可能会为每个用户生成一个秘密,并且可以使用该秘密对密码进行加密,从而使其更长。

1 个答案:

答案 0 :(得分:0)

执行此操作的最现代,最安全的方法不涉及与依赖部分(后端)共享您的秘密(密码),而是使用非对称密钥加密。 例如,我的猜测是:

注册期间

  • 您使用凭据成功进行了身份验证。
  • 设备使用Secure Enclave生成密钥对,并使其只能使用生物识别技术(TouchID,FaceID)进行访问。
  • 公钥发送到后端。

身份验证期间

  • 后端通过某个渠道向设备发送质询(推送通知?)
  • 设备使用注册期间创建的私钥对挑战进行签名,并将其发送到后端。

  • 后端验证签名,并为您提供受保护资源的访问权限。

这是我期望的现代应用程序的基本安全性。

  

这是如何工作的?如果是这样,那么4位数字的密码不是太不安全吗?我假设如果您可以使用它来进行身份验证,那么任何可以访问您的API的人都可以尝试对其进行暴力破解。而且由于它是应用程序使用的API,因此这意味着它向所有人开放。

我不确定他们为什么要求您提供PIN码。也许他们想施加一些额外的保护,并做类似的事情:

  • 锁定生物识别身份验证失败的应用程序。 PIN码可用于解锁应用程序,然后让您重试。

  • 如果用户禁用了生物特征认证方法,则使用PIN作为认证方法。

在任何情况下,即使4位数字太少,通常也会使用密钥派生功能(例如PBKDF2)对PIN进行散列,以使攻击者变慢并防止暴力攻击。实际的PIN永远不会存储,而是散列。

所有这些安全方案现在都已标准化,以确保产品足够安全。如果您喜欢冒险,可以看一下FIDO UAF协议: https://fidoalliance.org/specs/fido-uaf-v1.1-id-20170202/fido-uaf-overview-v1.1-id-20170202.html