密码学基础:彩虹表技术

文章目录

  • 一、前期准备
    • [1.1 前缀知识](#1.1 前缀知识)
    • [1.2 工具准备](#1.2 工具准备)
  • 二、彩虹表技术
    • [2.1 什么是彩虹表?](#2.1 什么是彩虹表?)
    • [2.2 彩虹表预先计算的散列链原理](#2.2 彩虹表预先计算的散列链原理)
    • [2.3 其他通过加密摘要攻击用户密码的技术](#2.3 其他通过加密摘要攻击用户密码的技术)
    • [2.4 彩虹表存储规格](#2.4 彩虹表存储规格)
    • [2.6 彩虹表生成、排序、合并和转换命令](#2.6 彩虹表生成、排序、合并和转换命令)
  • 三、彩虹表攻击示例
    • [3.1 安装 rainbowcrack](#3.1 安装 rainbowcrack)
    • [3.2 生成指定算法的彩虹表](#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 字符集 明文长度 密钥空间 成功率 表大小
LM lm_ascii-32-65-123-4#1-7 ASCII-32-65-123-4 1 至 7 7,555,858,447,479 ≈ 2 42.8 99.9% 27 GB
NTLM ntlm_ascii-32-95#1-7 ASCII-32-95 1 至 7 70,576,641,626,495 ≈ 2 46.0 99.9% 52 GB
NTLM ntlm_ascii-32-95#1-8 ASCII-32-95 1 至 8 6,704,780,954,517,120 ≈ 2 52.6 96.8% 460 GB
NTLM ntlm_mixalpha-numeric#1-8 混合字母数字 1 至 8 221,919,451,578,090 ≈ 2 47.7 99.9% 127 GB
NTLM ntlm_mixalpha-数字#1-9 混合字母数字 1 至 9 13,759,005,997,841,642 ≈ 2 53.6 96.8% 690 GB
NTLM ntlm_loweralpha-数字#1-9 小写字母数字 1 至 9 104,461,669,716,084 ≈ 2 46.6 99.9% 65 GB
NTLM ntlm_loweralpha-数字#1-10 小写字母数字 1 至 10 3,760,620,109,779,060 ≈ 2 51.7 96.8% 316 GB
MD5 md5_ascii-32-95#1-7 ASCII-32-95 1 至 7 70,576,641,626,495 ≈ 2 46.0 99.9% 52 GB
MD5 md5_ascii-32-95#1-8 ASCII-32-95 1 至 8 6,704,780,954,517,120 ≈ 2 52.6 96.8% 460 GB
MD5 md5_mixalpha-数字#1-8 混合字母数字 1 至 8 221,919,451,578,090 ≈ 2 47.7 99.9% 127 GB
MD5 md5_mixalpha-数字#1-9 混合字母数字 1 至 9 13,759,005,997,841,642 ≈ 2 53.6 96.8% 690 GB
MD5 md5_loweralpha-numeric#1-9 小写字母数字 1 至 9 104,461,669,716,084 ≈ 2 46.6 99.9% 65 GB
MD5 md5_loweralpha-numeric#1-10 小写字母数字 1 至 10 3,760,620,109,779,060 ≈ 2 51.7 96.8% 316 GB
SHA1 sha1_ascii-32-95#1-7 ASCII-32-95 1 至 7 70,576,641,626,495 ≈ 2 46.0 99.9% 52 GB
SHA1 sha1_ascii-32-95#1-8 ASCII-32-95 1 至 8 6,704,780,954,517,120 ≈ 2 52.6 96.8% 460 GB
SHA1 sha1_mixalpha-数字#1-8 混合字母数字 1 至 8 221,919,451,578,090 ≈ 2 47.7 99.9% 127 GB
SHA1 sha1_mixalpha-数字#1-9 混合字母数字 1 至 9 13,759,005,997,841,642 ≈ 2 53.6 96.8% 690 GB
SHA1 sha1_loweralpha-数字#1-9 小写字母数字 1 至 9 104,461,669,716,084 ≈ 2 46.6 99.9% 65 GB
SHA1 sha1_loweralpha-数字#1-10 小写字母数字 1 至 10 3,760,620,109,779,060 ≈ 2 51.7 96.8% 316 GB

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

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

三、彩虹表攻击示例

3.1 安装 rainbowcrack

sudo apt-get install rainbowcrack

3.2 生成指定算法的彩虹表

语法:

c 复制代码
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/彩虹表

六、结语

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

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

相关推荐
香菜大丸5 分钟前
链表的归并排序
数据结构·算法·链表
jrrz08285 分钟前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表
oliveira-time17 分钟前
golang学习2
算法
南宫生1 小时前
贪心算法习题其四【力扣】【算法学习day.21】
学习·算法·leetcode·链表·贪心算法
懒惰才能让科技进步2 小时前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
Ni-Guvara2 小时前
函数对象笔记
c++·算法
泉崎3 小时前
11.7比赛总结
数据结构·算法
有梦想的咸鱼_3 小时前
go实现并发安全hashtable 拉链法
开发语言·golang·哈希算法
你好helloworld3 小时前
滑动窗口最大值
数据结构·算法·leetcode
AI街潜水的八角3 小时前
基于C++的决策树C4.5机器学习算法(不调包)
c++·算法·决策树·机器学习