Kerberos协议详解

0x01 kerberos协议的角色组成

Kerberos协议中存在三个角色:
  1. 客户端(Client):发送请求的一方

  2. 服务端(Server):接收请求的一方

  3. 密钥分发中心(Key distribution KDC)

密钥分发中心分为两个部分:
  1. AS(Authentication Server):认证服务器,专门用来认证客户端的身份并发放客户用于访问TGS的TGT(票据授予票据)

  2. TGS(Ticket Granting ticket):票据授予服务器,用来发放整个认证过程以及客户端访问服务端时所需的服务授予票据(ticket)

Kerberos认证过程简化描述:

在这里插入图片描述

  1. 客户端向KDC请求获取想要访问的目标服务的服务授予票据(Ticket)。

  2. 客户端拿着从KDC获取的服务授予票据(Ticket)访问相应的网络服务。

kerberos认证的两步分别解决了以下两个问题:

  • KDC怎么知道客户端没有伪造身份。

  • 服务端怎么知道服务授予票据(ticket)就是没有伪造。

0x02 Kerberos认证流程

上面将认证流程简化成两步,实际上第一步包含了两件事。所以可以将整个Kerberos认证过程可以细化为三个阶段,也就是三次通信。

2.1 第一次通信

客户端需要获取用于访问服务器的票据,首先需要向KDC请求服务授予票据。由于KDC不确定客户端的身份,第一次通信的目的是对客户端进行身份认证,以确认其是可信的且拥有访问KDC的权限。

在这里插入图片描述

第一次通信过程:
  1. 客户端发送明文请求到KDC,包括用户名主机IP时间戳
  2. KDC中的AS(Authentication Server)接收请求并在Kerberos认证数据库中查找该用户名是否存在(不会判断身份的可靠性)。
  3. 如果存在该用户名,则AS返回认证成功的消息给客户端,否则认证失败,服务结束。
AS返回数据包内容:
  1. 第一部分是TGT(票据授予票据),客户端需要使用它去KDC中的TGS获取访问网络服务所需的Ticket。TGT包含客户端的用户名IP地址时间戳即将访问的TGS的名称TGT的有效时间以及用于客户端和TGS间通信的Session_key(CT_SK,client-TGS session key)。TGT使用TGS密钥加密,客户端无法解密,而且密钥从未在网络中传输,因此不存在密钥被劫持破解的情况。

  2. 第二部分内容使用客户端密钥加密,包括用于客户端和TGS间通信的Session_key(CT_SK)、即将访问的TGS的名称TGT的有效时间和一个当前时间戳。客户端可以使用自己的密钥解密该内容。如果是假客户端则没有真正客户端的密钥,无法解密该内容,因此认证不通过。这也同时认证了客户端的身份。

2.2 第二次通信

客户端用密钥解密第二部分内容,得到时间戳、将要访问的TGS信息和用于与TGS通信的密钥CT_SK。如果客户端检测到时间戳与请求发出时的时间差大于5分钟则认为AS是伪造的,认证失败。如果时间戳合理,客户端向TGS发起请求获取服务授予票据。

在这里插入图片描述

第二次通信过程:
  1. 客户端向KDC发送请求,请求包括以下数据:

    • 使用CT_SK加密客户端信息,包括客户端名IP时间戳

    • 明文形式的Server信息。

    • 原封不动的TGT。

  2. TGS收到客户端请求后,根据明文传输的ServerIP检查服务是否存在且是否可被用户访问,如果不行则认证失败,否则继续认证。

  3. TGS使用自己的密钥解密TGT,获取AS认证后记录的用户信息Session_Key时间戳信息。然后,TGS会根据时间戳判断通信是否可靠,以及是否超时。

  4. 如果时间戳未超时,TGS会使用CT_SK解密客户端的第一部分内容,获取用户信息TGT中的用户信息进行比对。如果完全相同,则认为客户端身份正确,可以继续认证流程。

TGS返回数据包内容:
  1. 第一部分是用Server密钥加密的ST(Server Ticket),包括客户端的NameIP、要访问的Server IPST的有效时间时间戳以及用于客户端和服务端之间通信的CS_SK(Session Key)

  2. 第二部分是使用CT_SK加密的内容,包括CS_SK时间戳ST的有效时间。由于AS已经通过客户端密码加密将CT_SK传递给了客户端,并且客户端解密并缓存了CT_SK,因此客户端可以自己解密第二部分内容。

2.3 第三次通信

客户端收到TGS的响应,使用本地缓存的CT_SK解密第二部分内容。由于第一部分的ST是由Server密码加密的,客户端无法解密它。客户端检查时间戳无误后,取出第二部分内容中的CS_SK,准备向服务端发起最后的请求。

