在存储密码时,盐应该是唯一的并且为每个用户随机生成。为什么我们不能使用用户名作为输入的密码散列函数生成这些盐是有原因的吗?
在我看来,这些散列会提供我们想要的属性,而且我们不必为盐使用额外的存储空间。
在存储密码时,盐应该是唯一的并且为每个用户随机生成。为什么我们不能使用用户名作为输入的密码散列函数生成这些盐是有原因的吗?
在我看来,这些散列会提供我们想要的属性,而且我们不必为盐使用额外的存储空间。
好的盐在整个时空范围内都是独一无二的。
用户在更改密码时不会更改他的名字:这是随着时间的推移唯一性的失败。(类似情况:关闭旧用户帐户,注册新用户并重复使用相同名称。)
一个用户在几个不同的服务器上具有相同的名称,它们可能使用相同的散列策略:这是空间唯一性的失败。(特别想一想所有这些称为“管理员”的用户。)
因此,用户名作为盐相当草率。它们比完全没有盐要好得多,但强烈建议使用适当的随机盐代替。来自加密强 PRNG的 16 个字节(或更多)将为您提供更好的唯一性。
想想最想要的用户名,例如 tom、admin、user...
如果您为 x 个最想要的用户名创建 x 个彩虹表,那么对于这 x 个用户,攻击者只需在彩虹表中查找该用户名。