1

我认为使用可变随机字符串作为盐的原因是迫使攻击者在使用他的彩虹表之前查找每个盐。这需要很长时间。
但大多数开发人员似乎使用固定大小的盐。如果您查找一种盐的大小,因为大多数密码都与盐一起存储,所以您不能只从每个密码摘要中删除盐长度,然后使用您的彩虹表吗?
我不明白这会带来多大的努力,这让我质疑为什么我什至应该使用可变盐。因为攻击者需要的唯一信息是一种盐的大小,然后他就不必再查找盐了。随机大小不是更安全吗?
对我来说,可变性和随机化确实像是一种“通过默默无闻的安全”的事情,因为如果您知道该方法并且实施它的唯一原因是引起一些混乱,那么它很容易解决。还是我错了?

4

1 回答 1

2

盐可以是任何长度。好的盐的唯一要求是它“足够独特”,因为正是这种特性使得彩虹表攻击对盐不可行:生成彩虹表需要更多的时间,它只适用于给定的盐,而不是生成只需尝试蛮力攻击1

公共盐使得破解密码列表变得更加耗时。但是,在破解单个密码时,它不会使字典攻击更加困难。-盐(密码学)

然后,生成良好盐的一种简单方法是从密码随机数生成器生成一个大的(例如,128 个随机位)值。这将简单地确保盐的长度相同 - 但是有大量的唯一值可以用 128 位表示。

由于哈希是使用原始的“长”盐生成的,因此稍后在指定原始密码使用修剪过的盐只会产生无效的哈希- 它不会更容易找到哈希冲突。(选择像 bcrypt 这样的“慢”散列是良好散列密码设计的另一个要求。)

如果攻击者能够欺骗系统使用小范围的盐值(甚至是固定的盐值),那么盐就会失去“足够唯一”的属性。


1可悲的是,许多人选择了较差的密码 - 主要是太短的密码,基于常用词/序列,或在站点之间共享。虽然缓慢的哈希会有所帮助,并且盐会阻止彩虹表的应用,但考虑到足够大的帐户池(并且可能预期的时间更少),蛮力仍然可能恢复一些密码。

于 2015-09-15T07:15:13.313 回答