【问题标题】:Security of apps using faceId/touchId? How does it work?使用 faceId/touchId 的应用程序的安全性?它是如何工作的?
【发布时间】:2019-06-19 10:29:08
【问题描述】:

在我的国家/地区,我们有一项 MFA 服务,例如,它可以输入您的手机号码,然后 ping 您的手机,您输入一个 PIN 码即可通过身份验证。调用此服务的应用程序会取回您的等效“社会安全号码”。

在应用程序中可以按如下方式使用:

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

这是如何工作的?

这是一个猜测:

  • 在注册期间,调用 MFA 服务,它会获取您的“社会安全号码”并将其用作您的用户名
  • 您输入的密码(可能只有 4 个字母 - 很短,所以这让我怀疑这个理论)然后用作您的密码
  • 然后将用户名和密码(pin)存储在您的密钥链/核心存储中,应用程序会提示您输入 faceId/touchId,但随后会发送您的用户/密码以使用 API 对您进行身份验证

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

如果我错了,请纠正我。

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

【问题讨论】:

    标签: java android ios authentication authorization


    【解决方案1】:

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

    注册期间

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

    身份验证期间

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

    • 后端验证签名并允许您访问受保护的资源。

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

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

    我不确定他们为什么要您提供 PIN 码。也许他们想应用一些额外的保护并执行以下操作:

    • 锁定应用程序以防生物特征身份验证不成功。 PIN 码可用于解锁应用程序并让您重试。

    • 使用 PIN 作为身份验证方法,以防用户禁用生物特征身份验证方法。

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

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

    【讨论】:

    • 感谢crom的回复,写的很详细很清楚。您是否有任何有关 Azure AD B2C 的知识?你知道这将如何与我描述的 MFA 一起工作吗?
    猜你喜欢
    • 2019-04-03
    • 1970-01-01
    • 2011-02-01
    • 2016-02-24
    • 2022-08-18
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    相关资源
    最近更新 更多