0%

Kerberos协议分析

参与角色

  • Client
  • Server
  • KDC
    • AD:存储所有Client的白名单,用于验证Client身份
    • AS:为Client生成TGT 服务
    • TGS:为Client生成某个服务的Ticket

名词解释

AS:身份认证服务,用于验证Client身份

KDC:密钥分发中心

TGT:票据中心,访问TGS的票据

TGS:票据授权服务

ST:访问Server的票据

SessionKey:临时会话密钥a,AS生成发送给客户端(随机密钥)

ServerSessionKey:临时会话密钥b,TGS生成发送给客户端(随机密钥)

具体流程

Client 向KDC-AS申请TGT

Client -> KDC-AS (AS_REQ)

发送AS_REQ:(被Client加密的时间戳, 客户端信息, 服务器端信息)

KDC-AS进行认证 看是否在白名单中

KDC-AS -> Client(AS_REP)

如果认证通过,AS会随机生成一个字符串 Sessionkey

发送两条消息

T(C) Client Pass Hash(SessionKey) ,用于后续与TGS服务通信

发送 SessionKey 

TGT KDC Pass Hash(SessionKey, Client信息) ,作为向TGS申请票据的凭证

发送 SessionKey Client信息 结束时间

Client得到TGT后,向KDC请求访问server的权限。通过Client得到的TGT判断是否可以拥有访问Server的权限,如果可以就给Client访问Server权限的ticket

Client -> KDC-TGS (TGS_REQ)

客户端使用NTLM Hash解密T(C) 得到SessionKey

Client 向 TGS 发送消息

TGT

SessionKey(Client信息,时间戳) 可以记作认证因子,使用SessionKey进行加密

Client信息

Server信息
KDC-TGS -> Client(TGS_REP)

KDC使用NTLMHash解密 TGT 得到 (SessionKey,Client信息,结束时间)

然后使用SessionKey解密 认证因子 得到(Client信息,时间戳)

校验 时间戳与当前时间 和解密TGT后的Client信息与SessionKey解密后的Client信息

校验通过后,会判断客户端有没有权限访问服务端

认证通过后,KDC 会生成ServerSessionKey(随机生成)

发送RGS_REP:

SessionKey(ServerSessionKey, Client信息,票据到期时间) (使用SessionKey加密的ServerSessionKey )

ST (ServerSessionKey, 客户信息 ,票据到期时间)

票据到期时间可以理解成TGS生命周期

Client得到ST后,可以访问server

Client 收到信息后,使⽤Session Key解密获得 (ServerSessionKey, Client信息,TGS生命周期)

Client -> Server (AP-REQ)

发送AP-REQ:

ST

ServerSessionKey(客户信息, 票据到期时间) 记作认证因子2,使用ServerSessionKey加密
Server -> Client(AP-REP)

Server使用NTLM Hash解密ST 得到 (ServerSessionKey, Client信息,票据到期时间)

用ServerSessionKey解密认证因子2 得到 (Client信息,票据到期时间)

然后再校验时间戳和Client信息

校验通过后,客户端即可访问服务端

欢迎关注我的其它发布渠道

------------- 💖 🌞 本 文 结 束 😚 感 谢 您 的 阅 读 🌞 💖 -------------