在钥匙串中存储用于加密密码的密钥的最佳位置在哪里

Posted

技术标签:

【中文标题】在钥匙串中存储用于加密密码的密钥的最佳位置在哪里【英文标题】:Where is the best place to store the key for encryption a password in keychain 【发布时间】:2019-11-22 08:31:52 【问题描述】:

我想实施第二个安全措施,因为当手机越狱时,钥匙串很容易受到攻击,我不希望我的密码仅由钥匙串保护,这就是为什么我想在保存之前加密密码钥匙串中的。我想加密它的原因是因为登录服务器接受未散列的纯文本密码。我有一个想法来进行加密,当用户第一次登录时,密码以纯文本形式发送,然后加密。加密发生在后端,后端可以解密它。这是一个好主意吗,因为当用户更改他的通行证时,他需要以纯文本形式输入旧通行证,并且我调用了我发送密码的加密路由,它用其中一个加密的密码响应我,我是比较它们。所以钥匙串中只有加密的。如果我在设备上加密密码,我会问是否有更好的方法存储密钥。如果它是一个静态硬编码字段,那么如果它也在钥匙串中就不行了,并且在服务器上,每个用户都可以有不同的加密密钥。最好的方法是什么。

【问题讨论】:

您在设备上拥有的任何加密密钥都容易受到使钥匙串易受攻击的相同攻击。您的服务器应存储密码的加盐哈希。您还可以将加盐哈希存储在钥匙串中。永远不可能解密密码。据推测,越狱设备并访问钥匙串的人是设备的所有者,他们无论如何都知道密码。只要所有者设置了密码,第 3 方就无法攻击钥匙串。 关于加密路由、您的想法或静态硬编码字段。另一个想法是我添加了我在互联网上找到的越狱手机的检查,但当我阅读时,这种情况越来越难以检测。 @Paulw11 但如果我存储哈希值,黑客可以使用此哈希值登录,这里的安全性在哪里 我不知道你为什么担心越狱;如果用户越狱了他们的手机,这有什么关系?他们已经知道密码。你真的需要改变你的后端;您永远不需要向其发送明文密码。只需在用户注册期间将加盐哈希发送给它。即使更改密码,您也只需要发送旧的加盐哈希和新的加盐哈希。设备上的任何加密都容易受到攻击,这就是您使用散列而不是加密的原因。 安全是设备上的密码。如果您不信任设备的安全性,请不要存储任何内容。如果您存储加密密码,那么攻击者只需解密密码(因为您的应用程序包含解密密码所需的代码),现在他们拥有用户可能在另一个应用程序/网站上使用过的明文密码。 【参考方案1】:

这个问题没有很好的答案,因为威胁向量太广泛了。即使设备安全性受到损害,您也想保护一些秘密信息(手机用户已经越狱/入侵了其他一些信息)。可以在本文中找到有关此的最佳信息: https://nshipster.com/secrets/

TL;DR:“不要(但如果必须的话,混淆不会造成伤害)。”

【讨论】:

以上是关于在钥匙串中存储用于加密密码的密钥的最佳位置在哪里的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式在 OS X 钥匙串中存储对称密钥

Iphone 将信用卡信息保存在钥匙串中或使用密码学? [关闭]

存储 iOS 应用的用户密码和用户名

私钥密码是啥意思?

ASPasswordCredential - 从哪里来?

如何在ios钥匙串中手动存储?