这一回合,我们将关注点聚集在密码破解的底层操作上:密码破解的方式 。
先说主流的:*力暴**破解、掩码破解、字典破解、组合破解。
引入一个概念:碰撞。
理解这个概念前,我们先构建一个场景,你手上的一串钥匙,你需要用其中一把钥匙打开房门,但你不知道房门的钥匙是哪一把,于是你逐个钥匙去测试。
用一把钥匙测试门锁是否能打开,这个过程就叫“碰撞”。
上述主流密码破解方式的底层逻辑相通,构建一个密码库,这个库里有很多钥匙(待测试的密码),逐个“碰撞”,成功与否,看密码库中是否包含正确的钥匙。
字符类型:
密码中,常用的字符类型(仅限于国内)有如下几类:
1、全角符号(单个符号比半角符号胖一倍):
`~!@#$%^&*()
2、半角符号:
`~!@#$%^&*()
3、全角数字(单个符号比半角数字胖一倍):
1234567890
4、半角数字:
1234567890
5、全角英文大写26个(单个符号比半角英文胖一倍):
qwertyuiopasdfghjklzxcvbnm
6、全角英文小写26个:
qwertyuiopasdfghjklzxcvbnm
7、汉字:
赵钱孙李周吴郑王
为了对各密码破解的运行方式有更直观的理解,我们以10位数的密码为例,并做如下假定:
上述7类字符类型,每类只有10个不同的字符(实际上远大于这个数,以汉字为例,常用汉字接近5000个),共计70个字符。
一、*力暴**破解
构建密码库:
10位数的密码,每个位数上有70种可能的字符,密码库总量为:70^10=2.8x10^18;
碰撞
用密码库中的待选密码,逐个碰撞。
二、掩码破解
与*力暴**破解的区别在于,可利用字符的分类,减少密码库中待选密码数量,提高效率。
比如:10位数的密码,1~2位是小写字母、3~4位是大写字母、5~6位是汉字、7~8位是数字、9~10位是全角符号;
构建密码库
1~2位:可能的字符组合数10x10=100;
3~4位:可能的字符组合数10x10=100;
5~6位:可能的字符组合数10x10=100;
7~8位:可能的字符组合数10x10=100;
9~10位:可能的字符组合数10x10=100。
密码库中待选密码数量为:100^5=10^10;
碰撞
用密码库中的待选密码,逐个碰撞。
三、字典破解
构建密码库
与上述两种方式的区别在于,无需构建密码库,使用现有的通用字典,或者制作相应的字典,用做密码库,假定为10^3;
碰撞
用密码库中的待选密码,逐个碰撞。
四、组合破解
比如:10位数的密码:1~2位是小写字母、3~5位是不清楚、6~10位分为两组,其中一组3个中文,另一组2个全角字符,但不知道两组谁在前谁在后;
构建密码库
1~2位:可能的字符组合数10x10=100;
3~5位:可能的字符组合数70x70x70=70^3;
6~10位:可能的字符组合数(中文:10x10x10;全角字符:10x10;位置排序:2)10x10x10x10x10x2=2x10^5;
密码库中待选密码数量为:100x70^3x2x10^4=6.86x10^11;
碰撞
用密码库中的待选密码,逐个碰撞。
五、总结
密码库大小:
*力暴**破解:2.8x10^18
掩码破解:10^10
字典破解:10^3
组合破解:6.86x10^11;
读到这里,你应该对密码破解有了一个清晰的认识,不同的密码破解方式,指向一个共通点“密码线索”。
没有密码线索,可以使用*力暴**破解、字典破解;
有密码线索,可以使用字掩码破解、字典破解、组合破解。
六、预告
你是否好奇,为何字典破解、组合破解备受推崇,你是否好奇是否有后门可以利用。
请听下回分解。