- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
彩虹表
PAGE PAGE 6密码学课程实验报告实验名称: 彩虹表 学 员: 杜文龙 学 号: 201306021002 学 员: 王鹏 学 号: 201306020017 学 员: 赵玉林 学 号: 201306021002 学 员: 林福强 学 号: 201306021002 学 员: 徐玉伟 学 号: 201306021002 培养类型: 工程技术类 年 级: 2013级别 专 业: 信息安全 所属单位: 六院一营五连 指导教员: 付绍静 职 称: 讲师 实 验 室: 实验日期: 2015秋 国防科学技术大学训练部对彩虹表的认识以前我也跟其他很多人一样,认为彩虹表就是描述“明文-密文”对应关系的一个大型数据库,破解时通过密文直接反查明文,采用了空间换时间的策略。但是总感觉这个认识不是那么确切,有点模糊。前几天因为这个需要讲,所以去详细了解了彩虹表的一些细节,才发现其原理不是我们想象的那么简单。并不是简单地“以空间换时间”,而是双向的“交易”,在二者之间达到平衡,有点巧妙。 我们来看下彩虹表到底是如何构造的哈希链表的构造现在你拿到一个hash算法,你想根据彩虹表去破解他,那么原理是什么呢?其实,这个构造的过程就体现出了为什么可以用彩虹表去解密。我们要求,对于哈希函数H,首先要定义一个约简函数(reduction function)R,该函数的定义域和值域需要和哈希函数相反,通过该函数可以将哈希值约简为一个与原文相同格式的值(“plain text” value)。需要强调的是,由于哈希函数H是不可逆的,所以对于密文进行R运算几乎不可能得到明文原文。举个例子,五位字母明文“kschh”进行H运算后得到了“D2A82C9A”,而对“D2A82C9A”进行R运算后得到另一个五位字母格式的值“vfkkd”。因为这个值落在H的定义域中,因此可以对它继续进行H运算。就这样,将H运算、R运算、H运算……这个过程反复地重复下去,重复一个特定的次数k以后,就得到一条哈希链这条链条并不需要完整地保存下来,只需要保存其起节点和末节点即可,例如上例中只需要保存起节点“kschh”和末节点“crepa”。以大量的随机明文作为起节点,通过上述步骤计算出哈希链并将终节点进行储存,即可得到一张哈希链集,这还称不上是彩虹表,可以认为是彩虹表的前身,有了这个hash表之后,我们来看他如何解密。根据哈希链表的解密过程:假设得到密文为“0CAFC376”,则先对其进行一次R运算,得到“crepa”。正巧在本例中,它等于集合中的一个末节点,因此我们可以猜测,明文有极大的可能存在于以起节点“kschh”开头、末节点“crepa”结尾的这条哈希链中。(注意可能性并不是100%,因为函数H和R均有可能发生碰撞,从不同的输入值得到相同的输出值。)为了验证我们的猜测,可以从起节点“kschh”开始重复哈希链的计算过程:?算到这里我们发现,“vfkkd”进行哈希运算的结果正是密文“0CAFC376”,这样就找到了所需的明文。如果密文不是“0CAFC376”而是“D2A82C9A”,第一次R运算后的结果并未在末节点中找到,则再重复一次H运算+R运算,这时又得到了末节点中的值“crepa”,则我们还是从起节点“kschh”开始计算,这次可得到“D2A82C9A”对应的明文为“kschh”。如果如是重复了k(=2)次之后,仍然没有在末节点中找到对应的值,则可以断定,所需的明文不在这张集合中——集合中并未储存长度大于k的哈希链,因此再计算也没有意义了。如果让我来解释哈希链的意义,我认为,每一条哈希链实际上是代表了属性相同的一组明文:每一个明文都可以通过起节点迅速的计算得出,计算次数不大于k,因而可以大大节约时间。对每一组明文,只需要保存其特征值(起节点和末节点),储存空间只需约1/k,因而大大节约了空间。彩虹表相较于哈希链表的改进-R函数在构造哈希链的时候,一个优秀的函数R功不可没。首先R需要能将值域限定在固定的范围——例如给定的长度范围、给定的字符取值范围等等之内,否则的话,哈希链中大量的计算结果并不在可接受的取值范围内,一条链条无法对应多个明文,链条就失去了意义;其次R必须同哈希函数一样,尽量保证输出值在值域中的均匀分布,减少碰撞的概率。然而实际上,很难找到能满足这些需求的完美的R函数。当计算中发生碰撞时,就会出现如下的情况:?比如两个不同的hash值在经过R函数后得到的明文是
原创力文档


文档评论(0)