3

像大多数程序员一样,我不是密码学专家,但我了解基础知识。但是,正如Jeff 的博文中所指出的,一点知识可能是一件危险的事情。考虑到这一点,我了解盐值的用途,但我需要一些帮助来了解如何使用盐值。

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

4

2 回答 2

8

盐的主要目的是防止在破解密码散列时使用彩虹表- 在不使用盐的情况下,人们可以简单地使用预先生成的反向查找表来查找散列并立即知道可能生成的密码.

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

由于盐的目的是不允许使用预先生成的彩虹表,无论攻击者是否知道给定用户条目的特定盐,所以没有真正的理由单独存储它,只要你是为每个条目使用唯一的盐。

于 2009-08-02T21:52:22.277 回答
1

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

于 2009-08-02T21:51:59.877 回答