为什么盐有固定的长度?
Why do salts have fixed lengths?
我认为使用可变随机字符串作为盐的原因是为了迫使攻击者在哈希上使用他的彩虹 table 之前查找每个盐。这需要很长时间。
但大多数开发人员似乎都使用固定大小的盐。如果您查看一个盐的大小,您知道这是因为大多数密码都与盐一起存储,难道您不能只削减每个密码摘要的盐长度,然后使用您的彩虹 table 吗?
我不明白这会多么费力,这让我质疑为什么我什至应该使用可变盐。因为攻击者需要的唯一信息是 一种盐的大小 然后他就不必再查找盐了。随机大小不是更安全吗?
对我来说,可变性和随机化确实像是 'security through obscurity' 的事情,因为如果您知道该方法,那么它很容易变通,而实施它的唯一原因是会引起一些混乱。还是我错了?
盐可以是任意长度。一个好的盐的唯一要求是它是 'sufficiently unique' 因为正是这个 属性 使得彩虹 table 攻击对盐不可行:生成彩虹需要更多时间 table, 这只适用于给定的盐,而不是仅仅尝试暴力攻击1.
A public salt makes it more time-consuming to crack a list of passwords. However, it does not make dictionary attacks harder when cracking a single password. - Salt (cryptography).
生成优质盐的一种简单方法是从加密随机数生成器生成一个大值(例如,128 个随机位)。这将确保 salt 的长度相同 - 但是有 疯狂 数量的唯一值可以用 128 位表示。
由于散列是使用原始 'long' 盐 生成的,因此稍后使用修剪后的盐只会产生无效的散列 when 指定原始密码 - 它不会使查找哈希冲突变得更容易。 (选择像 bcrypt 这样的 'slow' 散列是良好散列密码设计的另一个要求。)
如果攻击者 能够欺骗系统使用小范围的盐值(甚至固定盐值),那么盐会失去 属性共 'sufficiently unique'.
1 可悲的是,许多人选择了糟糕的密码 - 主要是太短的密码,基于常见的单词/序列,或在站点之间共享。虽然缓慢的哈希会有所帮助,并且盐会阻止彩虹 tables 的应用,但如果有足够大的帐户池(并且预计时间会更少),蛮力仍有可能恢复 一些个密码。
我认为使用可变随机字符串作为盐的原因是为了迫使攻击者在哈希上使用他的彩虹 table 之前查找每个盐。这需要很长时间。
但大多数开发人员似乎都使用固定大小的盐。如果您查看一个盐的大小,您知道这是因为大多数密码都与盐一起存储,难道您不能只削减每个密码摘要的盐长度,然后使用您的彩虹 table 吗?
我不明白这会多么费力,这让我质疑为什么我什至应该使用可变盐。因为攻击者需要的唯一信息是 一种盐的大小 然后他就不必再查找盐了。随机大小不是更安全吗?
对我来说,可变性和随机化确实像是 'security through obscurity' 的事情,因为如果您知道该方法,那么它很容易变通,而实施它的唯一原因是会引起一些混乱。还是我错了?
盐可以是任意长度。一个好的盐的唯一要求是它是 'sufficiently unique' 因为正是这个 属性 使得彩虹 table 攻击对盐不可行:生成彩虹需要更多时间 table, 这只适用于给定的盐,而不是仅仅尝试暴力攻击1.
A public salt makes it more time-consuming to crack a list of passwords. However, it does not make dictionary attacks harder when cracking a single password. - Salt (cryptography).
生成优质盐的一种简单方法是从加密随机数生成器生成一个大值(例如,128 个随机位)。这将确保 salt 的长度相同 - 但是有 疯狂 数量的唯一值可以用 128 位表示。
由于散列是使用原始 'long' 盐 生成的,因此稍后使用修剪后的盐只会产生无效的散列 when 指定原始密码 - 它不会使查找哈希冲突变得更容易。 (选择像 bcrypt 这样的 'slow' 散列是良好散列密码设计的另一个要求。)
如果攻击者 能够欺骗系统使用小范围的盐值(甚至固定盐值),那么盐会失去 属性共 'sufficiently unique'.
1 可悲的是,许多人选择了糟糕的密码 - 主要是太短的密码,基于常见的单词/序列,或在站点之间共享。虽然缓慢的哈希会有所帮助,并且盐会阻止彩虹 tables 的应用,但如果有足够大的帐户池(并且预计时间会更少),蛮力仍有可能恢复 一些个密码。