当前位置: 首页 > news >正文

密码学基础:彩虹表技术

文章目录

  • 一、前期准备
    • 1.1 前缀知识
    • 1.2 工具准备
  • 二、彩虹表技术
    • 2.1 什么是彩虹表?
    • 2.2 彩虹表预先计算的散列链原理
    • 2.3 其他通过加密摘要攻击用户密码的技术
    • 2.4 彩虹表存储规格
    • 2.6 彩虹表生成、排序、合并和转换命令
  • 三、彩虹表攻击示例
    • 3.1 安装 rainbowcrack
    • 3.2 生成指定算法的彩虹表
  • 五、阅读资源
  • 六、结语

一、前期准备

1.1 前缀知识

哈希函数:是一种从任何一种数据中创建数字“指纹” 的方法。 散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。 该函数将数据打乱混合,重新创建一个叫做散列值(或哈希值)的指纹。 散列值通常用一个短的随机字母和数字组成的字符串来代表。

1.2 工具准备

kali

二、彩虹表技术

2.1 什么是彩虹表?

彩虹表是一种预先计算的表,用于缓存加密哈希函数的输出,通常用于破解长度固定且包含的字符范围固定的密码(如信用卡、数字等)。表通常用于恢复由有限字符集组成的长度不超过一定长度的密钥派生函数。它是空间与时间权衡的一个实际例子,与每次尝试都计算哈希值的暴力攻击相比,它使用更少的计算机处理时间和更多的存储空间。

彩虹表是马丁·赫尔曼早期提出的简单算法的应用。

注意:黑客逆向出散列的密码时,并不能仅通过输入散列后的用户加密摘要来提升权限,如果这样,认证系统会将加密摘要再次进行加密,产生与存储的加密摘要不匹配的摘要。为了提升权限,黑客需要产生一个相同加密摘要的密码。

2.2 彩虹表预先计算的散列链原理

这里简单说一下
获取字符串的哈希值 在哈希值中通过简单函数减少它创建一个新的字符串,使用相同的哈希算法对这个新的哈希字符串进行哈希值计算,依次重复此操作直到达到链的末端。
wikipedia 解释

假设有哈希方程H和有限的密码集合P,需要预先计算出一个数据结构来决定哈希方程H的任一输出结果h是否可以通过密码集合P里面的一个元素p经哈希函数H§=h得到。实现这一目的的最简单的方法是计算出P集合内所有密码p的哈希值H§。但是这个方法需要的储存空间为Θ(|P|n),(n代表哈希函数H的一个输出值的大小)对于较大的|P|,其对于存储空间的要求会过高

哈希链可以用来减少对于储存空间的需求。大致想法是通过定义一个归约函数(上述所说的简单函数)(reduction
function)R来映射散列值h在集合P中对应的密码p。(注意,这里的归约函数并不是真正意义上哈希函数的反函数。)通过交替施行哈希函数与归约函数,形成交替的明文与哈希值。

在这里插入图片描述
这里的归约函数的唯一要求就是能将任意散列值映射为特定字符的纯文本值。

2.3 其他通过加密摘要攻击用户密码的技术

穷举攻击:穷举攻击尝试每一种可能的密码组合,逐个将其转换为哈希值,直到找到匹配的哈希值为止。缺点是需要读取依次读取每行数据。

哈希链攻击(Hash Chain Attack):是一种类似彩虹表的技术,通过生成哈希链,将哈希结果再输入到哈希函数中,直到生成较短的哈希表。这种链表可以在生成和查找过程中减少存储空间,但牺牲了查找时间。

掩码攻击(Mask Attack):穷举攻击的优化,在已知密码的结构的情况下进行高效爆破。

长度扩展攻击(Length extension attack):攻击者可以利用H(消息1)和消息1的长度,不知道消息1内容的情形下,将攻击者控制的消息2计算出H(消息1 ‖ 消息2)。

总的来说,彩虹表攻击是最快的散列值爆破技术,但是占用的存储空间也更多,一般的彩虹表规格都要达到几百GB。

2.4 彩虹表存储规格

