【问题标题】:Why should a salt have the same length as the hashed value? [closed]为什么盐应该与散列值具有相同的长度? [关闭]
【发布时间】:2012-12-13 09:46:06
【问题描述】:

我已经读过将要使用的盐应该与散列密码具有相同的长度,这背后的原因是什么?它会增加密码保护吗? 我读过 Here:

为了使攻击者无法为每个可能的盐创建查找表,盐必须很长。一个好的经验法则是使用与散列函数的输出大小相同的盐。比如SHA256的输出是256位(32字节),所以salt至少应该是32个随机字节。

【问题讨论】:

  • 你在哪里读到的?
  • To make it impossible for an attacker to create a lookup table for every possible salt, the salt must be long.这就是答案
  • 你的问题最适合Security.SE
  • @jweyrich:或crypto.SE
  • 我不知道有Security.SE这样的东西,如果有请移步问题

标签: java security passwords


【解决方案1】:

我认为盐的强度应该与密码的强度大致相同,因为两者都应该能够抵抗暴力攻击。

简单的盐会更容易受到攻击,但即使是简单的盐也会使攻击比没有盐更费力。

【讨论】:

  • 盐不需要抵抗蛮力攻击。这不是秘密。它所需要的只是独一无二的。
【解决方案2】:

Here 很好地说明了为什么需要密码盐。

不,您不需要您的盐与密码的长度相同。事实上,文章中列出的所有实现都没有这样做。通常,对于每添加一点盐,您都需要攻击者将其存储预算翻倍。

因此,对于当今的技术水平而言,拥有 10 字节的盐应该足够了。另请注意,盐是二进制值,而密码不是,因此盐长度应以位/字节而不是字符为单位。

【讨论】:

    【解决方案3】:

    盐没有必要那么长,虽然它肯定不会伤害。

    salt 应该满足的唯一真正要求是它应该是全局唯一的。即使这也不是一个要求,从某种意义上说,拥有一些重复的盐并不能真正帮助攻击者。只有当你得到大量重复的很多盐时,盐才会开始失去效力。

    特别是,由于birthday paradox,如果盐是随机选择的,理想情况下它们应该至少为 2·log2(n) 位长,其中 n 是您希望拥有的最大用户数(或者,更一般地说,您希望使用您选择的散列方法的最大用户数)。当然,在此基础上留出一些安全边际总是一个好主意。

    特别是,地球的总人口略多于 232。这意味着,即使地球上的每个人都为您的系统注册了一个帐户,64 位盐仍然足够。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-13
      • 2012-12-19
      • 2012-08-13
      • 1970-01-01
      • 2022-11-22
      • 2010-09-19
      • 2013-07-04
      • 2014-07-04
      相关资源
      最近更新 更多