一文搞懂kerberos

机器学习Zero 机器学习Zero     2023-04-06     242

关键词:

Kerberos

Kerberos一词来源于古希腊神话中的Cerberus——守护地狱之门的三头犬,Kerberos是为TCP/IP 网络设计的可信第三方鉴别协议,最初是在麻省理工学院(MIT)为Athena 项目而开发的。Kerberos服务起着可信仲裁者的作用,可提供安全的网络鉴别,允许个人访问网络中不同的机器。

1. Kerberos 模型

Kerberos模型基于Needham-Schroeder的可信第三方协议,采用DES加密(也可用其他算法替代),它与网络上的每个实体分别共享一个不同的秘密密钥,知道该秘密密钥就是身份的证明。

首先以吃饭为例,阐述Client与Kerbros、TGS及Server之间的关系如下:


Kerberos有一个所有客户和秘密密钥的数据库,由于Kerberos知道每个人的秘密密钥,所以它能产生一个实体证实另一个实体身份的消息。Kerberos还能产生会话密钥,只供一个客户机和一个服务器(或两个客户机)使用。会话密钥用来加密双方间的通信消息,通信完毕,即销毁会话密钥。

Kerberos 协议如下:

  • 客户从Kerberos 请求一张票据许可票据(TGT,Ticket Granting Ticket)作为票据许可服务(TGS,Ticket-Granting Service),该票据用用户的秘密密钥加密后发送给用户;

  • 为了使用特定的服务器,客户需要从TGS中请求一张票据,TGS 将票据发回给客户;

  • 客户将此票据提交给服务器和鉴别器,如果客户的身份没有问题,服务器就会让客户访问该服务。


(1) 请求票据许可票据

客户到Kerberos: c c c,tgs。

(2)票据许可票据

Kerberos到客户: K c , t g s K c \\K_c,tgs\\K_c Kc,tgsKc T c , t g s K t g s \\T_c,tgs\\K_tgs Tc,tgsKtgs

(3)请求服务器票据

客户到TGS: A c , s K c , t g s \\A_c,s\\K_c,tgs Ac,sKc,tgs T c , t g s K t g s \\T_c,tgs\\K_tgs Tc,tgsKtgs

(4)服务器票据

TGS到客户: K c , s K c , t g s \\K_c,s\\K_c,tgs Kc,sKc,tgs T c , s K s \\T_c,s\\K_s Tc,sKs

(5)请求服务

客户到服务器: A c , s K c , s \\A_c,s\\K_c,s Ac,sKc,s T c , s K s \\T_c,s\\K_s Tc,sKs,

相关缩写表示如下

c c c客户(机)
s s s服务器
a a a客户的网络地址
v v v票据的有效起止时间
t t t时间标记
K x K_x Kx x x x的秘密密钥
K x , y K_x,y Kx,y x x x y y y的会话密钥
m K x \\m\\K_x mKx x x x的秘密密钥加密的 m m m
T x , y T_x,y Tx,y使用 y y y x x x的票据
A x , y A_x,y Ax,y x x x y y y的鉴别码

2. 凭证

Kerberos使用两类凭证:票据(ticket)和鉴别码(authenticator)。

(1)票据

票据用于秘密地向服务器发送持有票据用户的身份识别,票据中还包括有一些信息,服务器能够用这些信息来确认使用票据的客户与发给票据的客户是同一个客户。

Kerberos票据的格式如下: T c , s = s , c , a , v , K c , s K s T_c,s = s,\\c,a,v,K_c,s\\ K_s Tc,s=s,c,a,v,Kc,sKs对单个的服务器和客户而言,票据很有用。它包括客户名、服务器名、网络地址、时间标记和会话密钥。这些信息用服务器的秘密密钥加密。

客户一旦获得该票据,他便可以多次使用它来访问服务器,直到票据过期。客户无法解密票据(她不知道服务器的秘密密钥),但她可以以其加密的形式呈递给服务器。票据在网络上传送时,任何在网上窃听的人都无法阅读或修改它。

(2)鉴别码

