首页 文章

为什么盐的长度与散列值相同? [关闭]

提问于
浏览
6

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

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

3 回答

  • 9

    Here很好地描述了为什么需要密码盐 .

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

    因此,拥有10字节的盐应该足以满足当今的技术水平 . 另请注意,salt是二进制值而密码不是,因此盐长度应以位/字节而非字符来度量 .

  • 2

    盐没有特别需要那么久,虽然它肯定不会受到伤害 .

    salt应该满足的唯一真正要求是它应该是全局唯一的 . 即使这并不是一个严格的要求,因为只有当你得到大量重复的盐开始失去其有效性时才会出现一些重复的盐 .

    特别是,由于birthday paradox,如果盐是随机选择的,理想情况下应该至少为2·log2(n)位长,其中n是您期望拥有的最大用户数(或者更一般地说,最大数量为您希望使用所选散列方法的用户) . 当然,最重要的是要有一些安全边际 .

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

  • 4

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

    简单的盐会更容易受到伤害,但即使是简单的盐也会使得攻击比没有盐更加费力 .

相关问题