iOS应用如何使用生物识别认证解密AES GCM加密的用户数据
实现方案
核心思路
不要自己校验生物识别的返回结果,把解密所需的AES密钥托管给系统钥匙串,由钥匙串的访问控制机制保证只有通过生物认证才能读取密钥,从根源避免认证被绕过的风险。
具体实现步骤
1. 新增生物识别开启逻辑
用户首次设置密码,或者后续输入密码成功解密数据时,可引导用户开启生物识别功能:
- 确认用户同意开启后,将当前通过
PBKDF2生成的256位AES密钥写入系统钥匙串 - 写入时为该密钥条目配置访问控制属性,指定只有通过生物认证才能读取,核心配置参数为
kSecAccessControlBiometryCurrentSet,同时可以搭配kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly限制仅当前设备、且用户设置了锁屏密码时才能读取,进一步提升安全性。
2. 生物识别解密流程
用户后续选择使用生物识别解密时:
- 直接发起钥匙串读取对应密钥的请求,系统会自动弹出生物识别认证弹窗
- 认证通过后你可以直接从钥匙串拿到AES密钥,复用现有逻辑完成AES GCM解密即可
- 整个过程不需要用户输入密码,也不需要再次走
PBKDF2密钥生成逻辑
注意事项
- 如果用户在系统设置中新增/删除了指纹/面容数据,钥匙串中配置了
kSecAccessControlBiometryCurrentSet的密钥条目会自动失效,读取时会返回对应错误,你只需要捕获该错误,引导用户重新输入密码,再将新生成的密钥写入钥匙串即可。 - 不要依赖LocalAuthentication返回的布尔值作为解密的唯一判断条件,这种逻辑很容易被越狱环境、hook操作绕过,必须把权限校验交给钥匙串的原生访问控制机制。
- 不需要对存入钥匙串的密钥做额外加密,iOS钥匙串本身基于硬件安全模块加密,安全等级符合苹果官方的安全规范。
内容的提问来源于stack exchange,提问作者encryptor
相关产品推荐
相关产品推荐

