盐渍哈希和密码历史

4 passwords history salt

想知道每次密码更改时,对于单个给定用户来说盐是否是唯一的,或者每次重复使用相同的盐是不是一件大事.

每当给定用户更新密码时,我当前生成一个新的随机字符串作为salt.这样,每次用户有新密码时,他们也会更换盐.这很容易,为什么不呢.

嗯......这就是原因.我需要存储以前的X密码以确保密码不被重用.在过去(我最后一次为此编写代码),我可以存储以前的MD5哈希值,并将新的哈希值与该列表进行比较.好吧,现在我正在使用盐腌哈希,每次盐都是独特的,那些比较已不再可能,因为以前的盐不再是已知的.

为了使该系统工作,我有两个选择:除最终哈希之外还存储盐的历史记录,或者为每个密码更新的任何一个给定用户重复使用相同的盐.这些中的任何一个都可以让我构建可以与历史进行比较的值.

后者工作量较少,但失去了什么力量?从实际的角度来看,我认为没有.以为我会在这里得到第二个意见.谢谢.

为了保持"回答"这个问题 - 为了保持可搜索的密码历史(为了防止pswd回收),为任何一个用户重复使用相同的盐都会有一个可接受的最小程度的保护减少?

Jon*_*eet 6

重用相同的盐意味着如果用户被黑客明确定位,他们可以使用"用户的盐"生成"密码哈希"字典 - 这样即使用户更改了密码,黑客仍然会立即知道没有任何额外工作的新密码.

我每次都会用不同的盐.

至于存储MD5哈希加盐 - 可能你已经存储了salt + hash,以便验证用户的当前密码.为什么你不能保留历史检查的完全相同的信息?这样,您可以使用一段代码进行密码检查,而不是分离出当前和历史路径.他们做同样的事情,所以他们使用相同的代码是有道理的.

编辑:为了解释我的意思,考虑一个4字符的盐,在密码前面加上......为了争论,想象某人只在他们的密码(和盐)中使用AZ,az和0-9.

如果您不提前知道盐(准备字典攻击时),那么为了准备所有8个字符"人类"密码的字典,您需要散列62 ^ 12个连接密码.但是,如果您总是知道串联密码的前4个字符是什么(因为您提前知道了盐),那么您只能散列62 ^ 8值 - 所有那些以盐开头的值.它使盐对该特定攻击无效.

这当然仅适用于目标用户 - 并且只有当攻击者可以在密码更改之前和之后都进入哈希列表时.它基本上使得更改密码作为安全措施的效率降低.