基本上我正在尝试做的是找出一种使用Touch ID加密数据的方法。
可悲的是,我找不到使用Touch ID创建encryptionKey的方法,因为LAContext
API只返回aye / nay响应。
我正在应用中实现不同的登录方法。支持的登录方法是密码, PIN码和 Touch ID 。用户可以自由选择他/她想要的任何登录方式 但是,只有密码才会发送到服务器,服务器将对用户进行身份验证。因此,只有密码存储在钥匙串中。
encryptionKey
,用于第一次加密,然后将密码存储在钥匙串中,是使用用户选择的任何方法创建的。
如果用户选择使用PIN码,encryptionKey
是从该PIN码派生的,当用户选择密码作为登录方法时,可以说同样的话。
我在互联网上搜索过,但只发现了我已经害怕的东西
由于iOS仅从Secure Enclave返回true
或false
,因此无法创建encryptionKey
。
我知道钥匙串本身是加密的,但出于安全考虑(请不要详细说明)我需要在钥匙串中存储加密密码。
存储在钥匙串中加密的数据背后的原因是因为越狱设备可以破坏钥匙串。 由于我正在开发的应用程序允许用户查看(主要)企业敏感数据,因此我需要考虑越狱。
答案 0 :(得分:5)
使用kSecAccessControlTouchIDCurrentSet
或kSecAccessControlTouchIDAny
钥匙串访问控制属性来保护钥匙串中的加密密钥。如果用户未启用Touch ID(或设备不支持),则使用此API将失败,如果用户修改了指纹集,则使用kSecAccessControlTouchIDCurrentSet
将失败。如果失败,您可以回退到正常的身份验证UI,例如密码或密码输入。
有关详情,请参阅WWDC 2014 711 Keychain and Authentication with Touch ID讲座和WWDC 2015 706 Security and Your Apps。
作为一般说明,请勿将数据存储在钥匙串中。您应该只存储密码,加密密钥或凭据,并使用它们来解密存储在磁盘上的数据。
答案 1 :(得分:-1)
我知道,这个问题是在2015年发布的,但我研究了同样的问题。据我所知,它实际上是不可能的。
我在1Password网站上找到了关于这个话题的引用:
不要越狱你的设备。对您的设备进行物理访问的人理论上可以访问1Password存储在iOS Keychain中的秘密。但是,这需要解锁设备,越狱设备(以便1Password以外的东西可以读取属于1Password的iOS Keychain数据),并且无法模糊主密码。如果你越狱你的设备,你愿意击败这种攻击的最强防御之一。
所以,简单的回答:这是不可能的:(