盐值
在加密学中,salt(加盐)是指在密码被哈希之前添加到密码中的随机数据。这使得攻击者无法通过使用预先计算好的密码及其对应哈希值表来从哈希值推导出密码。
出于攻击者可能闯入存储密码的数据库的风险,密码绝不应以明文形式存储。通常,密码会被哈希,然后存储生成的哈希值。如果哈希函数是密码学安全的,那么即使攻击者能够访问存储的哈希值,他们也无法逆向破解该函数。
为了从哈希值推导出密码,攻击者可以在一个预先计算好的表中(也称为彩虹表)查找与哈希值对应的密码,该表映射了可能的密码及其哈希值。
| 密码 | 哈希值 |
|---|---|
| pa55w0rd | 56965E2A... |
| abcdef | BEF57EC7... |
| letmein | 1C8BFE8F... |
尽管这些表可能非常大,但此类攻击仍然可能有效,因为表查找是一个非常快速的操作。
在哈希密码之前添加随机 salt 可以阻止此类攻击奏效,因为哈希值并非仅基于密码计算,而是基于密码与 salt 的组合。
与密码不同,salt 不需要保密:它可以与经过加盐和哈希处理的密码一起存储在服务器的数据库中。