密码盐:其他最佳实践

时间:2009-08-02 21:49:16

标签: cryptography salt

与大多数程序员一样,我不是加密专家,但我了解基础知识。然而,如Jeff's blog post所述,一点知识可能是一件危险的事情。考虑到这一点,我理解盐值的目的但我需要一些帮助来理解如何使用盐值。

我在这个主题的其他帖子中读到,最好使用随机盐值来加密每个密码。如果是这种情况,当我尝试对用户进行身份验证时,如何重现该随机盐值?在这种情况下,我会加密用户提供的明文密码,对其进行加密,并将其与存储在数据库中的密码进行比较。在创建密码时,是否将随机盐值与加密密码一起存储在用户记录中?如果黑客拥有完整的用户记录,这会使盐值无效吗?

2 个答案:

答案 0 :(得分:8)

salt的主要目的是在破解密码哈希时防止使用rainbow tables - 不使用盐,可以简单地使用预先生成的反向查找表来查找哈希值知道可能产生的密码。

使用salt,彩虹表方法失败,因为哈希到密码的映射对于特定的盐完全不同 - 因此必须为每个盐值(以及生成所需的时间)单独生成彩虹表彩虹表与在没有彩虹表协助的情况下暴力破解哈希所需的时间成正比。)

由于盐的目的是不允许使用预先生成的彩虹表,无论攻击者是否知道给定用户输入的特定盐,因此没有真正的理由将其单独存储,只要你在每个条目都使用独特的盐。

答案 1 :(得分:1)

我通常将我的盐存储在与用户数据相同的表中 - 如果黑客可以直接访问您的数据库,他们将破解您的密码,盐只是一种延迟它的方法。它会在一定程度上阻止他们使用彩虹表。