是否足以将PIN码(字符串)值保存到iOS Keychain以保证安全?

时间:2017-04-27 14:19:48

标签: ios security keychain

我正在开发需要应用程序保护屏幕的应用程序。

此屏幕如下所示:

enter image description here

我已经完成了所有功能。正确保存引脚代码。 我读到了iOS Keychain并认为它是保存敏感信息的非常合适的方法。

但我想听听别人的意见是否足够?或者我应该用什么来保护这个(密码)信息。

现在它的工作方式如下:

设置

Pin - >钥匙串

获取

钥匙串 - > Pin

我也考虑哈希:

引脚> Encode->钥匙扣

获取

Keychain-> Decode->引脚

2 个答案:

答案 0 :(得分:3)

保存PIN与保存用户密码类似 - 即使您像保存在钥匙串中一样保存PIN,也不应以纯文本形式执行此操作。

至少将其保存为salted哈希,最好使用密码哈希方案(用于处理密码和PIN的单向安全功能),如PBKDF2,bcrypt,scrypt或Argon。

答案 1 :(得分:1)

在大多数情况下,钥匙串应该足够了。但是没有100%的解决方案。如果攻击者可以访问硬件和软件,则只能使获取数据变得更加困难,而不是不可能。

这意味着在您的情况下,攻击者已经需要访问设备和设备密码/ touchid(如果设置)以安装越狱。只有这样才能访问钥匙串的内容和内部存储的数据。

对钥匙串数据的附加编码需要在某处存储用于编码/解码的密钥。您必须将其保存在其他位置,例如用户默认值,但钥匙串已具有最高安全级别。编码对于真实用户数据(您想要使用引脚保护的数据:访问令牌,文件加密密码......)是有意义的,因为对于这些数据,可能是导入端以在app deinstall / reinstall过程中销毁它们。卸载时将删除用户默认值,而不是密钥链。 场景:用户删除应用并出售他/她的手机,而无需在设备设置中重置它。买家安装越狱 - >钥匙串中的旧数据应该是垃圾/不可读的。

结论: 想一想:你想用针固定哪些用户数据?这些数据也位于钥匙串内部,即使它只是用于Web请求的访问令牌或用于加密的密码。您的引脚不需要比数据更高的安全级别;) 如果是针,你的解决方案应该足够了。但导入的是您的真实用户数据应使用相同的安全级别或更高级别的安全级别。

更新

安全级别高于钥匙串:" Secure Enclave"。它主要用于保存触摸id信息。 Apple没有记录它,所以我还不建议使用它。 有一个名为Tidas的项目可供社区访问。