Hellman 时间-空间折中攻击

如果说穷举法太耗费时间,字典法太耗费存储空间的话,我们能不能考虑在时间消耗和空间消耗之间折中呢?我们可以考虑用链表将一系列有意义的原文和MD5码串起来。

要构造这样的链表,我们需要两个函数:哈希函数H(x)和衰减函数(reduction function)R(x)。哈希函数可以是MD5,也可以是其他的消息摘要算法。H(x)的值域是R(x)的定义域,R(x)的值域是H(x)的定义域。R(x)不是H(x)的反函数。

将一个原文不停地使用H(x)和R(x)交替进行运算k次,再将原文本身和运算结果以链表的形式串接起来,就可以得到结点个数为2k+1的链表。实际存放的时候只存放首端和末端两个原文即可。这种链表叫做“哈希链表”,体现了算法设计的“时空权衡”(Space and Time Tradeoffs)。

举个栗子,假设原文s=abcabc,经过2次交替运算,得到以下的链表:

abcabc->H(x)->3C8B0D7A->R(x)->eopmca->H(x)->7E9F216C->R(x)->rapper

以上数据均为举例编造的,仅为说明原理使用。那我们存放这个链表的时候,只需要记录abcabc和rapper两个原文即可。

假设我们要破解的摘要值(哈希链表的H(x)不一定是MD5算法,这里用更准确的说法代替MD5码)是7E9F216C,经过R(x)运算得到rapper,说明我们要寻找的原文就在以rapper为末端的哈希链表中。从首端开始经过多次运算,我们发现eopmca的摘要值就是7E9F216C。于是就反查出7E9F216C对应的原文是eopmca。

如果在生成哈希链表的时候依次使用多个不一样的R(x),此时的哈希链表就是“彩虹表”。

 

 

Rivest的特异终点

 

 

 

参考资料:

https://zhuanlan.zhihu.com/p/121492822 

posted on 2021-01-05 09:29  我尽量尽力而为  阅读(511)  评论(0)    收藏  举报

导航