算法表 ID字符集明文长度密钥空间成功率表大小
LMimglm_ascii-32-65-123-4#1-7ASCII-32-65-123-41 至 77,555,858,447,479 ≈ 2 42.899.9%27 GB
NTLMimgntlm_ascii-32-95#1-7ASCII-32-951 至 770,576,641,626,495 ≈ 2 46.099.9%52 GB
NTLMimgntlm_ascii-32-95#1-8ASCII-32-951 至 86,704,780,954,517,120 ≈ 2 52.696.8%460 GB
NTLMimgntlm_mixalpha-numeric#1-8混合字母数字1 至 8221,919,451,578,090 ≈ 2 47.799.9%127 GB
NTLMimgntlm_mixalpha-数字#1-9混合字母数字1 至 913,759,005,997,841,642 ≈ 2 53.696.8%690 GB
NTLMimgntlm_loweralpha-数字#1-9小写字母数字1 至 9104,461,669,716,084 ≈ 2 46.699.9%65 GB
NTLMimgntlm_loweralpha-数字#1-10小写字母数字1 至 103,760,620,109,779,060 ≈ 2 51.796.8%316 GB
MD5imgmd5_ascii-32-95#1-7ASCII-32-951 至 770,576,641,626,495 ≈ 2 46.099.9%52 GB
MD5imgmd5_ascii-32-95#1-8ASCII-32-951 至 86,704,780,954,517,120 ≈ 2 52.696.8%460 GB
MD5imgmd5_mixalpha-数字#1-8混合字母数字1 至 8221,919,451,578,090 ≈ 2 47.799.9%127 GB
MD5imgmd5_mixalpha-数字#1-9混合字母数字1 至 913,759,005,997,841,642 ≈ 2 53.696.8%690 GB
MD5imgmd5_loweralpha-numeric#1-9小写字母数字1 至 9104,461,669,716,084 ≈ 2 46.699.9%65 GB
MD5imgmd5_loweralpha-numeric#1-10小写字母数字1 至 103,760,620,109,779,060 ≈ 2 51.796.8%316 GB
SHA1imgsha1_ascii-32-95#1-7ASCII-32-951 至 770,576,641,626,495 ≈ 2 46.099.9%52 GB
SHA1imgsha1_ascii-32-95#1-8ASCII-32-951 至 86,704,780,954,517,120 ≈ 2 52.696.8%460 GB
SHA1imgsha1_mixalpha-数字#1-8混合字母数字1 至 8221,919,451,578,090 ≈ 2 47.799.9%127 GB
SHA1imgsha1_mixalpha-数字#1-9混合字母数字1 至 913,759,005,997,841,642 ≈ 2 53.696.8%690 GB
SHA1imgsha1_loweralpha-数字#1-9小写字母数字1 至 9104,461,669,716,084 ≈ 2 46.699.9%65 GB
SHA1imgsha1_loweralpha-数字#1-10小写字母数字1 至 103,760,620,109,779,060 ≈ 2 51.796.8%316 GB

2.6 彩虹表生成、排序、合并和转换命令

算法表 ID表生成表排序表合并表转换
LMimg lm_ascii-32-65-123-4#1-7rtgenrtsort .rtmerge .rt2rtc . -s 30 -e 34 -c 4096 -p
NTLMimg ntlm_ascii-32-95#1-7rtgenrtsort .rtmerge .rt2rtc . -s 31 -e 33 -c 4096 -p
NTLMimg ntlm_ascii-32-95#1-8rtgenrtsort .rtmerge .rt2rtc . -s 35 -e 37 -c 8192 -p
NTLMimg ntlm_mixalpha-numeric#1-8rtgenrtsort .rtmerge .rt2rtc . -s 32 -e 32 -c 4096 -p
NTLMimg ntlm_mixalpha-numeric#1-9rtgenrtsort .rtmerge .rt2rtc . -s 36 -e 36 -c 8192 -p
NTLMimg ntlm_loweralpha-numeric#1-9rtgenrtsort .rtmerge .rt2rtc . -s 31 -e 33 -c 4096 -p
NTLMimg ntlm_loweralpha-numeric#1-10rtgenrtsort .rtmerge .rt2rtc . -s 34 -e 38 -c 8192 -p
MD5img md5_ascii-32-95#1-7rtgenrtsort .rtmerge .rt2rtc . -s 31 -e 33 -c 4096 -p
MD5img md5_ascii-32-95#1-8rtgenrtsort .rtmerge .rt2rtc . -s 35 -e 37 -c 8192 -p
MD5img md5_mixalpha-numeric#1-8rtgenrtsort .rtmerge .rt2rtc . -s 32 -e 32 -c 4096 -p
MD5img md5_mixalpha-numeric#1-9rtgenrtsort .rtmerge .rt2rtc . -s 36 -e 36 -c 8192 -p
MD5img md5_loweralpha-numeric#1-9rtgenrtsort .rtmerge .rt2rtc . -s 31 -e 33 -c 4096 -p
MD5img md5_loweralpha-numeric#1-10rtgenrtsort .rtmerge .rt2rtc . -s 34 -e 38 -c 8192 -p
SHA1img sha1_ascii-32-95#1-7rtgenrtsort .rtmerge .rt2rtc . -s 31 -e 33 -c 4096 -p
SHA1img sha1_ascii-32-95#1-8rtgenrtsort .rtmerge .rt2rtc . -s 35 -e 37 -c 8192 -p
SHA1img sha1_mixalpha-numeric#1-8rtgenrtsort .rtmerge .rt2rtc . -s 32 -e 32 -c 4096 -p
SHA1img sha1_mixalpha-numeric#1-9rtgenrtsort .rtmerge .rt2rtc . -s 36 -e 36 -c 8192 -p
SHA1img sha1_loweralpha-numeric#1-9rtgenrtsort .rtmerge .rt2rtc . -s 31 -e 33 -c 4096 -p
SHA1img sha1_loweralpha-numeric#1-10rtgenrtsort .rtmerge .rt2rtc . -s 34 -e 38 -c 8192 -p