Kerberos鉴别码的格式如下: A c , s = c , t , k e y K c , s A_c,s=\\c,t,key\\K_c,s Ac,s=c,t,keyKc,s客户在每次需要使用服务器上的服务时,都要产生一个鉴别码。该鉴别码包括用户名、时间际记和一个可选的附加会话密钥,它们用服务器与客户共享的会话密钥加密。与票据不同的是,鉴别码只能使用一次。客户可以根据需要产生鉴别码(它知道共享的秘密密钥)。

鉴别码可达到两个目的:

  • 首先,它包括一些以会话密钥加密的明文,这表明鉴别码的发送者也知道密钥。
  • 更重要的是,加封的明文包括时间标记,即使记录票据和鉴别码的窃听者无法重放它们。

3. 协议

(1)初始票据获取

  • 客户给Kerberos 鉴别服务器发送一个消息,该消息包括客户名 c c c及其TGS服务器名。实际中,客户一般只是将其名字输人系统,注册程序发送该请求。
  • Kerberos鉴别服务器在其数据库中查找客户。如果客户在数据库中,Kerberos便产生一个在客户和TGS之间使用的会话密钥( K c , t g s \\K_c,tgs\\ Kc,tgs),这叫做票据许可票据。
  • Kerberos 利用客户的秘密密钥加密会话密钥 K c , t g s K c \\K_c,tgs\\K_c Kc,tgsKc。然后为客户产生一个TGT向TGS证她的身份,并用TGS的秘密密钥对其加密 T c , t g s K t g s \\T_c,tgs\\K_tgs Tc,tgsKtgs。鉴别服务器将这两种加密的消息发送给客户。
  • 客户解密第一个消息,并恢复会话密钥。客户现在可在TGT的有效期内向TGS证实她的身份。

(2)服务器票据的获取

  • 客户必须为他想使用的每一项业务获得不同的票据,TGS给每个服务器分配票据。客户向TGS发送一个请求。
  • TGS接收到请求后,用自己的秘密密钥解密此TGT,然后再用TGT中的会话密钥解密密鉴别码。
  • TGS比较鉴别码中的信息与票据中的信息、客户的网络地址与发送的求地址,以及时间标记与当前时间。如果每一项都匹配,便允许处理该请求。
  • TGS通过将客户有效的票据返回给服务器的方式来响应一个有效请求 T c , s K s \\T_c,s\\K_s Tc,sKs。TGS 还为客户和服务器产生一个新的会话密钥 K c , s \\K_c,s\\ Kc,s,此密钥由客户和TGS共享的会话密钥加密 K c , s K c , t g s \\K_c,s\\K_c,tgs Kc,sKc,tgs。然后将这两种消息返回给客户。
  • 客户解密消息,同时得到会话密钥 K c , s \\K_c,s\\ Kc,s

(3)服务请求

  • 客户向服务器鉴别自己的身份。客户产生一个鉴别码,鉴别码由客户名、客户网络地址和时间标记组成,用TGS为客户和服务器产生的会话密钥加密得到 A c , s K c , s \\A_c,s\\K_c,s Ac,sKc,s
  • 客户的服务请求由从Kerberos接收到的票据 T c , s K s \\T_c,s\\K_s Tc,sKs和加密的鉴别码 A c , s K c , s \\A_c,s\\K_c,s Ac,sKc,s组成。
  • 服务器解密并检查票据和鉴别码,以及客户地址和时间标记。需要相互鉴别的应用中,服务器给客户返回一个包含时间标记的消息,该消息由会话密钥加密。这证明服务器知道客户的秘密密钥而且能解密票据和鉴别码。
  • 客户和服务器可以用共享的密钥加密信息。

一文搞懂│什么是跨域?如何解决跨域?

查看详情

一文全搞懂postgresql的角色

角色和用户的使用举个例子,创建一个只读用户和两个读写用户通用前提操作REVOKECREATEONSCHEMApublicFROMPUBLIC;REVOKEALLONDATABASEmydatabaseFROMPUBLIC;创建只读角色CREATEROLEreadonly;GRANTCONNECTONDATABASEmydatabaseTOreadonly;GRANTUSAGEONSCHEMAmys 查看详情

一文搞懂==equals和hashcode

...de(),在使用HashMap或HashSet的时候可能会出现什么情况?​一文搞懂​==和equals()的区别是什么?​先来看看 查看详情

