You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

FaceID/TouchID应用安全性、工作原理及关联MFA服务机制问询

问题2:结合MFA服务与FaceID/TouchID的身份验证机制

你的核心猜想方向是对的,但实际落地有一些细节优化,我来拆解清楚:

实际工作流程

  1. 首次验证绑定
    输入手机号后,MFA服务发验证请求(短信/APP推送等),输入PIN码验证通过后,应用会从MFA服务拿到那个等效“社会安全号码”的全局用户ID——这是服务端唯一标识你身份的核心凭证。有些应用让你设置的本地PIN码,是用来和全局ID绑定,或是作为本地解锁的二次验证,而非直接传给服务端。
  2. 本地凭证存储
    应用会把全局用户ID和经过处理的PIN码(比如加盐哈希后的结果,而非原始PIN)存到系统的Keychain里——Keychain是iOS/macOS提供的系统级加密存储,只有当前应用能访问,默认需要FaceID/TouchID验证才能取出内容。
  3. 后续登录验证
    打开应用时触发FaceID/TouchID验证,通过后应用才能从Keychain取出全局用户ID和哈希PIN(或加密凭证),再调用MFA服务的API完成身份验证。这里的关键是:FaceID/TouchID只是解锁本地存储的凭证,服务端认的还是它自己签发的全局ID和验证过的PIN凭证。

关于4位PIN码的安全性疑问

4位PIN确实只有10000种组合,但实际很难被暴力破解,原因有三点:

  • 服务端限流机制:正规MFA服务的API都会有严格限流,比如连续输错3-5次就锁定账户15分钟,甚至封禁IP,暴力破解需要上万次尝试,时间成本和失败风险极高。
  • 本地存储保护:PIN码(或其哈希)存在Keychain里,必须通过FaceID/TouchID验证才能取出,就算手机丢失,别人也没法直接拿到PIN码去调用API。
  • API权限控制:公开API不代表任何人都能随便调用,大多数服务会要求请求携带应用签名、API密钥或设备标识,只有授权应用才能发起验证请求,不是随便发个HTTP请求就能尝试破解的。

你的补充猜想:用密钥加密PIN码延长长度

这个思路非常靠谱,而且很多应用已经在这么做:

  • 应用会在本地生成随机对称密钥,用它加密全局用户ID和PIN的组合(或直接加密PIN),再把加密后的数据存到Keychain。就算Keychain意外泄露,没有本地密钥也无法解密出原始凭证。
  • 还有更安全的方案:首次验证后,服务端生成长期有效身份令牌(比如JWT),应用加密后存到Keychain,后续登录用FaceID/TouchID解锁令牌再传给服务端——这样连PIN码都不用在本地存储,安全性更高。

内容的提问来源于stack exchange,提问作者qwertyasdf

火山引擎 最新活动