gpt4 book ai didi

hash - 理想的密码哈希算法是什么样的?

转载 作者:行者123 更新时间:2023-12-02 07:44:34 25 4
gpt4 key购买 nike

免责声明:SO 上有很多类似的问题,但我正在寻找实用的建议,而不仅仅是一般原则。另外,请随意指出“理想”算法的实现(PHP 会很好;),但请提供具体细节(它是如何工作的)。

计算存储在数据库中的密码哈希字符串的最佳方法是什么?我知道我应该:

我在考虑使用这样的算法:

x = md5( salt + password);
repeat N-times:
x = md5( salt + password + x );

我确信这很安全,但我想到了几个问题:

  1. 在 salt 中包含用户名是否有益?

  2. 我决定为所有用户使用通用盐,这有什么缺点吗?

  3. 推荐的最小 salt 长度是多少?

  4. 我应该使用 md5、sha 还是其他什么?

  5. 上面的算法有什么问题/有什么建议吗?

  6. ...(欢迎提供更多:)

我知道决策必然取决于具体情况,但我正在寻找一种解决方案:

  • 提供尽可能多的安全
  • 足够快(在像样的机器上 < 0.5 秒)

那么,理想的算法应该是什么样的,最好是伪代码?

最佳答案

目前“理想”的密码哈希函数是 bcrypt .它包括盐处理和可配置的迭代次数。有一个free opensource PHP implementation .

第二好的是 PBKDF2 ,它依赖于底层哈希函数,与您的建议有些相似。有technical reasons为什么 bcrypt 比 PBKDF2“更好”。


至于您的具体问题:

1. would it be beneficial to include username in salt?

不是真的。

2. I have decided to use a common salt for all users, any downside in this?

是的:它消除了盐的好处。 salt 存在的唯一原因是每个散列密码都是唯一的。这可以防止攻击者攻击两个散列密码比攻击一个散列密码的两倍要少。盐必须唯一。即使拥有每个用户的 salt 也是不好的:当用户更改密码时,也必须更改 salt。当盐被重用/共享时,攻击者可能应用的优化类型包括(但不限于)预先计算的哈希表,例如 rainbow tables .

3. what is the recommended minimum salt length, if any?

盐必须是唯一的。唯一性是一个很难维护的属性。但是通过使用足够长的随机盐(用一个好的随机数生成器生成,最好是一个加密强度高的随机数生成器),您可以以足够高的概率获得唯一性。 128 位盐足够长。

4. should I use md5, sha or something else?

MD5 不利于公共(public)关系。它有已知的弱点,这些弱点可能适用于也可能不适用于给定的用法,并且很难以任何可靠性“证明”这些弱点不适用于特定情况。 SHA-1 更好,但不是“好”,因为它也有缺点,尽管比 MD5 的严重得多。 SHA-256 是一个合理的选择。正如上面所指出的,对于密码散列,您需要一个函数,它不能在并行架构上很好地扩展,例如 GPU。 , 并且 SHA-256 扩展性很好,这就是为什么 bcrypt 中使用的 Blowfish 导数更可取。

5. is there anything wrong with the above algorithm / any suggestions?

这是自制的。那很糟。问题是没有已知的密码算法安全性测试。我们最多只能希望让几百名专业密码学家花几年时间尝试破解一个算法——如果他们做不到,那么我们可以说,虽然该算法并没有真正“证明”是安全的,但至少存在弱点一定不明显。 Bcrypt 已经存在、广泛部署和分析 12 年了。即使借助 StackOverflow,您也无法独自战胜它。

作为一名专业的密码学家,我会对在 MD5 甚至 SHA-256 中使用简单连接表示怀疑:这些是 Merkle–Damgård哈希函数,这对于抗碰撞性很好但不提供 random oracle (有所谓的“长度扩展攻击”)。 PBKDF2中并没有直接使用hash函数,而是通过HMAC .

关于hash - 理想的密码哈希算法是什么样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7927433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com