什么是Kerberos

半兽人 发表于: 2018-10-23   最后更新时间: 2019-10-18 10:04:11  
{{totalSubscript}} 订阅, 4,276 游览

场景

很久很久以前,在Kerberos王国有一个神奇的王,它的名字叫KDC,国号为秦(域名),为了更好地管理臣民(用户)、管理营业性场所(文件共享、打印等),要求臣民、营业性场所到王室领取一个账号,账号主要包括用户名/密码

有一个臣民叫阿毛,账号名为 “阿毛”,密码“xxxxxxxx”

那么在Kerberos王国里,有几个人知道阿毛的密码?

  1. 一个是阿毛本人
  2. 另一个就是王(KDC)。

有一家提供文件共享的服务场所,名字叫“小美共享文件服务社”,密码是“xxxxxxx”,这个账号的密码,在KDC王国,只有2个人知道,一个是自己,另外一个就是王,KDC。

KDC王颁布以下规定:

  1. 臣民去臣民家拜访,需要先到KDC票务中心买票,只有买到了被拜访者家的票(Service Ticket),才能前往拜访。
  2. 臣民前去营业场所消费,同样需要先到KDC购票入场。
  3. 营业场所去营业场所消费,一样需要购票入场。

现在阿毛想去“小美文件服务社”坐坐,并浏览一下文件,能直接冲进去吗? 不能。

要分为5步:

  1. 阿毛先到KDC票务中心买票,票务中心说:请问你是哪位?
  2. 阿毛!
  3. 票务中心:请用阿毛的密钥加密“一段认证信息”发给我!
  4. 阿毛照做!
  5. 票务中心知道阿毛的密钥,成功解密阿毛的加密信息,认证成功!

上面说了,在这个世界上除了KDC知道阿毛的密钥,另外一个就是阿毛本人了。

既然KDC用阿毛的密钥解密成功,那说明加密信息的密钥肯定是阿毛的,间接表明买票的人,肯定是阿毛。

以上只是KDC验证阿毛的过程,那么,阿毛如何知道KDC票务中心不是假冒的?

很简单,玄机就在“一段认证信息”里了,这“一段认证信息”里,阿毛想写啥就写啥,阿毛是这样写的:

“你吃饭了么?”

由于这段信息是用阿毛的密钥发给KDC的,如果KDC是真的,那么自然可以解密到明文信息,然后把阿毛的“你吃饭了么?”返回给阿毛,那么阿毛就知道对方是真的KDC。

双向认证成功,可以避免任何一方是假冒的安全风险。

既然认证成功,那么KDC就为阿毛出票呗。KDC给阿毛2件东西:

  1. 用阿毛密钥加密的session key
  2. “小美文件服务社”门票(Service Ticket)

这个门票是用“小美文件服务社”的密钥加密,里面包含:

A. 和阿毛一样的session key
B. 门票持有人姓名:阿毛
C. 阿毛属于哪个Group

上文1、2 中的session key是一样的。

接下来阿毛就直奔小美处了,阿毛敲敲小美的门,小美说:先生请出示您的门票。

阿毛出示2样东西:

  1. 门票Ticket
  2. 用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主要功能:

  1. 中央集权式认证
  2. 帮天下臣民之间的互访分发session key,这就是KDC(Key Distribution Center)的由来。

在Windows平台,通常由域控制器(Domain Controller)充当Kerberos KDC

那用户ID/密码保存在哪里?

  • AD ( Active Directory)。

用户属于哪个groupgroup具有哪些权限,这些信息保存在哪里?

  • AD

用户如何知道自己具有哪些权限?

用户首次登陆域控制器DC,认证成功之后,会推送给用户一个全局安全策略GPO( Global Policy Object),里面包含了用户组权限。

KDC成功认证用户之后,还会推送给用户一个特殊的门票:TGT(Ticket Granting Ticket),当用户去票务中心买票时,只要出示TGT门票,就可以代替用户输入密码,直接出示TGT就可以证明自己的真实身份。

更新于 2019-10-18

查看Kerberos更多相关的文章或提一个关于Kerberos的问题,也可以与我们一起分享文章