彩虹表学习(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

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

设明文为 PCKS , C=Sk(P)

我们采取选择明文攻击, PCK

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

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

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

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

起始点之后的每一个 Xij=F(Xi,j1)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,t1 并不是真正的密钥 或者 同时又多个 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值