盐
密码学中,盐是在密码被散列之前添加的随机数据。这使得攻击者无法从散列值推导出密码,因为攻击者无法使用预先计算的密码和相应散列的表来推导密码。
密码不应以明文形式存储,因为攻击者可能会破解存储密码的数据库。通常,密码会被散列,然后存储散列的结果。如果散列函数是密码学安全的,那么即使攻击者可以访问存储的散列,也无法逆转这个函数。
为了从散列值推导出密码,攻击者可以在预先计算的表中查找与散列对应的密码(也称为彩虹表):
密码 | 散列 |
---|---|
pa55w0rd | 56965E2A... |
abcdef | BEF57EC7... |
letmein | 1C8BFE8F... |
虽然这些表可能非常大,但这种攻击可能会成功,因为表查找是一种快速操作。
在对密码进行散列之前添加随机盐可以阻止这种攻击成功,因为散列不是仅基于密码计算的,而是基于密码与盐的组合计算的。
与密码不同,盐不需要保密:它可以与加盐和散列的密码一起存储在服务器的数据库中。