新闻中心news
什么是彩虹表?江南体育
江南体育2014.5.2更新:补充了彩虹表的一些关键特性(感谢@Rubin Xu);同时重写了答案中的所有例子。2016.3.19更新:评论中有些人在问R函数的问题,又搜索资料补充了一节。以前我也跟其他很多人一样,认为彩虹表就是描述“明文-密文”对应关系的一个大型数据库,破解时通过密文直接反查明文。今天因某些需要而详细了解了彩虹表的一些细节,才发现其原理比之前想象的更值得称赞。它所谓的time-memory trade-off江南体育,并不是简单地“以空间换时间”,而是双向的“交易”,在二者之间达到平衡。在此分享一些心得江南体育。本部分内容本答案主要参考资料为英文维基的Rainbow table词条(Rainbow table)。答案末尾分隔线后附上一个简化的比喻,希望能给更多的人说清楚这个问题。
在彩虹表之前,已经出现了对哈希函数的破解算法,被称为“预计算的哈希链集”(Precomputed hash chains)。当面对要破解的哈希函数H,首先要定义一个约简函数(reduction
通俗点就是个一窜钥匙圈 大小决定钥匙的数量 钥匙数量越大 开门几率越大 破解密码或MD5的值几率就越大
分享一篇牛客大佬我是牛顿的棺材板深入理解 MD5 加密、彩虹表算法原理_技术交流_牛客
彩虹表不是 “密码 ⇨ 明文” 的简单存储。要从 c = hash(m) 逆向得到原始明文 m,有三种办法:
既然存储所有的明文密码对需要的空间太大,密码学家们想出了一种以计算时间降低存储空间的办法,被称为“预计算的哈希链集”。
约简函数(reduction function)R 函数是构建这条链的时候定义的一个函数:它的值域和定义域与 H 函数相反。通过该函数可以将哈希值约简为一个与原文相同格式的值。
把各种可能的密码按照一定的方式处理,例如哈希加密后生成的数据表,拿到密码的哈希值时江南体育,从哈希值反查原始密码
综上,彩虹表就是利用常用的加密方法,穷举一定范围内的明文,利用密文索引它,然后找到密文后,通过密文就能得到明文了。
你可以理解为彩虹表就是储存了hash与明文,每个hash对应明文,用于暴力破解不可逆算法的加密(如果连hash都不知道什么意思,简单点理解,就是加密后的字符串)
彩虹表,7年前一个玩入侵的朋友介绍给我玩过下,很强大!10多位的字母符号不规则密码都秒出。当时还整理了一篇资料:
对哈希加密的攻击,可以分为两种。第一种是猜。这种攻击有字典攻击和暴力攻击。字典攻击是事先做好字典去猜,暴利攻击是穷举给定长度的各种字符的组合。第二种是查。就是知道哈希值后希望破译明文,这需要建立密文对应于明文的字典库。彩虹表其实也相当于一种字典,不过它是用一种哈希链的存储方式去存储字典,在储存上只需要保存这个链的首尾的值就可以江南体育,中间值通过哈希函数推算。彩虹表做到了时间和空间的平衡。
3. 彩虹表的原理是计算少量数据,但是它们可以用来推演出全部的数据(这里就不展开了,看看wikipedia 上咋说吧)
4. 彩虹表的不足之处也在推演的方法上江南体育。加个随机字符串(可以明文存储;重复率不高即可)即可 (盐, salt) 防御彩虹表