关于彩虹表的介绍

article/2025/9/28 16:22:25

彩虹表

1.彩虹表产生背景

起初黑客们通过字典穷举的方法进行破解,这对简单的密码和简单的密码系统是可行的,但对于复杂的密码和密码系统,则会产生无穷大的字典。

哈希加密算法是不可逆的,也就是说无论是网站的数据库管理员还是获取了密码数据的黑客,能看到的只是一长串毫无意义的字符,不可能将它还原成真正的密码。可以解决此问题的办法有两个,一是穷举法,二是对照表法。

第一种方法需要大量的计算,因此破解速度非常慢,以14位字母和数字的组合密码为例,共有1.24×10^25种可能,即使电脑每秒钟能进行10亿次运算,也需要4亿年才能破解。举个简单的例子就是,现在给你一把锁,你要用一块铁片,不断地磨成钥匙的形状,显然这是非常耗费时间的;

第二种方法需要海量的磁盘空间来储存数据,仍以14位字母和数字的组合密码为例,生成的密码32位哈希串的对照表将占用5.7×10^14 TB的存储空间。如何增加密码长度或添加符号,需要的时间或磁盘空间将更加难以想象。这个方法对应上面的例子就是,给你一把锁,你现在带了所有可能的钥匙来开锁,显然你会根据钥匙孔的形状,很快找到钥匙,但是携带这么多钥匙,是比较费空间的。

显然这两种方法是难以让人满意的,彩虹表是对这两种方法的折中,也就是时间复杂度和空间复杂度都不会达到那种无法满足的程度。

2.彩虹表实现原理

介绍彩虹表的原理之前,先简单说一下哈希加密算法。哈希(Hash)算法就是单向散列算法,它把某个较大的集合P映射到另一个较小的集合Q中,假如这个算法叫H,那么就有Q
= H(P)。对于P中任何一个值p都有唯一确定的q与之对应,但是一个q可以对应多个p。作为一个有用的Hash算法,H还应该满足:H§速度比较快;
给出一个q,很难算出一个p满足q = H§;给出一个p1,很难算出一个不等于p1的p2使得 H(p1)=H(p2)。

彩虹表的根本原理就是组合了暴力法和查表法,并在这两者之中取得一个折中,用我们可以承受的时间和存储空间进行破解。它的做法是,对于一个Q =
H(P),建立另一个算法R使得 P = R(Q),然后对于一个p,这样进行计算:

p0 -H-> q1 -R->p1 -H-> q2 -R->p2 -H-> q3 -R->p3 … -H-> q(n-1) -R->p(n-1) -H-> qn -R->pn

简单的说,就是把q用H、R依次迭代运算,最后得到pn,n可能比较大。最后我们把p0和pn都存储下来,把其他的结果都丢弃。然后用不同的p0代入计算,得到多个这样的p的对子。

彩虹表对应于上面钥匙与锁的例子就是,给你一把锁,你现在带了很多个钥匙串,每个钥匙串上面只有一两把钥匙。如果发现钥匙孔与其中某一个钥匙串上的钥匙形状类似,然后便用这把钥匙去磨出与钥匙孔类似的钥匙。(也就是方法一与方法二的组合)

在这里插入图片描述

3.链碰撞问题与解决办法

但是在实际实现的过程中,会经常出现不同的哈希链出现相同结果的情况,这就是发生了“碰撞”,也就是“链碰撞”。比如下面的例子:

解决链碰撞问题,办法是采用R函数列(一系列的R函数,而不是一个)

使用了R函数列之后,就算在运算过程中,两条不同的链产生了相同的中间结果,但是由于所处的阶段不同,那么下一阶段使用的R函数肯定不同,这就避免了后面产生相同结果的情况发生。如果把每条这样的哈希链,用不同的颜色标识,这就产生了彩虹表。(这也就是彩虹表名称的由来)

4.彩虹表的获取

1)常见的彩虹表:http://project-rainbowcrack.com/table.htm

2)R函数举例:假设明文为5位数字,则R函数是取哈希值中前5个数字。参见https://crypto.stackexchange.com/questions/5900/example-rainbow-table-generation

彩虹表可以自己生成,也可以自己在网上直接下载,常用的彩虹表大小在120G左右。

5.具体算法

①假设要破解的密文位于某一链条的k-1位置处,对其进行Rk运算,看是否能够在末节点中找到对应的值。

