为了保护账号安全,几乎所有网站都不会保存用户的密码,而是用哈希加密算法对密码进行计算,将得到的哈希串保存在数据库中,每次用户登录时会将用户提交的密码用同样的算法计算,并将结果与数据库中保存的哈希串比对以验证用户身份。前面的文章中讲过,黑客可以采用密码字典的方式对哈希密码进行“撞库”破解,这种方式对长度较短、组合简单的密码确实很有用,但是遇到复杂的密码时往往力不从心。今天为大家介绍一种高效的密码攻击方法:彩虹表。

彩虹表的产生背景

哈希加密算法是不可逆的,也就是说无论是网站的数据库管理员还是获取了密码数据的黑客,能看到的只是一长串毫无意义的字符,不可能将它还原成真正的密码。通常的解决办法有两个,一是用穷举法组合出所有的密码可能,然后经哈希机密算法计算,将结果与哈希串进行比对;二是提前生成可能密码与对应哈希串的对照表,密码攻击时直接根据哈希串从对照表中查询对应的密码。

第一种方法需要大量的计算,因此破解速度非常慢,以14位字母和数字的组合密码为例,共有1.24×10^25种可能,即使电脑每秒钟能进行10亿次运算,也需要4亿年才能破解;第二种方法需要海量的磁盘空间来储存数据,仍以14位字母和数字的组合密码为例,生成的密码32位哈希串的对照表将占用5.7×10^14 TB的存储空间。如何增加密码长度或添加符号,需要的时间或磁盘空间将更加难以想象,显然这两种方法是难以让人满意的。本文要介绍的彩虹表,其实是两种方法的折衷,将耗时和占用空间控制在可接受的范围内。

彩虹表的实现原理

首先定义哈希加密函数H,Q=H(P)表示将明文密码P加密成哈希串Q;然后定义规约函数R,p=R(Q)表示将哈希串Q转换成明文p,注意p不是真正的密码P。将一个可能的密码p0交替带入H和Q两个函数进行运算,先后得到q1,p1,q2,p2,...,q(n-1),p(n-1),qn,pn。其中p是明文,q是哈希串,它们组成的链称为哈希链,n是哈希链的长度,一般大于2000。将哈希链的首尾元素p0和pn做为一个数对存入表中,中间的其它元素全部删除。由多个数对组成的表称为彩虹表。

密码攻击就是找到哈希串Q对应的明文密码P,利用彩虹表进行密码攻击的过程如下:c1=R(Q),将c1与彩虹表中每一个pn进行比对,如果相等,则P=p(n-1),由于彩虹表中只保存了p0和pn,因此需要重新计算该哈希链得到p(n-1);如果没找到相等的pn,计算c2=R(H(c1)),将c2与彩虹表中所有pn进行比对,如果相等,则P=p(n-2),重新计算该哈希链得到p(n-2);如果没找到相等的pn,继续计算c3...以此类推。

以上只是彩虹表最基本的原理,没看明白的读者可以自己拿笔在纸上试着将以上的步骤写出来。彩虹表的关键是构造R函数,优秀的R函数要保证计算结果均匀分布,即避免出现相同的明文密码。然而想构造优秀的R函数是件非常困难的事,不同的哈希链中可能会出现大量的重复数据,严重影响了密码攻击的效率。改良后的彩虹表在哈希链的计算过程中引入不同的R函数,有效减少不同哈希链中的重复节点,进一步提高了攻击效率。如果将不同的R函数用不同的颜色表示,众多的哈希链就会像彩虹一样,从里到外呈现出颜色变化,这就是彩虹表名称的由来。

彩虹表的获取

可以自己编程生成彩虹表,也可以使用RainbowCrack或Cain等软件来生成,有兴趣的读者可以自行百度。彩虹表的生成时间与字符集的大小、哈希链的长度成正比,如下图中“7位密码、全部字符集、哈希链长度为2万”的彩虹表大小为32G,本地生成大约需要332天,而从网上下载只需要2个小时左右,主流的彩虹表的大小普遍在100G以上,想要自己生成是几乎不可能的事,因此强烈建议黑客技术爱好者直接从网上下载。

彩虹表确实像它的名字一样美好,至少黑客眼里是这样。上表是7位以内密码在不同字符集下构造出的彩虹表的情况,彩虹表中哈希链的长度和个数随着字符集的增长而增长,彩虹表的大小和生成时间也随之成倍增加。7位数字组合在彩虹表面前简直就是秒破,即使最复杂的7位密码不到一个小时就能破解,如果采用普通的暴力攻击,破解时间可能需要三周。

如何防御彩虹表

虽然彩虹表有着如此惊人的破解效率,但网站的安全人员仍然有办法防御彩虹表。最有效的方法就是“加盐”,即在密码的特定位置插入特定的字符串,这个特定字符串就是“盐”,加盐后的密码经过哈希加密得到的哈希串与加盐前的哈希串完全不同,黑客用彩虹表得到的密码根本就不是真正的密码。即使黑客知道了“盐”的内容、加盐的位置,还需要对H函数和R函数进行修改,彩虹表也需要重新生成,因此加盐能大大增加利用彩虹表攻击的难度。

