zoukankan      html  css  js  c++  java
  • Kerberos协议

    kerberos的相关概念

    KDC:密钥分发中心。域内认证不再是两台机器之间互相请求的认证,而是通过第三方可信机构KDC来实现整个认证体系。从物理层面看,KDC的角色实际为域控制器,包括AD数据库、AS身份认证中心、TGS票据分发中心

    AD:活动目录数据库。存放者域控的NTDS.dit文件,存储域中所有用户名和对应的NTLM Hash,KDC可以从AD中提取域中所有用户的NTLM Hash,这是kerbberos协议能够成功的基础。

    AS:身份认证服务。负责对client的身份验证,像client发放TGT票据

    TGS:票据授予服务。负责向client发放ticket,ticket允许client像server发起请求

    kerberos认证流程

    1、client像KDC发起访问请求,希望获取到server的访问权限,KDC中的AS得到消息后,会从AD数据库中寻找该用户是否可以访问,如果可以访问则放回TGT给Client。

    2、client收到AS给的TGT之后,再次像KDC发起请求,希望想访问到server,KDC中的TGS收到请求之后,判断Client拥有访问权限,于是发放Ticket给Client

    3、Client收到TGS发放的Ticket之后,便可以访问到Server,但是这个Ticket只能用于申请访问的Server,别的Server不可以,如果需要访问,则需要重新请求

    kerberos认证具体过程

    image-20211203101841489

    1、A用明文(包括登记的身份)向鉴别服务器AS表明自己的身份。AS掌握了各实体登记的身份和口令。AS对A进行身份验证,如果验证通过,允许A和票据授予服务器TGS进行联系。

    2、鉴别服务器AS向A发送用A的对称密钥Ka加密的报文,这个报文包含A和TGS通信的会话密钥Ks以及AS要发送给TGS的票据(用TGS的对称密钥Ktg加密的)。A不保存密钥Ka报文到达A之后,A就键入口令,配合算法一起就能生成密钥Ka,随机口令被销毁。密钥Ka用来对AS发送过来的报文进行解密,这样就能提取出会话密钥Ks(这个是A和TGS通信用的)以及要转发给TGS的票据(密钥Ktg加密的)

    3、 A向TGS发送三项内容: a、转发AS发的票据 b、服务器B的名字,这表示A请求B的服务。注意到现在A向TGS证明自己的身份 不再是键入口令(因为入侵者能够从网上截取口令),而是通过转发AS发出的 票 据(只有A才能提取)。票据是加密的,入侵者无法伪造 c、用Ks加密的时间戳T,防止入侵者的重放攻击

    4、TGS发送两个票据,每一个都包含A和B通信的会话密钥Kab,给A的票据用Ks加密,给B的票据用B的密钥Kb加密,请注意,现在入侵者无法提取Kab,因为不知道Ks和 Kb,入侵者也无法重放步骤3。

    5、A用ks解密之后可以得到kab,也就是获得了和B通信的资格,然后A向B转发TGS发来的票据,同时发送用Kab加密的时间戳T

    6、B把时间戳T加1来证实收到票据,B向A发送的报文用密钥Kab加密。

    以后,A和B就使用TGS给出的会话密钥Kab进行通信。

  • 相关阅读:
    Java实现 LeetCode 735 行星碰撞(栈)
    Java实现 LeetCode 735 行星碰撞(栈)
    Java实现 LeetCode 887 鸡蛋掉落(动态规划,谷歌面试题,蓝桥杯真题)
    Java实现 LeetCode 887 鸡蛋掉落(动态规划,谷歌面试题,蓝桥杯真题)
    Java实现 LeetCode 887 鸡蛋掉落(动态规划,谷歌面试题,蓝桥杯真题)
    Java实现 蓝桥杯算法提高 求最大值
    Java实现 蓝桥杯算法提高 求最大值
    Java实现 蓝桥杯算法提高 求最大值
    Python eval() 函数
    Python repr() 函数
  • 原文地址:https://www.cnblogs.com/HelloCTF/p/15748372.html
Copyright © 2011-2022 走看看