通用语言简介Kerberos协议
概述
很久很久以前,在 Kerberos 王国有一个神奇的王,它的名字叫 KDC,国号为秦(域名),为了更好地管理臣民(用户)、管理营业性场所(文件共享、打印等),要求臣民、营业性场所到王室领取一个账号,账号主要包括用户名/密码。
有一个臣民叫王老虎,账号名为“王老虎”,密码“xxxxxxxx”, 那么在 Kerberos 王国里,有几个人知道王老虎的密码?
一个是王老虎笔者,另一个就是王,即 KDC。还有其他人知道吧?没有了!
有一家提供文件共享的服务场所,名字叫“小美共享文件服务社”,密码是“xxxxxxx”,这个账号的密码,在 KDC 王国,只有2个人知道,一个是自己,另外一个就是王,KDC。
KDC王颁布以下规定:
- 臣民去臣民家拜访,需要先到 KDC 票务中心买票,只有买到了被拜访者家的票(Service Ticket),才能前往拜访。
- 臣民前去营业场所消费,同样需要先到 KDC 购票入场。
- 营业场所去营业场所消费,一样需要购票入场。
现在王老虎想去“小美文件服务社”坐坐,并浏览一下文件,能直接冲进去吗?
不能。
王老虎先到 KDC 票务中心买票务中心说: 请问你是哪位?
王老虎!
票务中心: 请用王老虎的密钥加密“一段认证信息”发给我!
王老虎照做!
票务中心知道王老虎的密钥,成功解密王老虎的加密信息,认证成功!
上文说了,在这个世界上除了 KDC 知道王老虎的密钥,另外一个就是王老虎笔者了。
既然 KDC 用王老虎的密钥解密成功,那说明加密信息的密钥肯定是王老虎的,间接表明买票的人,肯定是王老虎。
以上只是 KDC 验证王老虎的过程,问题来了,王老虎如何知道KDC票务中心不是假冒的?
很简单,玄机就在“一段认证信息”里了,这“一段认证信息”里,王老虎想写啥就写啥,王老虎是这样写的:
“知乎到底能走多远?”
由于这段信息是用王老虎的密钥发给 KDC 的,如果 KDC 是真的,那么自然可以解密到明文信息,然后把王老虎的“知乎到底能走多远?”返回给王老虎,那么王老虎就知道对方是真的 KDC。
双向认证成功,可以避免任何一方是假冒的安全风险。
既然认证成功,那么 KDC 就为王老虎出票呗。KDC 给王老虎2件东西:
- 用王老虎密钥加密的session key
- “小美文件服务社”门票(Service Ticket)
这个门票是用“小美文件服务社”的密钥加密,里面包含:
- 和王老虎一样的session key
- 门票持有人姓名: 王老虎
- 王老虎属于哪个Group
上文1、2 中的 session key 是一样的。
接下来王老虎就直奔小美处了,王老虎敲敲小美的门,小美说: 先生请出示您的门票。
王老虎出示2样东西:
- 门票 Ticket
- 用 session key 加密“一段认证信息”,认证信息里写道: “美女,你会说相声不?”
小美用自己的密钥解密 ticket,得到上文 ABC 信息。
小美用解密得到的A = session key ,解密(2),得到明文认证信息: “美女,你会说相声不?”
小美对王老虎说:“美女,你会说相声不?”
王老虎窃喜,看来这个小美不是假冒的,否则不可能知道我加密的认证信息!
至此,双向认证成功,接下来就使用双方都知道的 session key 来加密/解密双向的流量,由于 session key 只有 KDC、王老虎、小美知晓,任何第三方都无法知晓 session key,所以无法解密流量。
上文忘记说了,小美的每一个文件都具有权限管理,小美根据上文的 C,可以知道王老虎属于哪个 group,看看这个 group 有没有被访问文件的“ read 、write 、modify、full control”权限,并依据特定权限,限制王老虎操作文件的特权。
上文密钥的由来
密码做一次 Hash 运算,即为密钥,也称为 Master Key。
Kerberos 主要功能:
- 中央集权式认证
- 帮天下臣民之间的互访分发session key,这就是KDC(Key Distribution Center)的由来。
在 Windows 平台,通常由域控制器(Domain Controller)充当 Kerberos KDC。
那用户ID/密码保存在哪里?
AD (Active Directory)。
用户属于哪个 group,group 具有哪些权限,这些信息保存在哪里?
AD。
用户如何知道自己具有哪些权限?
用户首次登陆域控制器 DC,认证成功之后,会推送给用户一个全局安全策略 GPO( Global Policy Object),里面包含了用户组权限。
KDC 成功认证用户之后,还会推送给用户一个特殊的门票: TGT(Ticket Granting Ticket),当用户去票务中心买票时,只要出示 TGT 门票,就可以代替用户输入密码,直接出示 TGT 就可以证明自己的真实身份。
参考资料
- 知乎