Kerberos Explained - tenji/ks GitHub Wiki

Kerberos解析

专业术语

  • Key Distribution Center (KDC):密钥分配中心
  • Authentication Service (AS):认证服务
  • Ticket-Granting Ticket (TGT):票据授予服务提供的票据,用于获取具体的ST
  • Ticket-Granting Service (TGS):票据授予服务,负责校验TGT和授予ST
  • Service Ticket (ST):服务票据
  • Principle:安全个体,被认证的个体,有一个名字和口令
  • KDC/Server Key:长期密钥(Long-Term Key),一个只有目标服务器和KDC知道的密钥,并用来加密客户端访问这个目标服务器票据的密钥
  • Client/Server Key:会话密钥(Session Key)一个短期的、单此会话的密钥,是在用户的身份和权限已经被确认后由KDC建立的用于这个用户的跟某个服务器之间的加密往来信息使用的密钥
  • KDC/Client Key:会话密钥(Session Key),是KDC跟客户端共享的一个密钥,被用于加密这个客户端跟KDC之间的消息

基本概念

Kerberos是一种计算机网络授权协议,用来在非安全网路中,对个人通信以安全的手段进行身份认证。Kerberos这一名词来源于希腊神话“三个头的狗——地狱之门守护者”,Kerberos的三个头分别代表密钥分配中心、客户端用户和需要认证的服务。KDC作为Domain Controller扮演了两个功能角色:Authentication Service和Ticket-Granting Service。

交互流程

1. AS Exchange

用户需要提供合法的用户名和密码给同域内KDC的AS部分认证以获得访问权限,认证成功之后,用户将获得一个在本域内有效的TGT。TGT的默认生命周期为10小时,并且可能在整个用户的登录会话期间更新,而不需要用户重新输入密码。TGT存储在本机的易失性存储器空间(Volatile Memory Space),用于和网络中需要访问的服务建立会话(Session)。

如果客户端获取TGT的请求通过了KDC的验证,则响应(称为AS响应)将包括两部分:使用只有KDC (TGS)可以解密的密钥加密的TGT用用户密码哈希值加密的会话密钥(此密钥之后将用来处理与KDC的通信)。因为客户端系统无法读取TGT内容,所以客户端必须向TGS提供TGT来换取ST。TGT包括生命周期参数授权数据与客户端通信时使用的会话密钥

  • AS Exchange响应中包含:加密后的TGT + 用户密码哈希值加密过的KDC/Client Key
  • TGT中包含:生命周期参数 + 授权数据 + KDC/Client Key

2. TGS Exchange

当需要访问某一个服务器的服务时,用户将TGT提供给KDC的TGS,TGT通过TGS的验证之后,将生成票据(Ticket)和供客户端和服务端使用的会话密钥(Session Key),这个信息就是所谓的服务票据(Service Ticket),被存储在客户端的机器。

TGS收到客户端的TGT并使用自己的密钥读取它。如果TGS通过了客户端的请求认证,则为客户端和目标服务器生成服务票证(Service Ticket)。客户端使用早先从AS响应中获取的TGS会话密钥读取它可以识别的部分。在接下来的Client/Server通信中,客户端将TGS回复给Server的部分发送给目标Server。

  • TGS Exchange响应中包含:加密后的Client/Server Key(客户端使用) + 加密后的Service Ticket信息(服务端使用)
  • ST中包含:生命周期参数 + 授权数据 + Client/Server Key

3. Client/Server (CS) Exchange

一旦客户端用户拥有Client/Server Service Ticket,他就可以与Server Service建立会话。服务器可以使用与KDC协议好的长期密钥来解密从TGS间接发送过来的信息(也就是客户端直接发送过来的消息)。然后,Service Ticket用于对客户端用户进行身份验证,并在服务器和客户端之间建立服务会话。当票据过期之后,必须对Service Ticket进行续订才能继续使用服务。

4. Client/Server Exchange Detail

客户端在Client/Server请求中将Service Ticket中给服务端的那部分发送给服务端,尝试建立Client/Server会话。如果启用了双向认证,则目标服务器返回使用Service Ticket会话密钥加密的时间戳。如果时间戳正确解密,则不仅客户端通过了服务器身份验证,而且服务器通过了客户端的身份验证。目标服务器不必直接与KDC进行通信。这可以减少KDC的停机时间和压力。

JAAS (JAVA Authentication and Authorization Service)

Wait for Editing...

在Hadoop、HBase等中的应用

Wait for Editing...

参考链接

Kerberos Explained

Kerberos协议

⚠️ **GitHub.com Fallback** ⚠️