高效的密码攻击方法:彩虹表相关推荐

  1. MD5加密算法中的加盐值 ,和彩虹表攻击 防止彩虹表撞库

    一.什么是彩虹表? 彩虹表(Rainbow Tables)就是一个庞大的.针对各种可能的字母组合预先计算好的哈希值的集合,不一定是针对MD5算法的,各种算法的都有,有了它可以快速的破解各类密码.越是复 ...

  2. 网络攻防实验:离线攻击工具——彩虹表破解

    一.实验目的 (1)学习BackTrack5(已经合并到Kali linux中)的功能和基本使用方法.BackTrack5是网络安全领域非常著名的黑客攻击平台,是一个封装好的Linux操作系统,内置了 ...

  3. 彩虹表(rainbow table)

    1 彩虹表引入 在看微众银行开源的WeIdentity规范中的可验证凭证Credential数据结构时,看到有关于防止彩虹表方式反向破解哈希的问题,如下图所示. 在执行选择性披露用户的信息时,是将cl ...

  4. 电磁攻击方法与能量攻击方法的对比

    摘  要:旁道攻击是避开复杂的密码算法,利用密码算法在软硬件实现中泄露出的各种信息进行攻击,电磁攻击和能量攻击是两种不同旁道攻击方法,二者既有共同之处,又有各自的特点,可以通过实验分析,进行对比.   ...

  5. 高效的彩虹表密码攻击法

    背景 为了保护账号安全,几乎所有网站都不会明文保存用户的密码,而是用哈希加密算法对密码进行计算,将得到的哈希串保存在数据库中.每次用户登录时会将用户提交的密码用同样的算法计算,并将结果与数据库中保存的 ...

  6. 彩虹表破解开机密码、MD5算法等的原理

    http://www.91ri.org/7593.html  自己发到91ri的,博客备份下. 前言 或许对于大多数人来说,实际中并不需要了解这些理论,能够使用现成的工具就行,但是我个人觉得了解了这些 ...

  7. (总结)密码破解之王:Ophcrack彩虹表(Rainbow Tables)原理详解(附:120G彩虹表下载)

    以下内容为转载,来自这里 PS:这玩意偶前几天用了一下,确实强悍无比,在这个表面前,md5等公开的加密算法不堪一击啊.记得我之前的公司开发的游戏账号都用修改过的特有MD5加密算法,建议开发人员都这样搞 ...

  8. 为什么MD5不可逆, 彩虹表是怎么攻击的

    为什么MD5是不可逆的? 先说大白话版本的,因为MD5算法里面有很多不可逆的运算.比如移位,假设:10010001 左移两位后是:01000100,你有什么办法把它移回来吗?移出去的已经找不回了哦. ...

  9. (总结)密码破解之王:Ophcrack彩虹表(Rainbow Tables)原理详解

    PS:这玩意偶前几天用了一下,确实强悍无比,在这个表面前,md5等公开的加密算法不堪一击啊.记得我之前的公司开发的游戏账号都用修改过的特有MD5加密算法,建议开发人员都这样搞,这样安全性就大大提高.如 ...

最新文章

  1. pd.dataframe.append
  2. LeetCode Algorithm 704. 二分查找
  3. linux 如何查看终端格式,你应该还不知道,Linux终端下的 Markdown 文档查看器
  4. ios开发text kit_IOS开发入门之TextKit详解
  5. vs2010编写的net3.5用vs2008打开
  6. python整数转换字符串_Python | 将字符串转换为整数列表
  7. AndroidMainfest.xml具体解释——lt;activitygt;
  8. UVa 1605 - Building for UN
  9. 用SVD和字典学习方法重建图像(cifar-10图片集)
  10. mysql 排序后在查询
  11. 你必须了解的基础的 Linux 网络命令
  12. Use // eslint-disable-next-line to ignore the next line.解决办法
  13. Spring Boot整合模板引擎freemarker
  14. python+selenium+geckodriver,自动化脚本
  15. WordPress 简约主题 NDNAV 网址导航网站模版
  16. treetable怎么带参数_treeTable的使用(ajax异步获取数据,动态渲染treeTable)
  17. 道一MD5校验工具发布
  18. 小米手机 开启 开发者模式
  19. 国产linux系统对打印机的支持,Linux系统下对打印机进行配置
  20. 企业邮箱申请注册流程,10分钟搞定公司企业邮箱

热门文章

  1. Python基本语法_文件操作_读写函数详解
  2. mac 开机执行命令
  3. 在IE右键菜单,添加图片保存快捷方式
  4. ZTE物联网之智能电表简介
  5. Jenkins 安装简记录
  6. C++Builder Berlin 编译
  7. boost spirit的简单使用
  8. Sorting It All Out--POJ 1094
  9. 魅族建立基于M8的Android开源项目
  10. 2009年总结-爱与快乐着