白帽子教你学安全

思科type7加密存在问题分析

2019-08-29  本文已影响0人  爱看时事的通信崔

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加密方式可爆破可逆推,并不安全。而截止目前,仍有部分设备在使用它,我猜原因可能只是因为方便吧。

上一篇 下一篇

猜你喜欢

热点阅读