在 Kerberos 中,KDC(密钥分发中心)创建一个 TGT 并将其发送回客户端。客户端无法打开它,也不应该打开它。
如果有人窃听并窃取 TGT,然后将其发送给 KDC 以获取票证,该怎么办?
答案1
经过进一步挖掘,我想我找到了答案。当 TGT 返回给客户端时,它有两个主要部分,如下所示:
需要注意的关键点是,整个 TGT 都使用客户端(Alice)的私钥(Alice 的密码)进行加密,但在这个 TGT 内有一张密封的票证,并且该票证使用票证授予服务(TGS,创建 TGT 的服务)进行加密。
一旦整个 TGT 到达客户端,客户端就会解密,结果是
- A密封票(TFS 加密并且将保持加密状态)。
- 会话密钥
从现在起,每当客户端需要服务票证(不是 TGT,而只是票证)时,客户端必须在所有请求中发送(TGT)的密封票证部分,并且请求必须使用会话密钥如下所示:
因此,如果中间人掌握了原始 TGT,如下所示:
,他们无法将其解密为各个部分。如果他们要发送它以获取票证,它将不仅包含密封票但整个内容和请求将不会使用加密会话密钥。因此,当服务器解密时,它不会只是密封票,并且它不会使用会话密钥加密(怎么会这样?攻击者无法解密获取会话密钥)因此它会拒绝它。
另一个预防措施是原始客户端的 IP 在票证内,因此只有来自同一 IP 的请求才能使用该票证;然而,这只是另一个预防措施。
看这里了解更多信息。
答案2
该协议描述于维基百科上有关 Kerberos 的文章。
当身份验证服务器向客户端提供 TGT 时,它还会提供一个客户端/TGS 会话密钥,该密钥使用用户密码生成的密钥加密,以便客户端可以解密。
窃听者没有用户的密码,因此无法解密客户端/TGS 会话密钥。没有它,TGT 就毫无用处。