Cisco Type7 Password,是由思科公司自研的,用于IOS口令加密的算法。严格来说,Type7并不能算是加密算法,它更应该算是一种加了随机数的可逆纯文本编码方式。
一、加解密原理简要说明
Type7在加密的过程中,会从一个有26位ASCII的字符表中,首先产生随机种子(SEED),将SEED分解成两位数,放在密码前两位;再用随机种子和明文密码的首字符进行异或,产生密文放在3、4位;接着将随机种子加一,和第二个字符进行异或,再放在随后的位置……逐位运算完成运算,形成密文。
解密过程就是反向对加密过程进行运算,从前两位先取得SEED,再逐步从密文中取出字符与ASCII字符表进行异或,最终恢复出密文。
二、存在的问题
1.密码容易逆向推导
据悉,思科的26位ASCII的字符表已经被明确,如下:
{
0×64, 0×73, 0×66, 0×64, 0x3b, 0x6b, 0×66, 0x6f,
0×41, 0x2c, 0x2e, 0×69, 0×79, 0×65, 0×77, 0×72,
0x6b, 0x6c, 0×64, 0x4a, 0x4b, 0×44, 0×48, 0×53 , 0×55, 0×42
};
我们可以很容易根据密文和加密算法,逆向推导出真实的明文口令。这方面,网上相关的资料和工具有很多,这里就不进行赘述了。
2.字符表爆破风险大
其实,我更想说的是,即使思科的26位字符表未被泄露,也很容易爆破出来。其复杂度只和加密字符的长度有关,存在着很大被爆破的风险,我们将在下文详细分析。
三、利用PassLib演示Type7可逆性
PassLib是一个基于python的密码散列库,提供了超过30种密码散列算法的跨平台实现,以及管理现有密码散列的框架。其中PassLib也实现了Cisco Type7 Password,我用它来验证Type7的加密强度。
PassLib需要基于Python环境,因为我安装的是Anaconda,所以我的安装PassLib库的命令是:
conda install passlib
当然,你也可以选择安装好Python3后,用pip3进行安装。
第一步,我对cisco_type7类生成进行了测试。
from passlib.hash import cisco_type7
h1 = cisco_type7.hash('cisco123')
h2 = cisco_type7.hash('cisco123cisco123')
print('h1: ' + h1 + '\n' + 'h2: ' + h2)
得出结果如下:
h1: 1511021F07257A767B
h2: 070C285F4D0648574411021F07257A767B
可以看到:密文长度,等于明文长度X2+2。例如h1明文cisco123长度为7,密文长度就是16;h2明文长度为14,密文长度为30。
第二步,我们推导一下加密结果的重复情况。
from passlib.hash import cisco_type7
encodeH = [] # 加密结果
ReapeateTimes = {}# 重复次数
# 加密5000次cisco123
for i in range(5000):
encodeH.append(cisco_type7.hash('cisco123'))
# 密文的重复情况
for j in encodeH:
ReapeateTimes[j] = ReapeateTimes.get(j,0)+1
print(ReapeateTimes)
得出结果如下:
'00071A1507545A545C': 310,
'05080F1C22431F5B4A': 324,
'02050D4808095E731F': 326,
'104D000A061843595F': 299,
'110A1016141D5A5E57': 299,
'070C285F4D06485744': 314,
'01100F175804575D72': 311,
'1511021F07257A767B': 322,
'045802150C2E1D1C5A': 304,
'060506324F41584B56': 312,
'13061E010803557878': 307,
'094F471A1A0A464058': 314,
'030752180500701E1D': 316,
'14141B180F0B7B7977': 322,
'0822455D0A16544541': 342,
'121A0C0411045D5679': 278}
同一个密码加密5000次出现了16个不同的密文,在知道算法的情况下,我们可以很容易推导出PassLib使用了一个16位ASCII字符表作为种子。
同理,在不同的环境下,我们可以设定一个足够长的明文,通过Type7加密方式进行加密,进而再利用逐位推导的方式把字符表推导出来,使加密不再可靠。
结论
总而言之,Type7加密方式可爆破可逆推,并不安全。而截止目前,仍有部分设备在使用它,我猜原因可能只是因为方便吧。