首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >密码盐类:前置与追加

密码盐类:前置与追加
EN

Stack Overflow用户
提问于 2010-11-13 09:33:23
回答 3查看 3.8K关注 0票数 11

我只是在Django中查看了密码哈希的实现,并注意到了把盐加在一起,因此哈希的创建类似于sha1(salt + password)

在我看来,盐有两种用途。

  1. 防止彩虹表查找 好吧,加盐对彩虹桌没什么影响。
  2. 对蛮力/字典攻击的强化() 这就是我的问题所在。如果有人想从被盗的密码数据库中攻击一个密码,他需要尝试大量密码(例如字典单词或A-Za-z0-9排列)。 假设我的密码是"abcdef",salt是"salt“,攻击者尝试所有的a{6}密码。 使用一个加号盐,必须计算hash("salt"),存储哈希算法的状态,然后对每个置换继续从该点开始。也就是说,所有的排列都需要26^6复制哈希算法的状态结构操作和26^6 hash(permutation of [a-z]{6})操作。由于复制哈希算法的状态非常快,所以盐在这里几乎不会增加任何复杂性,不管它有多长。 但是,使用附加的salt,攻击者必须计算每个置换的hash(permutation of [a-z]{6} + salt),从而导致26^10哈希操作。因此很明显,附加盐会根据盐的长度增加复杂性。

我不认为这是历史原因,因为Django是比较新的。那么,预售盐有什么意义呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-13 09:40:27

这两种方法都不要使用标准的密钥推导函数,比如PBKDF2。永远不要翻动你自己的密码。这太容易弄错了。PBKDF2使用了许多迭代来防止蛮力,这比简单排序的改进要大得多。

您的技巧是,在处理salt之后,预计算散列函数的内部状态可能并不容易实现,除非盐的长度对应于底层块密码的块长度。

票数 10
EN

Stack Overflow用户

发布于 2010-11-18 07:56:14

如果salt是预先准备好的,攻击者可以为盐类创建哈希状态数据库(假设salt足够长,可以进行散列步骤),然后运行字典攻击。

但是,如果附加salt,攻击者可以为密码字典创建这样的数据库,并且只计算salt的哈希。考虑到salt通常比密码短(比如4个字符salt和8个字符密码),它将是更快的攻击。

票数 1
EN

Stack Overflow用户

发布于 2010-11-13 09:44:01

当然,这是一个有效的观点;但是,如果您想要增加计算哈希所需的时间,只需使用更长的哈希即可。例如,SHA256而不是SHA1。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4171859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档