彩虹表(Rainbow Table)是一种破解密码哈希的预计算查找表,通过事先算好大量明文与哈希的对应关系,用空间换时间快速反推出原始密码,也是「加盐」等密码存储防护措施要重点防范的攻击手段。

| 类型 | 密码破解 / 预计算攻击技术 |
| 所属领域 | 计算机安全、密码学 |
| 攻击对象 | 密码哈希(散列)值 |
| 核心原理 | 预计算 + 哈希链,空间换时间 |
| 主要对策 | 加盐、慢哈希(bcrypt/Argon2) |
彩虹表(Rainbow Table)是计算机安全领域中一种用于攻击密码散列(哈希)函数的预计算表,通过提前算好海量明文与其哈希值的对应关系并压缩存储,从而在很短时间内由一段密码哈希反查出原始明文密码。
网站和系统通常不会明文保存用户密码,而是保存密码经哈希函数(如早期的 MD5、SHA-1)计算后的结果。哈希是单向的,无法直接逆运算还原,但攻击者一旦拿到这些哈希值,仍可以尝试「猜」出原文——最笨的办法是逐个尝试所有可能的密码(暴力破解),既慢又费算力。
彩虹表的思路是把大量计算工作提前做完:预先对海量常见口令算出哈希并存入表中,破解时只需查表即可命中,这就是典型的「用空间换时间」。为了避免直接存储全部对应关系导致体积爆炸,彩虹表采用了「归约函数」把哈希再映射回明文,交替计算出一条条哈希链,只保存每条链的首尾,查询时按链重建,从而在存储量和查询速度之间取得平衡。
正因为它对无防护的哈希威胁很大,现代系统普遍采用「加盐」(Salt)等对策来使其失效,彩虹表也因此成为讲解密码安全时的经典反面案例。
问:彩虹表和暴力破解有什么区别?答:暴力破解是在破解时才逐一实时计算尝试;彩虹表把计算提前做好并存下来,破解时直接查表,速度快得多,代价是需要巨大的预计算和存储投入。
问:加了盐还怕彩虹表吗?答:基本不怕。加盐后每个密码的哈希都因随机盐而不同,攻击者无法复用通用彩虹表,只能针对单个盐值重新计算,成本大增,彩虹表的优势随之丧失。
问:普通用户需要担心彩虹表吗?答:防护主要在服务端。用户能做的是设置足够长、复杂且不同网站不重复的密码,并优先使用支持现代加密存储的服务,即使数据库泄露也更难被反查。

| 类型 | 密码破解 / 预计算攻击技术 |
| 所属领域 | 计算机安全、密码学 |
| 攻击对象 | 密码哈希(散列)值 |
| 核心原理 | 预计算 + 哈希链,空间换时间 |
| 主要对策 | 加盐、慢哈希(bcrypt/Argon2) |
登录 后参与讨论
暂无讨论,来发表第一条评论吧