Salt
Salt 是密码哈希时加入的随机值,使相同密码产生不同哈希,抵御彩虹表与相同密码检测。
用途
使每个用户的密码哈希唯一,即使密码相同,防止预计算与批量比对。
机制
为每个密码生成唯一随机 salt(≥16 字节),与密码拼接后哈希:H(password || salt)。salt 与哈希一同存储(无需保密)。验证时用存储的 salt 重新哈希比对。salt 使彩虹表需为每用户独立预计算,不可行。
用例
- 密码哈希存储
- KDF(PBKDF2/scrypt)输入
- 加密 IV 类似用途
- 令牌生成
示例
- 输入
password + random salt输出Unique hashDifferent per user
常见错误
- A global fixed salt (equivalent to no salt)
- Generate a unique random salt per password
相关词条
Pepper
Pepper 是密码哈希时加入的服务器端秘密值(与 salt 不同,全局共享且保密),增加离线攻击难度。 词汇表
Hash Salting
哈希加盐是在哈希输入中加入随机 salt 的技术,使相同输入产生不同哈希,抵御彩虹表与碰撞检测。 词汇表
Rainbow Table
彩虹表是 Martin Hellman 改进的预计算表,用于反转哈希函数,以时间-空间折中以空间换时间破解密码哈希。 词汇表
PBKDF2
PBKDF2(Password-Based Key Derivation Function 2)是 PKCS#5 标准的 KDF,通过多次 HMAC 迭代从密码派生密钥,广泛用于密码哈希与密钥派生。 词汇表