Kerberos KDC 是否知道用户的明文密码?

信息安全 密码 kerberos
2021-08-15 12:06:26

http://www.freebsd.org/doc/handbook/kerberos5.html第 15.7.8.3 节“KDC 是单点故障”中,您可以阅读:

根据设计,KDC 必须与包含在其中的主密码数据库一样安全。KDC 上应该绝对没有其他服务在运行,并且应该受到物理保护。危险性很高,因为 Kerberos 存储使用相同密钥(“主”密钥)加密的所有密码,而该密钥又作为文件存储在 KDC 上。

这是否意味着这是 Kerberos 的致命弱点,因为如果 KDC 被入侵,攻击者将知道所有用户的明文密码(而不是获取 Linux 系统的 /etc/shadow,它只会为攻击者提供散列和加盐密码)?

2个回答

最简洁的答案是不。

它知道可以从用户密码派生的密钥。规范RFC 1510在第 6 节的介绍中说:

希望字符串到键的功能是单向的,并且映射在不同的领域中是不同的。这一点很重要,因为在多个领域中注册的用户通常会在每个领域中使用相同的密码,并且希望在一个领域中破坏 Kerberos 服务器的攻击者不会在另一个领域中获取或派生用户的密钥。

请注意,每个帐户没有唯一的随机盐,只有同一领域的所有用户共享的领域名称。

更新版本的RFC 4120允许以其他方式派生密钥:

用户密钥可以存储在智能卡上,或者以其他方式独立于密码获得。

答案是肯定的和否定的,这取决于你的意思。在基本的 Kerberos 模型中,领域中的每个主体通常与 Kerberos 身份验证服务器(密钥分发中心或 KDC)共享一个机密。(我说“通常”是因为只充当客户端的主体可以避免共享秘密,而是使用其他方法向 KDC 进行身份验证,例如通过 PKINIT 的 RSA 密钥对或一次性密码,这可以避免密码猜测这里完全讨论了这个问题。)对于像 Web 服务器这样的软件组件,这是一组随机生成的密钥;有一套而不是只有一套,可以为客户提供对各种加密密码的支持。对于用户,它是从用户密码派生的一组密钥。所以 KDC 掌握着所有的秘密:如果它被泄露,

但是,KDC 实际上并没有用户的密码,只有密码派生的一组密钥就 Kerberos 本身而言,这种区别并不重要:密钥是实际的 Kerberos 机密。但是,人们经常为各种系统重复使用密码;因此,如果 KDC 遭到破坏,攻击者将不会立即获得用户密码来尝试访问他们的 GMail 帐户,例如(尽管他现在可以发起字典攻击来尝试发现密码)。

这是否意味着这是 Kerberos 的致命弱点,因为如果 KDC 被入侵,攻击者将知道所有用户的明文密码(而不是获取 Linux 系统的 /etc/shadow,它只会为攻击者提供散列和加盐密码)?

这是一个属性Kerberos;我不会称其为“阿喀琉斯之踵”。Unix 密码哈希方案允许它做一件事:验证明文密码,该密码必须交给服务器。像 Kerberos 和 PKI 这样的系统可以做的远不止这些,而且它们有更多的秘密需要保护,以不同的方式分布,由各自的技术决定。PKI 没有包含所有用户密钥的单一存储区,但它确实具有证书颁发机构 (CA) 的高度敏感密钥,必须像 Kerberos 主体数据库一样小心保护,因为窃取 CA 私钥的方式类似允许攻击者冒充系统中的许多主体。保护 CA 私钥可能比保护 KDC 数据库更容易,因为后者必须在线才能进行 KDC 操作,而前者只需要用于相对不频繁的签名操作(尽管这取决于所讨论的 CA 的性质和用途)。另一方面,基于 Kerberos 密码的身份验证不需要辅助存储或额外的设备(例如智能卡)来保存用户的私钥和受信任的 CA 证书,其对称密码学比公钥操作要快得多。公钥基础设施。等等……有很多比较和权衡。