在iOS上使用Touch ID加密数据

Gee*_*e.E 14 encryption keychain ios touch-id

我想做什么

基本上我正在尝试做的是找出一种使用Touch ID加密数据的方法.

遗憾的是,我没有找到使用Touch ID创建encryptionKey的方法,因为LAContextAPI只返回aye/nay响应.


为什么我要尝试它

我正在应用程序中实现不同的登录方法.支持的登录方法是密码,PIN码Touch ID.用户可以自由选择他/她想要的任何登录方法.
但是,只有密码才会发送到服务器,服务器将对用户进行身份验证.因此,只有密码存储在钥匙串中.

encryptionKey,用于第一加密和然后存储密码在钥匙串中,使用任何方法,用户选择作为登录方法创建的.
如果用户选择使用PIN码,encryptionKey则从该PIN码导出,当用户选择密码作为登录方法时,可以说同样的.


我的问题是:

如何在此图片中使用Touch ID?

我在互联网上搜索过,但只发现了我已经害怕的东西.
由于iOS只返回一个truefalse来自Secure Enclave,因此无法创建一个encryptionKey.

我知道钥匙串是自己加密的,但出于安全考虑(请不要详细说明)我需要一个存储在钥匙串中的加密密码.


编辑:

背后的原因存储在钥匙串加密数据是因为钥匙串可以通过越狱的装置被破坏.由于我正在开发的应用程序允许用户查看(主要)企业敏感数据,因此我需要考虑越狱.

Leo*_*ica 5

使用kSecAccessControlTouchIDCurrentSetkSecAccessControlTouchIDAnykeychain访问控制属性来保护密钥链中的加密密钥.如果用户未启用Touch ID(或设备不支持),则使用此API将失败,如果kSecAccessControlTouchIDCurrentSet用户修改了指纹集,则使用将失败.如果失败,您可以回退到正常的身份验证UI,例如密码或密码输入.

有关详细信息,请参阅WWDC 2014 711 Keychain和身份验证以及Touch ID对话和WWDC 2015 706安全性和您的应用程序.

一般说来,不要将数据存储在钥匙串中.您应该只存储密码,加密密钥或凭据,并使用它们来解密存储在磁盘上的数据.


小智 -1

我知道,这个问题是在 2015 年发布的,但我研究过同样的问题。据我所知,这实际上是不可能的。

\n\n

我在 1Password 网站上找到了有关此主题的引用:

\n\n
\n

不要\xe2\x80\x99t 越狱你的设备。理论上,对您的设备进行物理访问的人可以访问 1Password 存储在 iOS 钥匙串中的秘密。但是,这需要解锁设备、越狱设备(以便 1Password 以外的其他设备可以读取属于 1Password 的 iOS 钥匙串数据),并破解主密码的混淆。如果您越狱了您的设备,您就愿意击败针对此类攻击的最强防御之一。

\n
\n\n

所以,简单的回答:这是不可能的:(

\n