我只是在Django中查看了密码哈希的实现,并注意到了把盐加在一起,因此哈希的创建类似于sha1(salt + password)。
在我看来,盐有两种用途。
hash("salt"),存储哈希算法的状态,然后对每个置换继续从该点开始。也就是说,所有的排列都需要26^6复制哈希算法的状态结构操作和26^6 hash(permutation of [a-z]{6})操作。由于复制哈希算法的状态非常快,所以盐在这里几乎不会增加任何复杂性,不管它有多长。
但是,使用附加的salt,攻击者必须计算每个置换的hash(permutation of [a-z]{6} + salt),从而导致26^10哈希操作。因此很明显,附加盐会根据盐的长度增加复杂性。我不认为这是历史原因,因为Django是比较新的。那么,预售盐有什么意义呢?
发布于 2010-11-13 09:40:27
发布于 2010-11-18 07:56:14
如果salt是预先准备好的,攻击者可以为盐类创建哈希状态数据库(假设salt足够长,可以进行散列步骤),然后运行字典攻击。
但是,如果附加salt,攻击者可以为密码字典创建这样的数据库,并且只计算salt的哈希。考虑到salt通常比密码短(比如4个字符salt和8个字符密码),它将是更快的攻击。
发布于 2010-11-13 09:44:01
当然,这是一个有效的观点;但是,如果您想要增加计算哈希所需的时间,只需使用更长的哈希即可。例如,SHA256而不是SHA1。
https://stackoverflow.com/questions/4171859
复制相似问题