将Pin码(字符串)值保存到iOS密钥链以确保安全是否足够?

将Pin码(字符串)值保存到iOS密钥链以确保安全是否足够?,ios,security,keychain,Ios,Security,Keychain,我正在开发需要应用程序保护屏幕的应用程序 此屏幕看起来像: 我已经完成了除一个以外的所有功能。正确保存pin码。 我读过有关iOS密钥链的文章,认为它是保存敏感信息的非常合适的方法 但我想听听其他人的意见,这样就够了吗?或者我应该使用什么来保护此(pin码)信息 现在它的工作原理如下: 设置 Pin->钥匙链 得到 钥匙链->Pin 也考虑哈希: 设置 Pin->Encode->Keychain 得到 钥匙链->解码->Pin在大多数情况下,钥匙链应该足够了。但没有100%的解决方案。如果攻击

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

此屏幕看起来像:

我已经完成了除一个以外的所有功能。正确保存pin码。 我读过有关iOS密钥链的文章,认为它是保存敏感信息的非常合适的方法

但我想听听其他人的意见,这样就够了吗?或者我应该使用什么来保护此(pin码)信息

现在它的工作原理如下:

设置

Pin->钥匙链

得到

钥匙链->Pin

也考虑哈希:

设置

Pin->Encode->Keychain

得到


钥匙链->解码->Pin

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

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

密钥链数据的额外编码需要将用于编码/解码的密钥存储在某处。您必须将其保存在其他地方,例如在用户默认设置中,但密钥链已经具有最高的安全级别。编码对于真实用户数据(您希望使用pin保护的数据:访问令牌、文件加密密码等)是有意义的,因为对于这些数据,它可能会在应用程序卸载/重新安装过程中销毁它们。卸载时将删除用户默认值,但不会删除钥匙链。 场景:用户删除应用程序并出售其手机,而无需在设备设置中重置。买家安装越狱->钥匙链中的旧数据应该是垃圾/不可读的

结论: 想想看:你想用pin保护哪些用户数据?这些数据也位于密钥链内部,即使它只是web请求的访问令牌或加密的密码。pin不需要比数据更高的安全级别;) 如果出现pin,您的解决方案就足够了。但实际用户数据应该使用相同或更高的安全级别

更新

有一个比钥匙链更高的安全级别:“安全飞地”。主要用于保存触摸id信息。苹果没有记录它,所以我还不推荐使用它。
有一个名为“使社区能够访问PIN”的项目。

保存PIN与保存用户密码类似——即使您将PIN保存在密钥链中,也不应以明文形式保存


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

密码不用于本地保存!你们永远都不应该把它们保存在设备上,即使不是散列的,加密的,等等。改为保存网络访问令牌。它可以被服务器撤销,如果泄露,则不包含用户密码。如果密码用于网络访问,则您是对的,但是如果目的是本地身份验证(如问题中提到的特定于应用程序的锁屏),则没有在线组件,因此,应用程序必须在无网络访问的情况下工作,在这种情况下,唯一的方法是将散列的用户PIN保存在设备上。@Robert我正在阅读有关您建议的算法的所有信息。非常好的答案。分数答案。我将按照你建议的方式实施。