hash salting和noncing有什么区别?

时间:2011-11-17 20:52:34

标签: security hash cryptography

我已经阅读了这两个主题,而且我似乎无法完全掌握腌制和非腌制哈希之间的区别。

3 个答案:

答案 0 :(得分:46)

salt是一个非秘密的随机值,用于确保相同的明文不会一致地散列到相同的输出值;它用于防止预计算攻击,例如Rainbow Tables

随机数(“一次使用的数字”)是 - 通常是随机生成的 - 与加密方案中的消息相关联的值,并且在某个指定范围内(例如给定的时间间隔或会话)必须是唯一的。它通常用于阻止replay attacks

粪便和盐类似并且用于相关目的,但不相同。两者通常是随机生成的,而不是秘密的,并用于防止可能对系统造成的攻击。它们的区别主要在于它们的使用环境,以及重复的后果 - 重复的盐不重要,但重复的nonce会产生可怕的后果。

答案 1 :(得分:10)

nonce =一次使用的数字。如果为正在散列的每一位数据生成一个唯一的salt,那么它本质上也是一个nonce。

答案 2 :(得分:6)

哈希是一种与加密不同的方式(使用我们可以解密的密钥)。固定大小和数据的轻微变化会产生全新的哈希值。就像指纹一样。示例:MD5,MD6,SHA-1,SHA-2等。

使用哈希格式在密码数据库中存储密码也不安全,因为Rainbow表,字典攻击和暴力(GPU可以计算每秒数十亿的哈希值)。为避免这些问题,我们需要使用 Salt

使用 Salt (随机数),因此相同的密码并不总是生成相同的密钥。即简单地添加盐以使公共密码不常见。

Salt 是我们添加到哈希中的东西,以防止使用彩虹表进行彩虹攻击,彩虹表基本上只是将哈希转换为密码的巨大查找表,如下所示:

dffsa32fddf23safd -> passwordscrete 
f32ksd4343fdsafsj -> stackoverflow

所以黑客可以找到这个彩虹表,为了避免这个问题,我们必须使用密码和盐的组合来存储哈希值。

hash= hashFunction(passowrd+salt)

Nonce N umber仅使用一次)不需要保密或随机,但不得重复使用同样的关键。这用于防止重放攻击(又称回放攻击)。