我有一个存储在iOS Keychain中的用户pin。对于每次引脚尝试,我使用SecItemCopyMatching
检索引用引脚,然后进行比较。
问题是,在很短的时间内,检索到的参考引脚进入应用程序的工作内存。如果手机受损,可能会读取参考引脚。
有没有办法将引脚尝试传递给Keychain并让Keychain在其安全环境中与引用引脚进行比较? (安全元素可以做那种事吗?)
答案 0 :(得分:6)
通常,您使用salt存储密码的单向哈希,而不是实际密码。要验证,添加salt,散列字符串,与存储的散列进行比较,如果匹配,则进行验证。
然后,强度就是算法,盐和密码的强度。
答案 1 :(得分:3)
您可以拥有一个名为散列引脚的项目,然后您可以检查用户在对其进行散列后输入引脚时是否存在这些项目。
当引脚发生变化时,您可能需要从钥匙串中清除该项目。
答案 2 :(得分:2)
不能以你提出的方式完成。钥匙串是存储
但如果物品在易失性存储器中,它真的有问题吗? 我的意思是..如果钥匙串是打开的,它已经在内存中(至少在检查完成时)
答案 3 :(得分:2)
我认为这可以帮助您达到最终答案,因为1Password面临同样的问题。
https://guides.agilebits.com/kb/security/en/topic/touch-id-pin-code-and-ios-keychain
但根据我所读到的内容,你现在想要实现的目标是不可能的。 我能找到的最接近的信息就是这个:
What is the correct way to clear sensitive data from memory in iOS?
和这一个:
你可以在哪里阅读:
如果你的对手能够在你的目标上运行任意代码 machine(具有转储过程映像所需的调试权限), 你是各种各样的人。
所以我的回答是:不,你不用离开iOS Keychain就可以检查pin。