繁体   English   中英

使用 SHA-512 和 salt 到 hash MD5 散列密码?

[英]Use SHA-512 and salt to hash an MD5 hashed password?

我正在开发一个使用 MD5(无盐)散列用户密码的系统。 我想使用 SHA-512 和盐更安全地存储密码。

虽然这对于未来的密码来说很容易实现,但我还想 retrofit 现有的 MD5 散列密码,最好不要强迫所有用户更改他们的密码。 我的想法是只使用 SHA-512 和适当的 salt 到 hash 现有的 MD5 hash。然后我可以在数据库中设置一些标志,指示哪些密码是从纯文本散列的,哪些是从 MD5 hash 散列的. 或者我可以在对用户进行身份验证时尝试两者。 或者甚至只是 hash 个新密码,先是 MD5,然后是 SHA-512/salt,因此它们可以像旧密码一样对待。

在编程上,我不认为这会是一个问题,但我对加密/散列的了解还不够多,不知道我是否以任何方式通过将 SHA-512/salt hash 应用于已经过 MD5 散列的密码。 我的第一直觉是,如果有的话,它会更强大,一个非常轻的键拉伸。

我的第二个直觉是我真的不知道我在说什么,所以我最好寻求建议。 有什么想法吗?

Function 与密码原语的组合是危险的,如果可以避免则不应这样做。 针对您的问题类型的常见解决方案是在迁移期间保留两个哈希值,尽可能使用新的 hash 并透明地升级旧密码(当您检查密码并且它匹配时,使用新算法重新哈希并存储它)

如果您有一个基于质询-响应的方案,您看不到明文密码,那么这将不起作用,但由于您似乎有一个不会改变的存储盐,我假设您的应用程序会进行哈希处理。

如果你 hash 先用 MD5,你将只有 MD5(128 位)的传播。 SHA512 的很大一部分空间不会被您的密码覆盖。 所以你不用SHA512,但也不会比MD5差。

您的好处是,如果有人获得 SHA512 hash 并且不知道盐(您必须以某种方式强制执行)无法查找哈希并获取密码 - 您拥有的 MD5 数据库可能会这样做现在。

所以是的,您可以重新散列现有的 MD5 密码。 但正如第一段中所解释的,将 MD5 也应用于所有新密码然后将它们作为 SH512 hash 应用是一个坏主意。 一个简单的实现是在哈希旁边的数据库中有一个 boolean 的“salted”字段(但不要把盐放在那里)。

相信你的第二直觉。 使用专门为散列密码制作的现有库,而不是尝试自己编写。

可能 hash 使用 MD5 的新密码,然后 hash 使用密码哈希库的 MD5。 这样,您就可以保持与旧密码的向后兼容性。

即 password_hash(所有旧的 md5 密码)和 password_hash(md5(新密码))

(警告:我不是密码学专家)

http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html

如果你看看大多数银行和高安全人员如何更改密码。 他们中的大多数基本上要求使用旧加密方法的人创建新密码。 我认为您的第一个解决方案是在所有现有的旧 MD5 密码用户上放置一个标志,并通知他们需要创建新密码并慢慢将他们迁移到新系统。 这样,当您在出现任何问题时对系统进行故障排除时,您不会问这是新用户还是旧用户。 我们是双散列还是单散列? 永远不要将两个 hash 作为可能的答案进行比较,因为如果 MD5('abc') => 123,SHA('NO') => 123,这意味着有人可能输入了错误的密码但仍然可以进入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM