为什么要建设网站,sem优化推广,手机网站模板网,南阳教育论坛网站建设0x01 kerberos协议的角色组成
Kerberos协议中存在三个角色#xff1a; 客户端(Client)#xff1a;发送请求的一方 服务端(Server)#xff1a;接收请求的一方 密钥分发中心(Key distribution KDC)
密钥分发中心分为两个部分#xff1a; AS(Authentication Server)…0x01 kerberos协议的角色组成
Kerberos协议中存在三个角色 客户端(Client)发送请求的一方 服务端(Server)接收请求的一方 密钥分发中心(Key distribution KDC)
密钥分发中心分为两个部分 AS(Authentication Server)认证服务器专门用来认证客户端的身份并发放客户用于访问TGS的TGT(票据授予票据) TGS(Ticket Granting ticket)票据授予服务器用来发放整个认证过程以及客户端访问服务端时所需的服务授予票据(ticket)
Kerberos认证过程简化描述 客户端向KDC请求获取想要访问的目标服务的服务授予票据(Ticket)。 客户端拿着从KDC获取的服务授予票据(Ticket)访问相应的网络服务。 kerberos认证的两步分别解决了以下两个问题 KDC怎么知道客户端没有伪造身份。 服务端怎么知道服务授予票据(ticket)就是没有伪造。 0x02 Kerberos认证流程
上面将认证流程简化成两步实际上第一步包含了两件事。所以可以将整个Kerberos认证过程可以细化为三个阶段也就是三次通信。
2.1 第一次通信
客户端需要获取用于访问服务器的票据首先需要向KDC请求服务授予票据。由于KDC不确定客户端的身份第一次通信的目的是对客户端进行身份认证以确认其是可信的且拥有访问KDC的权限。 第一次通信过程
客户端发送明文请求到KDC包括用户名、主机IP和时间戳。KDC中的AS(Authentication Server)接收请求并在Kerberos认证数据库中查找该用户名是否存在不会判断身份的可靠性。如果存在该用户名则AS返回认证成功的消息给客户端否则认证失败服务结束。
AS返回数据包内容 第一部分是TGT票据授予票据客户端需要使用它去KDC中的TGS获取访问网络服务所需的Ticket。TGT包含客户端的用户名、IP地址、时间戳、即将访问的TGS的名称、TGT的有效时间以及用于客户端和TGS间通信的Session_keyCT_SK,client-TGS session key。TGT使用TGS密钥加密客户端无法解密而且密钥从未在网络中传输因此不存在密钥被劫持破解的情况。 第二部分内容使用客户端密钥加密包括用于客户端和TGS间通信的Session_keyCT_SK、即将访问的TGS的名称、TGT的有效时间和一个当前时间戳。客户端可以使用自己的密钥解密该内容。如果是假客户端则没有真正客户端的密钥无法解密该内容因此认证不通过。这也同时认证了客户端的身份。
2.2 第二次通信
客户端用密钥解密第二部分内容得到时间戳、将要访问的TGS信息和用于与TGS通信的密钥CT_SK。如果客户端检测到时间戳与请求发出时的时间差大于5分钟则认为AS是伪造的认证失败。如果时间戳合理客户端向TGS发起请求获取服务授予票据。 第二次通信过程 客户端向KDC发送请求请求包括以下数据 使用CT_SK加密客户端信息包括客户端名、IP、时间戳。 明文形式的Server信息。 原封不动的TGT。 TGS收到客户端请求后根据明文传输的ServerIP检查服务是否存在且是否可被用户访问如果不行则认证失败否则继续认证。 TGS使用自己的密钥解密TGT获取AS认证后记录的用户信息、Session_Key和时间戳信息。然后TGS会根据时间戳判断通信是否可靠以及是否超时。 如果时间戳未超时TGS会使用CT_SK解密客户端的第一部分内容获取用户信息和TGT中的用户信息进行比对。如果完全相同则认为客户端身份正确可以继续认证流程。
TGS返回数据包内容 第一部分是用Server密钥加密的STServer Ticket包括客户端的Name、IP、要访问的Server IP、ST的有效时间、时间戳以及用于客户端和服务端之间通信的CS_SKSession Key。 第二部分是使用CT_SK加密的内容包括CS_SK、时间戳和ST的有效时间。由于AS已经通过客户端密码加密将CT_SK传递给了客户端并且客户端解密并缓存了CT_SK因此客户端可以自己解密第二部分内容。
2.3 第三次通信
客户端收到TGS的响应使用本地缓存的CT_SK解密第二部分内容。由于第一部分的ST是由Server密码加密的客户端无法解密它。客户端检查时间戳无误后取出第二部分内容中的CS_SK准备向服务端发起最后的请求。 第三次通信过程 客户端收到TGS的响应后使用CK_SK将自己的主机信息和时间戳等信息加密作为交给服务端的第一部分内容并将ST服务授予票据作为第二部分内容一起发送给服务端。 服务端用自己的密钥解密第二部分内容并验证时间戳取出CS_SK。使用CS_SK解密第一部分内容获取经过TGS认证过后的客户端信息。然后服务器将这部分信息与第二部分内容中的服务器信息进行比对确认是否为客户端身份。如果是则服务端使用CS_SK加密响应发送给客户端。客户端使用CS_ST解密响应确认服务端身份。服务端还可以使用数字证书证明自己的身份至此认证完成。
0x03 总结
Kerberos认证过程复杂使用多个密钥且密钥种类不断变换以防止网络拦截。使用临时生成的Session key只在当前会话中使用保证安全性。即使密钥被劫持也只能在当前会话中起作用。
0x04 参考文章
Kerberos协议详解_李火火的安全圈的博客-CSDN博客