在不离开 iOS 钥匙串的情况下检查密码
Check pin without leaving the iOS Keychain
我在 iOS 钥匙串中存储了一个用户密码。对于每个引脚尝试,我使用 SecItemCopyMatching
检索参考引脚,然后进行比较。
问题是,在短时间内,检索到的参考 pin 会进入应用程序的工作内存。如果 phone 遭到破坏,参考引脚可能会被读取。
有没有办法将 pin 尝试传递给 Keychain,并让 Keychain 在其安全环境中与参考 pin 进行比较? (安全元件可以做那种事吗?)
不,不能按照您建议的方式完成。钥匙串是一个存储
但是如果项目在易失性内存中真的是个问题吗?
我的意思是..如果钥匙串打开它已经在内存中(至少在检查完成时)
通常,您存储密码的单向散列和盐,而不是实际密码。要验证,添加盐,对字符串进行哈希处理,与存储的哈希值进行比较,如果匹配,则通过验证。
那么强度就是算法的强度,盐和密码。
您可以有一个名为散列 pin 的项目,然后您可以在用户输入经过散列的 pin 时检查该项目是否存在。
当 PIN 更改时,您可能需要从钥匙串中清除该项目。
我认为这可以帮助您找到最终答案,因为 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?
还有这个:
Sensitive Data In Memory
您可以在哪里阅读:
If your adversary has the ability to run arbitrary code on your target
machine (with the debug privileges required to dump a process image),
you are all sorts of screwed.
所以我的回答是:不,如果不离开 iOS 钥匙串就无法检查密码。
我在 iOS 钥匙串中存储了一个用户密码。对于每个引脚尝试,我使用 SecItemCopyMatching
检索参考引脚,然后进行比较。
问题是,在短时间内,检索到的参考 pin 会进入应用程序的工作内存。如果 phone 遭到破坏,参考引脚可能会被读取。
有没有办法将 pin 尝试传递给 Keychain,并让 Keychain 在其安全环境中与参考 pin 进行比较? (安全元件可以做那种事吗?)
不,不能按照您建议的方式完成。钥匙串是一个存储
但是如果项目在易失性内存中真的是个问题吗?
我的意思是..如果钥匙串打开它已经在内存中(至少在检查完成时)
通常,您存储密码的单向散列和盐,而不是实际密码。要验证,添加盐,对字符串进行哈希处理,与存储的哈希值进行比较,如果匹配,则通过验证。
那么强度就是算法的强度,盐和密码。
您可以有一个名为散列 pin 的项目,然后您可以在用户输入经过散列的 pin 时检查该项目是否存在。
当 PIN 更改时,您可能需要从钥匙串中清除该项目。
我认为这可以帮助您找到最终答案,因为 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?
还有这个:
Sensitive Data In Memory
您可以在哪里阅读:
If your adversary has the ability to run arbitrary code on your target machine (with the debug privileges required to dump a process image), you are all sorts of screwed.
所以我的回答是:不,如果不离开 iOS 钥匙串就无法检查密码。