Rainbow Table 彩虹表
预生成的 hash 值及其明文对应表。假设数据库泄露了一堆 MD5 密码 hash,攻击者不用现场算 —— 查表就行,毫秒级反推。
工作原理(简化版)
- 攻击者提前算好海量”明文 → hash”对照表(可能几十 GB 到几 TB)
- 拿到目标 hash,直接查表
- 查到 → 拿到原密码;查不到 → 继续暴力破解
为了节省空间,实际的 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 直接相关。