Rainbow Table 彩虹表

预生成的 hash 值及其明文对应表。假设数据库泄露了一堆 MD5 密码 hash,攻击者不用现场算 —— 查表就行,毫秒级反推。

工作原理(简化版)

  1. 攻击者提前算好海量”明文 → hash”对照表(可能几十 GB 到几 TB)
  2. 拿到目标 hash,直接查表
  3. 查到 → 拿到原密码;查不到 → 继续暴力破解

为了节省空间,实际的 rainbow table 用了”reduction function + 链”的压缩技巧,所以叫”彩虹”。

为什么 salting 能克彩虹表

  • 没 salt: MD5("password123") 是固定值 → 表里直接查到
  • 加 salt: MD5("password123" + "随机字符串a3f7") → 每个用户独立 salt → 攻击者必须为每个用户单独造表,成本爆炸

这就是为啥所有现代系统绝不能不加 salt

现在还有用吗

  • 过时但没死 —— 老系统、泄露库里的弱 hash(MD5/SHA1 无 salt)依然可被秒杀
  • 被 GPU 暴破取代 —— 现在更常用 hashcat + GPU,组合字典 + 规则,比查表更灵活
  • HaveIBeenPwned —— 公开 hash 数据库,本质是一种 rainbow table 的现代变体

Salting 直接相关。