一文搞懂python列表list的截取

〝古人学问遗无力,少壮功夫老始成〞一文搞懂python列表list的截取,列表作为python中最常用的数据类型,如果搞懂它,将会对你学习python有特别大的好处,如果这篇文章能给你带来一点帮助,希望给飞兔小哥哥一键三连,表示... 查看详情

一文搞懂springboot启动原理

SpringBoot为我们做的自动配置,确实方便快捷,但一直搞不明白它的内部启动原理,这次就来一步步解开SpringBoot的神秘面纱,让它不再神秘。@SpringBootApplicationpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.c... 查看详情

一文搞懂http请求报文结构

一文搞懂HTTP请求报文结构请求行(也有说是请求头)请求头部请求报文主要由四部分组成:请求行,请求头部,空行和请求数据请求行(也有说是请求头)是由3个字段组成的,请求方法字段(g... 查看详情

一文搞懂java线程中断

在之前的一文《如何"优雅"地终止一个线程》中详细说明了stop终止线程的坏处及如何优雅地终止线程,那么还有别的可以终止线程的方法吗?答案是肯定的,它就是我们今天要分享的——线程中断。下面的这断代码大家应该再熟... 查看详情

视频知识点(14)-一文搞懂x264编码库

目录前言正文1.下载源码2.windows平台编译3.疑难问题3.1报错:NoworkingCcompilerfound. 查看详情

javaweb一文搞懂response

@[Toc]1Response继承体系response和request一样2Response响应2.1响应行方法名方面类型方法作用setStatus(intsc)void设置响应状态码2.2响应头方法名方法类型方法作用setHeader(Stringname,Stringvalue)void设置响应头键值对2.3响应体方法名方法类型方法作... 查看详情

一文搞懂jsbridge的运行机制

我司的APP是一个典型的混合开发APP,内嵌的都是前端页面,前端页面要做到和原生的效果相似,就避免不了调用一些原生的方法,jsBridge就是js和原生通信的桥梁,本文不讲概念性的东西,而是通过分析一下我司项目中的jsBridge源... 查看详情

视频知识点(15)-一文搞懂openh264编码库

目录前言正文1.下载OpenH264源码2.Windows平台编译环境搭建2.1安装vs20192.2安装windowsSDK 查看详情

一文搞懂web端登录过程(代码片段)

一文搞懂web端登录过程无状态HTTP协议session和cookiecookie(存放在客户的浏览器上)session(存放在服务器端)session和cookie的区别token登录过程token验证在了解登陆过程的原理前,应该先弄清楚几个概念无状态HTTP... 查看详情

一文搞懂阿里云服务器部署mysql并整合springboot

查看详情

一文搞懂javascript垃圾回收机制

一文搞懂JavaScript垃圾回收机制(GC)堆和栈垃圾回收确定内存需要被回收的方法确定内存被回收后,需要用的垃圾回收算法在这之前首先应该搞明白堆和栈的知识堆和栈栈:JavaScript中的基本数据类型都是存在栈中... 查看详情

一文搞懂springboot定时任务

Introduction在springboot中自带了一个轻量级的调度系统。如果我们希望在特定的时间或者以特定的时间间隔完成某些任务,那么它完全能够满足需求,不需要再额外引入像Quartz这种略显沉重的调度框架。下面我们就来介绍springboot中@... 查看详情

一文搞懂canfd总线协议帧格式

...束5、CANFD的改进6、如何从传统的CAN升级到CANFD假期更新了一文搞懂CAN总线协议帧格式,CANFD总线协议怎能错过? 查看详情

一文搞懂canfd总线协议帧格式

...束5、CANFD的改进6、如何从传统的CAN升级到CANFD假期更新了一文搞懂CAN总线协议帧格式,CANFD总线协议怎能错过? 查看详情

一文搞懂java线程中断

下面的这断代码大家应该再熟悉不过了,线程休眠需要捕获或者抛出线程中断异常,也就是你在睡觉的时候突然有个人冲进来把你吵醒了。try{Thread.sleep(3000);}catch(InterruptedExceptione){e.printStackTrace();}此时线程被打断后,代码会继续... 查看详情