使用哈希作为盐的散列?

时间:2009-07-13 16:03:04

标签: database security hash

假设用户注册了您的网站,您将他们选择的密码哈希,然后将该哈希用作盐,并使用该盐重新密码。

示例:

String hash1 = MD5(password);
String endHash = MD5(hash1 + password);

然后将endHash存储在您的数据库中。如果我的数据库被压缩,这个有效的反对彩虹表会攻击吗?或者我错过了一些容易破解的东西?

6 个答案:

答案 0 :(得分:7)

这是关键的强化(http://en.wikipedia.org/wiki/Key_strengthening),这是一种很好的技术,但却无法取代实际的盐。它不会保护您免受使用此双哈希函数编写的彩虹表。

答案 1 :(得分:5)

腌制的目的是防止使用巨大的预先计算的表格。使用此方法,可以计算任何密码的哈希值,而无需访问您的数据库。您应该存储一个随机值并将密码和该值一起散列。

答案 2 :(得分:1)

散列密码的弱点是攻击者对哈希函数的了解。如果他们知道你的哈希函数而不是你的盐,盐就保护了你的密码。如果他们既知道散列函数又知道你的盐,那么你的数据就有风险。

因为这适用于您的问题 - 使用动态盐通常会使您更难以找出您的盐。这会增加安全性,但如果有人知道您的算法,则无济于事。

以这种方式增加复杂性确实会使您的系统更难破解。然而,鉴于有足够的资源,没有什么是不可破解的。

答案 3 :(得分:1)

除了哈希两次之外,你应该使用用户名作为函数的盐:

String hash = MD5(username + password)

您还应考虑使用其他功能,因为md5被视为已损坏MD5

答案 4 :(得分:0)

没有区别:您存储的数据仍然完全基于密码,因此没有额外的保护。

答案 5 :(得分:0)

此外,您应该避免使用MD5来支持当前强大的哈希算法,例如SHA1,SHA-256,SHA-512。