我已经阅读了这两个主题,而且我似乎无法完全掌握腌制和非腌制哈希之间的区别。
答案 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仅使用一次)不需要保密或随机,但不得重复使用同样的关键。这用于防止重放攻击(又称回放攻击)。