盐和密码 - 前缀还是后缀

3

这是一个关于需要哈希的盐短语的问题。

我想知道在短语前缀或后缀加盐更安全?

盐 + 短语 或者 短语 + 盐?

我的问题来自于这篇MD5s文章上的评论。我不确定作者评论背后的推理。


5
为什么你要使用MD5? - BobbyShaftoe
2
问答:https://dev59.com/hnRB5IYBdhLWcg3wQVWV - Randolpho
我仍然没有得到关于Dru Nelson在skrenta的关于MD5的博客文章中的评论的合理解释。但是,大多数人的共识似乎是,盐的放置位置没有任何影响(仅限于大多数情况下)。如果Dru Nelson的评论确实有所发现,我只是不想忽视某些事情。 - Raj Rao
Dru Nelson 在 Skrenta 的博客文章中的评论在此为您方便阅读而复制:然而我要补充一点..你挥舞手的示例使用hash = md5(s . 'xyzzy')来克服想要引发冲突的恶意方是行不通的。将相同的内容附加到两个散列出相同值的消息中会生成两个新消息,它们的哈希值也相同。事实上,这就是使得创建散列值相同的任意消息变得如此容易(根本不需要“高明的攻击者”)的原因。 - Raj Rao
5个回答

5
无论盐是添加到前面还是后面都没有影响。
以下因素会影响安全性:
1. 您的盐是否私有(如果是,那么私密程度如何?)。越私密越好。这意味着,如果您可以避免将盐存储在数据库中,即使您的数据库被攻击,您的系统也可以安全地抵御暴力破解攻击。 2. 每个值加盐时,您的盐是否随机?如果是,则有助于防御彩虹表攻击,即使您的数据库被攻击并且您的盐存储在数据库中。注意:如果存储的密码足够长,它们可能免疫于暴力破解攻击。 3. 您的盐是否足够长?您的盐越长,您就越安全。

4
这不是我点赞的,但我猜测可能是因为你的第一条原因。私有盐并不能真正增加安全性。即使黑客获取了哈希和盐的访问权限,只要盐足够长且每个密码都是随机的,彩虹表将需要极大的计算能力才能破解。 - Randolpho
当然,如果盐值是公开的,暴力破解短密码仍然是完全可能的。 - Sam Saffron
2
@SamSaffron:这是一条死后回复,但在盐值前加上前缀是一个坏主意,因为它使暴力破解密码变得更容易。如果你以sasspppp的盐/密码字节散列值为基础,攻击者可以计算出已知的ssss部分的哈希状态,然后将其用作反复攻击未知的pppp部分的“营地”。 - Darien
如果盐比哈希更私密,那么它根本就不是盐。私密的东西是一个密钥(因此您可能正在使用一个带密钥的哈希函数),而不是盐。 - Charles Duffy

2

当有人对盐的使用有疑问时,我担心这是因为他们正在忙于(重新)发明一些本应一开始就不该发明的东西。根据这个问题,我的建议是使用HMAC。


1
如果您使用HMAC,仍需要存储某处的私钥...影响基于盐的安全性的相同因素也会影响您的HMAC算法密钥的选择。 - Sam Saffron
1
问题是关于盐的位置 - 而不是密钥管理。HMAC 的使用解决了位置问题。 - Einstein

1
与其他人所说的不同,这很重要!如果你关心的话,就像 @einstein 一样使用 HMAC
为什么前缀不好?因为一个人可以计算出给定固定盐前缀的校验和的中间状态,然后开始并行计算其余部分。总之,phrase+saltsalt+phrase 更安全,但 HMAC(salt, phrase) 更好。 相关阅读

1

无论何时消化salt:前缀,后缀,中缀都会产生不同的哈希值,但都能达到打败彩虹表或其他预先哈希过的字典攻击的目的。

我认为该评论具体涉及MD5的漏洞,而不是哈希算法。我不理解细节,但它与找到两个产生相同哈希的前缀有关


这不是碰撞攻击的工作方式。你需要知道被散列的完整消息才能产生碰撞。你无法从部分消息中产生碰撞。 - Sam Saffron
你发现两个不同的消息产生了哈希碰撞。然后,你将相同的后缀附加到这些前缀中的每一个,并且你得到了另一个碰撞。我认为引用的评论试图解释使用此漏洞的密码破解,但我不完全理解他是如何认为它起作用的。 - erickson
真的吗?MD5的输出只是其最后一个中间哈希值。如果您有两个不同的前缀发生碰撞,这意味着中间哈希值相同 - 而该值是哈希的整个状态。如果两个处于相同状态的MD5哈希摘要相同的数据,您会期望结果是什么?请参见http://www.win.tue.nl/hashclash/rogue-ca/。 - erickson
如果你在前缀冲突的情况下添加相同的后缀,也会导致冲突。我不知道在密码存储方案中如何利用这一点。 - Sam Saffron

-2

从技术角度来看,只要盐是唯一且不易猜测的,它就没问题。只是不要像我一样犯存储盐的错误。

“加盐”字符串的目的是以比MD5哈希更个性化和独特的方式混淆它。没有正确或错误的方法,只要你是唯一知道如何操作的人。这将实现结果,使生成的MD5散列值与彩虹表不相对应,以便轻松破解密码。


从技术上讲,如果黑客假定一种常见的方式,以特定的方式执行可以防止这种心态。换句话说,如果我的研究是有效的,前缀和后缀对某些威胁更/不太容易受到攻击。因此,如果您对安全非常担忧,那么反对票可能是合适的,我并不自命不凡地成为这方面的专家。^_^ - Blank
3
-1 盐值是公开存储的,与加密密码一起用来防御攻击者对多个加密密码进行摊销攻击。请不要将其与私钥混淆。 - starblue
啥?我一直以为在哈希之前密码会被加上盐。那么显然我错了,我要去做更多的研究。耶! - Blank
@SamSaffron,下投票的原因是它是错误的。 "Salt" 是一个具有特定含义的技术术语,与哈希本身具有相同级别的安全性是其中的一部分。如果某些东西是私有的,那么它不是盐,而是一个密钥(也许您正在使用 HMAC-键控哈希而不是盐哈希)。 - Charles Duffy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接