为什么 CISCO 的命令“enable secret <password>”会产生与 MD5 不同的哈希值?

网络工程 思科 思科-ios cisco 命令
2021-07-12 21:58:59

我正在 Packet Tracer 中配置 CISCO 的 4331 路由器密码。更具体地说,我使用命令enable secret weakpassword. 该命令默认使用 MD5 来散列最后一个字符串(即弱密码)。

问题是,当我将在线 MD5 哈希生成器用于“弱密码”时,我得到了哈希值, e04efcfda166ec49ba7af5092877030e 而当我使用前面提到的命令时,我得到的哈希值$1$mERr$A4DAiA6cbNxoV7Y2eEVOA0显然不一样。

为什么哈希值不同?

思科明确提到:

使用 MD5 算法对启用机密进行散列。据 Cisco 的任何人所知,不可能根据配置文件的内容恢复启用密钥(明显的字典攻击除外)。

2个回答

Cisco 设备在散列之前向密码添加盐,因此它们不能被字典攻击(例如彩虹表)破解。如果我记得,盐部分由设备 ID 组成。

MD5 大多数情况下仍然可以安全使用,但已知存在冲突,因此几乎总是建议使用另一种散列算法。在 Cisco IOS、IOS-XE、IOS-XR 和一些其他操作系统变体的一些较新版本上,用户可以将算法指定为配置的一部分。

例如,如果要使用更强的算法,例如SHA256,作为启用密码,可以使用以下命令:

enable privilege 15 algorithm-type sha256 secret <password>

$1$标记了 MD5-crypt 密码哈希,过去几年也常用于 Linux 系统中的用户密码。在该函数中,它现在几乎已被类似的 SHA256-crypt 和 SHA512-crypt 哈希($5$$6$所取代这些都不是底层散列函数的单次运行,而是重复迭代散列并包含一个盐(第二个和第三个$符号之间的部分,所以mERr。另一方面,e04efcfd...是对 MD5 的单次评估的结果字符串weakpassword

这些算法的底层结构相当复杂,但除此之外,它们与 PBKDF2 有点相似。可能会为新实现建议其他散列,但兼容性很难。我可以访问的一个 Cisco Catalyst 似乎也支持其他哈希(尝试enable algorith-type ?)。我不知道其他地方是否使用了这些特定算法。

几年前我问了一个关于 PBKDF2 和基于 SHA2 的 crypt 哈希的差异的问题,其中一个答案也提到了 MD5-crypt

可以使用crypt()glibc 中函数计算 MD5-crypt 哈希,该函数可以通过例如 Perl 轻松访问:

$ perl -le 'print crypt("weakpassword", q/$1$mERr$/)'
$1$mERr$A4DAiA6cbNxoV7Y2eEVOA0

而普通的 MD5 哈希可以使用该md5sum实用程序计算

$ printf 'weakpassword' | md5sum
e04efcfda166ec49ba7af5092877030e  -

请注意,后者的输出是十六进制的,而$1$crypt 使用 Base64 编码。