彩虹表与带盐Hash

编程入门 行业动态 更新时间:2024-10-09 13:31:02

<a href=https://www.elefans.com/category/jswz/34/1745358.html style=彩虹表与带盐Hash"/>

彩虹表与带盐Hash

彩虹表与带盐哈希

 

彩虹表(Rainbow Table)

1 What?

彩虹表就是一个庞大的、针对各种可能的字母组合预先计算好的哈希值的集合。

 【注】只针对MD5算法?No,可以有各种算法,比如LM, NTLM, MD5, SHA1, MYSQLSHA1, HALFLMCHALL, NTLMCHALL, ORACLE-SYSTEM, MD5-HALF……

 

2 Do ?

破解密码。

 【注】密码越复杂,彩虹表越大。多大,100G以上!!!

 

3 How?

//输入“密文”,直接得出“明文”。NoNoNo!

 

4 Where?彩虹表的前世今生

预计算的哈希链

 

明文->哈希函数(H)->密文

 

你想破解哈希函数(H)?不可能

 

约简函数R(定义域、值域刚好与H函数相反,but不是反函数)

哈希值->约简函数R->一个与原文相同格式的值。

【注】哈哈,不要希望可以通过R函数将密文转为明文。哈希函数H不可逆。

 

(zhihu) H (D2A82C9A) R (vfkkd) H (0CAFC376) R (crepa)

不停地进行HR运算,重复k次后,得到一条hash链,但是我们只存储首尾节点。

然后,我们以大量的随机明文分别进行k次HR运算,得到大量的hash链。

存储这些hash链的首尾节点,就得到一张表。

 

怎样使用刚才生成的表?

我们拿到一个Hash值,进行至少一次R运算,最多k-1次H运算和k次R运算,得到的结果与刚才的hash链的尾节点对比,如果能匹配上,那么明文很有可能在这条hash链中。

 

R函数的选取非常关键,上述的缺点在于容易产生碰撞。

 

彩虹表针对上述的缺陷,进行了改进,哈希链中不采用统一的R函数,而是采用k个不同的R函数(R1,R2,R3……Rk),这样生成的哈希链集被称为彩虹表。哈希链中不同位置的R函数就像彩虹中不同位置的颜色。

怎样使用彩虹表?

我们拿到一个Hash值,首先进行Rk运算,得到一个值,与尾节点比较。

不匹配,进行Rk-1运算,H运算,Rk运算,得到一个值,与尾节点比较。

还是不匹配,……

直到找到一个运算值与尾节点匹配

如果找到,我们认为明文存在于这条哈希链中。

 

5 彩虹表中时间和空间的平衡

对于相同个数的明文,当k越大时,破解的期望时间就越长,但是彩虹表所占用的空间就越小;

相反,k越小时,彩虹表本身就越大,相应的破解时间越短。

RainbowCrack中rtgen工具默认K值是2100

 

极端情况下,假设k=1,简化函数R(x)=x,彩虹表就变成了通常的错误理解,即将明文、密文对应关系全部保存的表。

 

6 彩虹表的防御

彩虹表的生成和破解均使用H函数,如果采用带盐的H函数,已有的彩虹表将无法使用。

 

7 总结

彩虹表,可以看做是一种“字典”,但是是一种由哈希链存储的“字典”,只存储了首尾两个节点。给出一个hash值,不能仅仅去查,还需要计算。

 

10 彩虹表的比喻 

把明文哈希后得到的密文,比作一把锁,如果暴力破解,就相当于制作各种不同齿形的钥匙,然后一把把去试。能不能短时间解开,看运气!!!

彩虹表,怎么做的?按照某种规律对钥匙分组,在每组钥匙中分别取一把钥匙作为代表去开锁,当发现某把钥匙差一点就能开锁的时候,就对该钥匙进行简单的打磨,直到能开锁为止。

 

 

 

 

 

 

 

更多推荐

彩虹表与带盐Hash

本文发布于:2024-02-06 05:16:32,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1746856.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:彩虹   Hash

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!