三、彩虹表攻击示例

3.1 安装 rainbowcrack

sudo apt-get install rainbowcrack

3.2 生成指定算法的彩虹表

语法:

rtgen 散列算法 字符集 最小长度 最大长度 表索引(标识生成的表)散列链长度 散列链数量 分隔表索引

示例

sudo rtgen md5 loweralpha 1 3 0 1000 1000 0

在这里插入图片描述
彩虹表存放位置

在这里插入图片描述
彩虹表索引排序

sudo rtsort .

在这里插入图片描述
创建一个md5散列值用于解密

echo -n "qbc" | md5sum 

在这里插入图片描述
使用rcrack爆破散列值

sudo rcrack . -h 45f78ad16bf4471d9407c0a4025d9f01

在这里插入图片描述
仅需要0.04秒就爆破出来

五、阅读资源

生成表来源:彩虹表官网
部分内容摘自:https://zh.wikipedia.org/wiki/%E5%BD%A9%E8%99%B9%E8%A1%A8

六、结语

感谢你花时间阅读这篇关于彩虹表攻击技术的文章!希望通过这篇文章,你能够初步的了解FTP响应代码的作用。希望能为你带来实用的帮助和新的知识。

在这里也需要说明一下,尽管我努力确保每个步骤和细节都准确无误,但难免会有描述不当或疏漏之处。如果在操作过程中遇到任何问题,欢迎提出宝贵意见和建议,帮助我改进和完善这篇文章。再次感谢你的支持和理解!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 实战项目:贪吃蛇游戏的实现(上)
  • 创建vscode debug环境
  • docker、防火墙关闭仍然无法访问、防火墙命令
  • 网络通信(基于UDP协议的Socket编程模型)
  • 全球海事航行通告解析辅助决策系统
  • 【概率统计】三扇门游戏(蒙提霍尔问题)
  • 重启人生计划-积蓄星火
  • keepalived高可用集群
  • 【Pytorch实用教程】Pytorch中加载数据推荐实用:Dataset类
  • 【C++语言】list的构造函数与迭代器
  • 使用flask遇到的问题及解决方法
  • 软考又变了!4大科目同时换教材,备考如何适应?
  • Scratch跑酷引擎1.0! Scratch教程3
  • LabVIEW光纤管道泄漏检测系统
  • 6.7分不降反升的IEEE trans:“江湖地位”超稳的1区,离TOP还有多远?
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • [nginx文档翻译系列] 控制nginx
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Javascripit类型转换比较那点事儿,双等号(==)
  • js写一个简单的选项卡
  • KMP算法及优化
  • Python进阶细节
  • yii2权限控制rbac之rule详细讲解
  • 关于extract.autodesk.io的一些说明
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 跨域
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端工程化(Gulp、Webpack)-webpack
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 少走弯路,给Java 1~5 年程序员的建议
  • 树莓派 - 使用须知
  • 一起参Ember.js讨论、问答社区。
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 阿里云ACE认证之理解CDN技术
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #### go map 底层结构 ####
  • #define与typedef区别
  • $nextTick的使用场景介绍
  • (6)STL算法之转换
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)计算机毕业设计大学生兼职系统
  • (十三)Flask之特殊装饰器详解
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET Framework .NET Core与 .NET 的区别
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .Net Remoting(分离服务程序实现) - Part.3