zoukankan      html  css  js  c++  java
  • kerberos协议介绍

    一.kerberos认证过程

     

    client向kerberos服务请求,希望获取访问server的权限。kerberos得到了这个消息,首先得判断client是否是可信赖的,也就是白名单黑名单的说法。这就是AS服务完成的工作,通过在AD中存储黑名单和白名单来区分client。成功后,返回TGT给client。client得到了TGT后,继续向kerberos请求,希望获取访问server的权限。kerberos又得到了这个消息,这时候通过client消息中的TGT,判断出了client拥有了这个权限,给了client访问server的权限ticket。 client得到ticket后,终于可以成功访问server。这个ticket只是针对这个server,其他server需要向TGS申请。 

     

     

     

     

    二.服务作用

    KDC(key distributed center)
    作用:整个安全认证过程的票据生成管理服务,其中包含两个服务,AS和TGS

    AS(authentication service)
    作用:为client生成TGT的服务

    TGS(ticket granting service)
    作用:为client生成某个服务的ticket

    AD(account database)
    作用:存储所有client的白名单,只有存在于白名单的client才能顺利申请到TGT

    TGT(ticket-granting ticket)
    作用:用于获取ticket的票据

    client
    想访问某个server的客户端

    server
    提供某种业务的服务

     三.步骤详解

    (AS-REQ)Client 发送用户名 Tom 到 KDC (Key Distribution Center)以向 AS (Authentication Service)请求 TGT 票据等信息。

    (AS-REP)收到请求后,AS 生成随机字符串 Session Key,使用 Tom 的 NTLM Hash 对 Session Key 加密得到密文 A,再使用账号 krbtgt 的 NTLM Hash 对 Session Key 、 Client Info和 timestamp 加密得到 TGT,A 和 TGT 一起返回给 Client。

    (TGS-REQ) Client 收到请求后,使用自身的 NTLM Hash 解密 A 就能得到 Session Key,然后使用 Session Key 对 Client Info 和 timestamp 加密得到 B,加上 TGT ,发送给 KDC中的 TGS。

    (TGS-REP)TGS 收到请求后,使用 krbtgt 的 NTLM Hash 解密 TGT,得到 Session Key 和 timestamp 以及 Client Info,同时,使用 TGT 解密出的 Session Key 解密密文B,得到Client Info 和 timestamp。 比对这两部分解密得到的内容以验证是否通过。通过后,生成一个新的随机数 Server(Session Key2),并用它加密 client info 和 timestamp 得到密文 enc-part;使用服务器计算机的NTLM Hash 对 Server(session key2) 和 client info 以及 timestamp 加密得到最终的 Ticket,返回给 Client。

    (AP-REQ)Client 使用 Ticket 和 enc-part 直接请求某服务。

    (AP-REP) 对Ticket 和 enc-part 解密后进行验证授权。

    注意

    • Kerberos 协议设计的思路就是用来在不受信的环境下进行认证的协议。

    • krbtgt 账号的 NTLM Hash 理论上只存在于 KDC 中。这意味着 TGT 只能由 KDC 来解密。如果krbtgt 账号的NTLM Hash泄露了,那么 TGT 就能被解密甚至伪造。伪造的 TGT 叫做黄金票据。

    • Ticket 是由服务器计算机本身的 NTLM Hash 加密的,Client 不能解密。如果该Hash 泄露,那么就可以解密甚至伪造 Ticket。伪造的 Ticket 叫做白银票据。

    • 在上述的流程中,涉及到时间戳 timestamp,由于它的存在,才使得被第三方获取了加密信息 A 、B、TGT不会在短时间内被暴力破解。timestamp 一般时间为8小时。

    • Kerberos 协议和 NTLM 协议都会使用 NTLM Hash 对生成的任意随机数加密,然后比对结果。 Kerberos 的主要区别在于添加了第三方——-KDC参与到认证过程中。

    • Client info 中包含域名信息、Client 名称等

    参考

       https://blog.csdn.net/lovebomei/article/details/79814979

       https://green-m.me/2019/01/24/play-with-kerberos/

     

  • 相关阅读:
    [BZOJ3745][Coci2015]Norma
    [OJ#15]TR #2 画心
    [BZOJ3585][BZOJ3339]mex
    [OJ#63]树句节够提
    [LOJ#2255][BZOJ5017][Snoi2017]炸弹
    [LOJ#525]「LibreOJ β Round #4」多项式
    【字符编码】Java字符编码详细解答及问题探讨
    【Java基础】序列化与反序列化深入分析
    【目录】JVM目录
    【知识积累】随机数生成的几种方法
  • 原文地址:https://www.cnblogs.com/websecyw/p/11232210.html
Copyright © 2011-2022 走看看