[10:26] ubuntu@VM-64-160-ubuntu:~/test$ cat mima.txt
12345
[10:26] ubuntu@VM-64-160-ubuntu:~/test$ md5sum mima.txt
d577273ff885c3f84dadb8578bb41399 mima.txt
在之前的问题中发布了这张图:[图片ID]。我因此受到了很多谩骂,所以我特意发表这篇文章来解释清楚。首先,我要澄清一下关于算力的数值。它不是某些人想象中的2.74分钟就能够破解一个有着14位大小写字母+数字的密码的账号。也不是每秒尝试26+26+10的14次方次你的密码,这样的尝试网站是承受不了的。
实际情况一般是这样的:破解者通过某些渠道获取了一大批用户名和经过哈希处理的密码,然后打算破解出原始密码,这样就能够直接登录网站了。首先,为什么是经过哈希处理的密码呢?答案是网站的数据库里不会存放你的密码”123456″,而是存放了经过哈希处理后的一串字符。即使有人拖走了整个数据库,也无法直接使用你的用户名和密码登录网站,因为需要进行破解。其次,为什么要进行哈希处理呢?答案是哈希函数或散列函数,它将你的原始密码拆散组合计算后变成一大串乱码,肉眼无法看出原来的内容。常用的哈希算法有md5、sha1、sha256等。在Linux下,有一个名为md5sum的命令可以进行哈希计算。
将”12345″变为”123456″,结果会完全不同。而且所有的哈希函数都有一个特点,就是无法从哈希值反推出原文。这是因为哈希函数的长度是固定的,比如md5的长度是32位,所以它的数量是有限的。而原文的长度可以是任意的,从个位数到几十GB的大文件都可以哈希成32位的字符串。有限个对应无限个,总会有重复,所以理论上哈希是无法真正破解的,因为一个哈希值对应着无数个原文。但是反过来想,只要找到这无数个原文中的任何一个,就等于找到了原始密码。
那么,图中所说的验密是无法真正破解的吗?假设我得到了某段md5密文,经过数百上千亿次尝试后终于找到了一个字符串,它的md5结果也是这段密文,这种”破解”方法被称为碰撞(collision)。而碰撞出来的字符串此时等同于原始密码。
最后,有没有算力起作用的例子呢?答案是有的。现在可行的方法是捕获WiFi路由器与客户端之间进行密码验证的数据包(即握手包),然后通过穷举比对的方式,将握手包中的密码(被加密的哈希值)与一个包含可能包含正确密码的密码集(俗称字典,其中的密码需要使用相同的加密方式转换成哈希值)进行比对。如果两者的哈希值相同,那么就代表字典中的某一个密码与握手包中的密码相同,从而获取到WiFi密码。所以在这种情况下,算力的作用非常显著。
[10:28] ubuntu@VM-64-160-ubuntu:~/test$ cat mima.txt
12346
[10:28] ubuntu@VM-64-160-ubuntu:~/test$ md5sum mima.txt
f8df2e15374e3dc37766e59ac494f0fd mima.txt