彩虹表学习(0)

编程入门 行业动态 更新时间:2024-10-26 03:31:36

<a href=https://www.elefans.com/category/jswz/34/1746856.html style=彩虹表学习(0)"/>

彩虹表学习(0)

彩虹表在现代暴力破解中起到了举足轻重的作用. 彩虹表构造的好坏直接关系到密码破解的快慢. 接下来让我

们一步一步了解彩虹表的原理, 最后目标是构造出自己的彩虹表.

说道彩虹表不得不提到Hellman大神在1980年提出的time-memory trade-off算法了

毕竟彩虹表就是对其理论的改良的工程实现.

对于密钥空间大小为N的密码系统, 一般破解思路是想办法使T(操作总时间)*M(内存总大小) = N.

这样的话如果想让M = 1那么就变成了单纯的暴力破解

如果想让T = 1那么就需要造一个内存空间大小等同与N的表

现代密码设计的最基本的原则就是让以上的两种手段在可遇见的未来(密码的有效期内)不可行

不过Hellman的time-memory trade-off选取 m=t=n1/3 (这里的m和t先不管其意义)

使其可以用M = m*t = N2/3 的内存空间, T=t2=N2/3 的操作时间在N的密钥空间求出密钥K

这样的话在表已经建立的情况下相当于把原密码体系的长度缩短了1/3

那么我们先看下算法的大致流程.

设明文为 P,密文为C,密钥为K,加密算法为S , C=Sk(P)

我们采取选择明文攻击, 已知道明文P,和密文C,试图还原密钥K

按常规思路我们要存储的m*t次对K的尝试结果的话那么我们最终得到的有一个m*t的表, 其能付出O(1)的代价对结果进行查询

不同的我们这次选取退化函数R, 其能把密文空间上元素映射到密钥空间

我们再把 R Sk()合并为函数F, 性质 F(K)=R(SK(P))

在N上选取不同的密钥 Ki ,其与P组成每行起始点 SPi=Xi0

起始点之后的每一个 Xij=F(Xi,j−1)1<=j<=t

同理可推出第i行最终点 EPi=Ft(SPi)

好了现在我们有了一个m*n的表, 但是我们只保留表的第一列( Xi0) 和最后一列( EPi )通过特别的查询方式就得到了这个m*n表的查询效果

如果我们用P得到了C, 我们要验证密钥K有没有存在于我们的表中

设 Yi=R(C)i=1 验证 Yi 是否为在 EP

TRUE:
如果 Xi,t−1 并不是真正的密钥 或者 同时又多个 EPi=Yi 那么我们就遇到了一个false alarm(如何减少false alarm是其后续改进算法一个重要的问题)

FALSE:
那么我们让 Yi+1 = F(Yi) 再次验证, 直到验证到t次或TRUE

从结果上来看, 虽然我们只保存了2*m个结构,但是通过退化函数R,我们只需要在查询过程中引入少量的计算就相当于预存了一个m*t大小的表(最好情况)

这种通过函数的映射来缩小表的大小,提高破解效率的做法就是time-memory tarde-off的核心

不过因为退化函数我们不能避免的会出现表中值得重叠问题(false alarm的产生的原因之一)

之后我们将看到作者如何通过理论证明如何选取m, t来保证破解的成攻率并证明重叠的问题对表的有效性没有很大影响

更多推荐

彩虹表学习(0)

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

发布评论

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

>www.elefans.com

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