密码
我在学python的时候写了一个生成随机密码的程序,突发奇想加了一个猜测密码的功能,运行了几次后感觉不尽人意,于是趁机了解了一下密码破译。
密码破译有三种方法:暴力破解,字典破解,彩虹表。
暴力破解
暴力破解是一种尝试穷举所有可能的密码组合的方法。攻击者通过使用所有可能的字符组合(包括字母、数字和特殊字符),逐个尝试每个可能的密码,直到找到匹配的密码或尝
试完所有可能的组合。
用一个词来简洁概括,嗯猜。
但我要是这样,那么阁下该如何应对。
1 | import random |
string.ascii_letters 包含所有的 ASCII 字母,即包括大写字母和小写字母,共 52 个字符。
string.digits 包含所有的数字,共 10 个字符。
string.punctuation 包含所有的标点符号,共 32 个字符。
因此,characters 字符串总共有 52 + 10 + 32 = 94 个字符。
对于长度为 8 的密码,总共的选择数量为 94 的 8 次方(94^8),即:
94^8 ≈ 6,095,689,385,410,816
这是不现实的。
字典破解
字典攻击是一种基于预先准备好的字典或词典的密码破解方法。这个字典包含了常见的单词、短语、常用密码以及其他可能的密码组合。攻击者会使用这个字典中的密码依次尝
试,直到找到匹配的密码或尝试完整个字典。
一种是使用kali系统配合无线网卡抓取握手包进行破解,另一种是直接编写程序跑密码字典进行破解,两者本质是相同的。
下面介绍kali破解
1.监听和抓取握手包(Handshake Capture):
使用Kali Linux中的工具,如aircrack-ng、Wireshark或tcpdump,可以监听Wi-Fi网络流量,并抓取包含握手信息的数据包。这些握手包是连接到Wi-Fi网络所需的安全密钥信息。
2.构建密码字典(Password Dictionary):
密码字典是一个包含多个密码短语的文本文件,用于尝试破解握手包中的密码。密码字典可以包含常见密码、常用单词、数字组合、特殊字符等。您可以使用现有的密码字典或创建自己的定制字典。
3.密码破解(Password Cracking):
使用Kali Linux中的工具,如aircrack-ng、hashcat或John the Ripper,将抓取的握手包和密码字典进行结合,尝试对密码进行破解。这些工具将逐个尝试密码字典中的密码短语,并与抓取的握手包进行比对,以找到匹配的密码。
需要一本好的密码字典,我可没有。
彩虹表
彩虹表(Rainbow Table)是一种用于加密密码破解的预先计算的数据结构。它是一种优化技术,旨在加速密码破解过程。
彩虹表的原理是通过对密码哈希函数的反向计算,以及预先计算并存储哈希值与对应密码之间的映射关系。使用彩虹表可以在较短的时间内找到密码的原始明文,而无需逐个尝试所有可能的密码组合。
彩虹表是利用哈希碰撞来破解密码的。
假设我使用MD5对明文进行哈希运算,密码设置为’Hello’,得到的哈希值(“Hello”) = 5d41402abc4b2a76b9719d911017c592。
我可以在彩虹表中查询截获的哈希值,MD5(“Hello”) = 5d41402abc4b2a76b9719d911017c592
MD5(“World”) = 5d41402abc4b2a76b9719d911017c592
如果没有使用盐或者迭代的话,我可以使用’World’进行登录。
但MD5已经被证明不安全了,现在使用的是SHA-256,再加上盐和迭代,彩虹表破译也不太现实了。
小结
暴力破解确实时间复杂度太高,不太实际。字典破解需要充分的字典库支持。彩虹表也存在被迭代哈希函数和加盐技术限制的问题。
开发者还可以通过限制登录尝试次数、账号锁定、使用验证码等手段进一步提高难度。
道高一尺魔高一丈,总会有办法的。