②如果找到,则可以如前所述,使用起节点验证其正确性。

③否则,继续假设密文位于k-2位置处,这时就需要进行Rk-1、H、Rk两步运算,然后在末节点中查找结果。

④反复②③,最不利条件下需要将密文进行完整的R1、H、…Rk运算后,才能得知密文是否存在于彩虹表之中。

6.防御彩虹表

``

`

由4中的表格可以得知,利用彩虹表进行密码破解,有着惊人的效率。那么,针对彩虹表的攻击,如何防御呢?

一个比较成熟并且简单的方法是“加盐”,即在密码特定位置插入特定字符串,这个特定字符串就是“盐”。为什么这种方法可以防御住彩虹表的攻击的?因为彩虹表在生成的过程中,针对的是特定的函数H,H如果发生了改变,则已有的彩虹表数据就完全无法使用。如果每个用户都用一个不同的盐值,那么每个用户的H函数都不同,则必须要为每个用户都生成一个不同的彩虹表,这大大提高了破解难度。这就相当于自己花很小的代价(插入字符串),但是攻击者却需要花费巨大的代价(重新生成彩虹表),这是比较好的一种方法。


http://chatgpt.dhexx.cn/article/C59OK3fW.shtml

相关文章

彩虹形成原理

彩虹形成原理 本文摘自书籍《有趣的透镜》对于彩虹形成原理的探索,先从折射引起的散射开始吧!最先解释了彩虹发生的基本原理的是,前面提到的笛卡儿和牛顿。 笛卡儿–光的折射 笛卡儿提到了光的折射,在笛卡儿斯涅尔定律中提到:入射…

Js实现彩虹文字

在文本框中输入文字&#xff0c;点击提交按钮或按回车键Ctrl键实现将文字添加在页面上&#xff0c;并采用彩虹颜色的形式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatib…

ps入门第6天_ps渐变字_彩色字 案例:彩虹桥or彩虹字特效

1、获得文字图层&#xff0c;形成文字选区 按住ctrl&#xff0c;同时点击文字图层的T。 2、新建一个图层 文字图层不是一个像素图层&#xff0c;不能编辑&#xff0c;所以要新建一个图层 3、添加渐变色 选择七彩色&#xff0c;然后点击确定&#xff0c;关闭渐变编辑器。 然后…

彩虹

彩虹 该程序是 EasyX 帮助中带的范例程序。略作修改 执行效果如下&#xff1a; 完整源代码如下&#xff1a; // 程序名称&#xff1a;彩虹 // 编译环境&#xff1a;Visual Studio 2013&#xff0c;EasyX 2017-9-19 // 最后更新&#xff1a;2018-12-8 // #include <grap…

Python绘制彩虹

彩虹 1. 列表&#xff08;颜色盒子&#xff09;1.1 概述1.2 颜色盒子使用方法 2. 坐标移动2.1 setx( )2.2 sety( ) 3. 绘制彩虹3.1 彩虹形状3.2 彩虹线条 4. 完整代码5. 颜色跑道 1. 列表&#xff08;颜色盒子&#xff09; 1.1 概述 1.2 颜色盒子使用方法 from turtle impor…

彩虹表(rainbow table)

1 彩虹表引入 在看微众银行开源的WeIdentity规范中的可验证凭证Credential数据结构时&#xff0c;看到有关于防止彩虹表方式反向破解哈希的问题&#xff0c;如下图所示。 在执行选择性披露用户的信息时&#xff0c;是将claim中的其他字段内容进行hash&#xff0c;只披露其中某…

【每日一练】64—CSS实现彩虹文字的动画效果

写在前面 最近有好几个小伙伴来问我&#xff0c;说【每日一练】里的gif动画是用什么软件录制的&#xff0c;在这里&#xff0c;我统一说一下&#xff0c;我录gif动画的工具是&#xff0c;LICEcap&#xff0c;录出来的文件&#xff0c;是默认为gif格式的。 在这里&#xff0c;我…

UGUI之Text彩虹字

博客迁移 个人博客站点&#xff0c;欢迎访问&#xff0c;www.jiingfengji.tech UGUI之Text彩虹字 脚本Rainbow直接挂在Text下 使得每个字母或者汉字均为一种随机颜色 Rainbow脚本如下&#xff1a; using UnityEngine; using System.Collections; using UnityEngine.UI; usi…

html 彩虹字体,拿来就用,超炫彩虹字体送你了

原标题&#xff1a;拿来就用&#xff0c;超炫彩虹字体送你了 还记得小编以前提过的2017设计趋势吗?里面就说到了色彩的渐变和叠加是目前的潮流。其中运用的最广泛的就有彩虹字。一般情况下&#xff0c;要做好彩虹字&#xff0c;那就需要设计师一个一个字来填充颜色、图层叠加&…

关于彩虹表

一、什么是彩虹表&#xff1f; 彩虹表&#xff08;Rainbow Tables&#xff09;就是一个庞大的、针对各种可能的字母组合预先计算好的哈希值的集合&#xff0c;不一定是针对MD5算法的&#xff0c;各种算法的都有&#xff0c;有了它可以快速的破解各类密码。越是复杂的密码&#…

JS实现彩虹字

效果图 html代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible&quo…

利用彩虹线课程中的知识来制作精美的渐变色块和彩虹字

彩虹字 像这样的效果,同样我们可以使用“渐变色”的技巧。来看下面如何操作 选中字体,然后鼠标右键选”设置型状格式“ 选择“渐变” 有两处决定了彩虹字的样式。 拖动的箭头,这个箭头代表“每一个段”显示的色彩,如我DEMO中的字体是“两段颜色”-蓝+黄组合出来的;角度,…

CSS 彩虹字 动态彩虹字

1. 静态彩虹字 // html <div class"this-div">Elegant and Beautiful</div>// css .this-div{margin: 20px;width: 200px;background: linear-gradient(90deg, red, blue);-webkit-text-fill-color: transparent;-webkit-background-clip: text;// 以区块…

网络攻击-arp攻击

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 网络攻击-arp攻击 文章目录 系列文章目录ARP 攻击 原理一、结构体设计&#xff1f;MACIP headerARP 头 二、测试代码1.arp reply 接口 总结 ARP 攻击 原理 提示&#xff…

ARP欺骗——断网攻击

准备&#xff1a; 1.kali虚拟机&#xff08;我用的2021.1版本&#xff0c;其它版本也可以&#xff09; 2.在同一个局域网&#xff08;比如同一个wifi&#xff09; 3.无线网卡&#xff08;3070L或者8187L&#xff0c;网上有卖&#xff09; 注意&#xff1a;无线网卡可有可无…

Kali实现局域网ARP欺骗和ARP攻击

Kali实现局域网ARP欺骗和ARP攻击 ------跳跳龙 所谓ARP攻击&#xff0c;就是伪造IP和MAC地址进行的攻击或者欺骗&#xff0c;但是在我看来&#xff0c;ARP攻击和ARP欺骗应该是两个概念&#xff0c;ARP攻击所产生的效果就是使目标主机&#xff08;当然这里默认的是局域网&#x…

ARP攻击详细讲解

1.ARP: 地址解析协议 把已知IP地址&#xff0c;解析成Mac地址 网络通信的基础协议 注&#xff1a;ARP协议分为两种包类型 ARP request 请求包 ARP reply 回应包 2.ARP攻击和欺骗 利用ARP协议的漏洞&#xff08;无分辨接受任何主机…

局域网ARP欺骗

目录 1.找到网关IP 2.扫描局域网内的主机 3.进行ARP欺骗 4.开启端口转发 5.使用driftnet进行图片嗅探 ARP欺骗&#xff1a; ARP欺骗&#xff08;ARP spoofing&#xff09;&#xff0c;又称ARP毒化&#xff08;ARP poisoning&#xff0c;网络上多译为ARP病毒&#xff09;或…

ARP-断网攻击

测试环境&#xff08;kali&#xff1a;192.168.189.7&#xff0c;win7:192.168.189.6&#xff0c;网关&#xff1a;192.168.189.2&#xff09; arpspoof -i eth0 -t 192.168.189.6 192.168.189.2 &#xff08;目标ip目标网关&#xff09; 已经成功断网 Linux系统默认是禁止数…

ARP断网欺骗攻击利用工具

ARP&#xff08;Address Resolution Protocol&#xff09;即地址解析协议&#xff0c;是根据IP地址 获取物理地址&#xff08;MAC地址&#xff09;的TCP/IP协议。主要原理是主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机&#xff0c;并接收返回消息&…