在这里插入图片描述

第三次通信过程:
  1. 客户端收到TGS的响应后使用CK_SK将自己的主机信息时间戳等信息加密,作为交给服务端的第一部分内容,并将ST(服务授予票据)作为第二部分内容一起发送给服务端。

  2. 服务端用自己的密钥解密第二部分内容并验证时间戳,取出CS_SK。使用CS_SK解密第一部分内容,获取经过TGS认证过后的客户端信息。然后,服务器将这部分信息与第二部分内容中的服务器信息进行比对,确认是否为客户端身份。如果是则服务端使用CS_SK加密响应发送给客户端。客户端使用CS_ST解密响应,确认服务端身份。服务端还可以使用数字证书证明自己的身份,至此认证完成。

0x03 总结

Kerberos认证过程复杂,使用多个密钥,且密钥种类不断变换,以防止网络拦截。使用临时生成的Session key,只在当前会话中使用,保证安全性。即使密钥被劫持,也只能在当前会话中起作用。

0x04 参考文章

Kerberos协议详解_李火火的安全圈的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HashMap和HashTable的区别是什么?

HashMap和HashTable都是常见的哈希表实现方式,它们有以下主要区别: 1. 线程安全性:HashTable是线程安全的,而HashMap不是。HashTable的方法都是同步的,可以在多线程环境中安全使用,但是会带来额外的性能开…

Nacos (2.0版本之后)状态异常集群节点状态异常

在nacos 2.0 之后正常部署后节点状态仅有一个正常,其余均为DOWN 或者SUSPICIOUS 状态 查看日志后发现 ERROR Server check fail, please check server 192.168.172.104 ,port 9849 is available , error {} 其实是nacos 相互之间不能正常通信造成的,nacos客户端升级为2.x版…

apple pencil一代的平替有哪些品牌?苹果平板的触控笔

随着苹果Pencil系列的推出,平替电容笔在国内市场得到了较好的发展,随之的销量,也开始暴涨,苹果pencil因为价格太高,导致很多人买不起。目前市场上,有不少的平替电容笔,可以替代苹果的Pencil&…

MySQL 主从复制与读写分离

MySQL 主从复制与读写分离 一、mysql读写分离的概念1、什么是读写分离?2、为什么要读写分离呢?3、什么时候要读写分离?4、主从复制与读写分离5、mysql支持的复制类型 二、主从复制的工作过程三、MySQL 读写分离原理常见的 MySQL 读写分离分为…

【Distributed】分布式ELK日志文件分析系统(二)

文章目录 一、FilebeatELK 部署1. 环境部署2. 在 Filebeat 节点上操作2.1 安装 Filebeat2.2 设置 filebeat 的主配置文件 3. 在 Apache 节点上操作3.1 在 Logstash 组件所在节点上新建一个 Logstash 配置文件 3. 启动3.1 在Logstash 组件所在节点启动3.2 在 Filebeat 节点 启动…

Stable Diffusion 用2D图片制作3D动态壁纸

如果想让我们的2D图片动起来可以使用stable-diffusion-webui-depthmap-script插件在SD中进行加工让图片动起来。 这是一个可以从单个图像创建深度图,现在也可以生成3D立体图像对的插件,无论是并排还是浮雕。生成的结果可在3D或全息设备(如VR耳机或Looking Glass显示器)上查…

C语言实现,固定内存通讯录(注释超详细)

头文件 #ifndef __LINKMAN_H__ #define __LINKMAN_H__#include<stdio.h> #include<string.h> #pragma warning (disable:4996) typedef struct LINKMAN//建立结构体&#xff0c;存放联系人信息 {char name[20];char sex[10];int age;int tel[12];char addr[50]; }…

大模型加速学科升级,飞桨赋能北邮“X+大模型”特色小学期

在人工智能时代&#xff0c;设计师与产品经理比以往更加需要关注一个事实&#xff1a;那就是如何利用人工智能和数据分析技术&#xff0c;打造让用户心动的信息交互产品和用户体验&#xff0c;释放人-机协同共创的巨大潜能&#xff0c;是决定设计产能和竞争力的关键。 在产业的…

【SpringBoot】84、SpringBoot中MVC处理异常的多种方式

在 SpringBoot 中我们可以使用注解 @ControllerAdvice 和 @RestControllerAdvice 来全局处理异常,这两个注解只多了一个注解 @ResponseBody,将方法的返回值,以特定的格式写入到 response 的 body ,进而将数据返回给客户端,如果是字符串直接输出字符串信息,如果是对象将会…

智能合约 -- 安全考量

相关概念 就是我们写代码是考虑这种涉及到合约安全的问题:下面这个方面写合约是重点考虑。 创建消息发送以太币&#xff1a; 1.要创建消息发送以太币&#xff0c;您需要构建一个有效的交易&#xff0c;并将其发送到以太坊网络中。 2.交易被发送到以太坊网络后&#xff0c;会经…

RabbitMQ ---- 消息队列

RabbitMQ ---- 消息队列 1. MQ 的相关概念1.1 什么是 MQ1.2 为什么要用 MQ1.3 MQ 的分类1.4 MQ 的选择 2. RabbitMQ2.1 RabbitMQ 的概念2.2 四大核心概念2.3 RabbitMQ 核心部分2.4 各个名词介绍2.5 安装 1. MQ 的相关概念 1.1 什么是 MQ MQ(message queue)&#xff0c;从字面…

爬虫之Scrapy

一 介绍 Scrapy一个开源和协作的框架&#xff0c;其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的&#xff0c;使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。但目前Scrapy的用途十分广泛&#xff0c;可用于如数据挖掘、监测和自动化测试等领域&#x…

什么是Docker

容器技术和虚拟机 虚拟机 和一个单纯的应用程序相比&#xff0c;操作系统是一个很重的程序&#xff0c;刚装好的系统还什么都没有部署&#xff0c;单纯的操作系统其磁盘占用至少几十G起步&#xff0c;内存要几个G起步。 在这台机器上开启三个虚拟机&#xff0c;每个虚拟机上…

CentOS 7 安装 Nginx

前言 最近&#xff0c;在公司经常会进行项目的部署&#xff0c;但是服务器环境都是导师已经搭建好了的&#xff0c;我就是将项目文件放到特定目录。于是&#xff0c;周末在家就进行了 Nginx 的安装学习。之前&#xff0c;在 Windows 上使用过 Nginx&#xff0c;但是在 Linux 环…

web学习--Cookie与Session会话技术

总结&#xff1a;可以考虑将登陆信息等重要信息存放为session&#xff0c;不重要的信息可以放在cookie中。 Cookie 1.概念&#xff1a;客户端会话技术&#xff0c;将数据保存在客户端 使用步骤&#xff1a; 1&#xff0c;创建Cookie对象&#xff0c;绑定数据 2.发送Cookie对象…

【微信小程序】使用 wx.request 方法进行异步网络请求

在微信小程序中&#xff0c;你可以使用 wx.request 方法进行异步网络请求&#xff0c;并将获取到的列表数据渲染到 UI 上。 首先&#xff0c;在页面的 data 中定义一个数组变量&#xff0c;用于存储获取到的列表数据&#xff0c;例如&#xff1a; Page({data: {listData: [] …

PSI算法经典论文算法概述

文章目录 什么是隐私求交PSIPSI协议分类PSI算法的分类基于哈希函数的PSI算法基于不经意传输&#xff08;OT&#xff09;的 PSI算法基于GC的PSI算法基于公钥加密的PSI算法基于DH的PSI算法基于RSA盲签名的PSI算法基于同态加密的PSI算法 基于差分隐私的PSI算法 总结参考文献 什么是…

为了实现上网自由,我做了一个多功能串口服务器

项目作者&#xff1a;小华的物联网嵌入式之旅 介绍&#xff1a;从事电气自动化行业&#xff0c;多次获得物联网设计竞赛&#xff0c;爱好嵌入式设计开发&#xff0c;物联网开发。 设计方案思路的由来&#xff0c;是因为我们现在的开发板基本需要通过串口与WIFI模组或以太网模…

[Linux] 最基础简单的线程池 及其 单例模式的实现

本篇文章主要用到线程相关内容, 下面是博主关于线程相关内容的文章: [Linux] 线程同步分析&#xff1a;什么是条件变量&#xff1f;生产者消费者模型是什么&#xff1f;POSIX信号量怎么用&#xff1f;阻塞队列和环形队列模拟生产者消费者模型 [Linux] 线程互斥分析: 多线程的问…

1千w移动设备以及设备模型分各种方式存储到redis实际占用内存大小

1千w移动设备数据以及设备分存储到redis &#xff08;以安卓为例&#xff1a;IDFA_MD5、OAID_MD5、ANDROID_ID_MD5 总设备码MD5约3000w&#xff09;实际占用内存 string key value值存储大小&#xff08;存20个不同来源模型分&#xff09; 格式1 5.17G string key 为两种md5…