图解Kerberos认证工作原理

本文是我在看了这篇英文说明之后的总结

https://technet.microsoft.com/zh-cn/library/cc961976.aspx

是总结,不是翻译,所以是我看后按自己的理解写的,如有问题,请指正!

Kerberos在古希腊神话中是指:一只有三个头的狗。这条狗守护在地狱之门外,防止活人闯入。Kerberos协议以此命名,因为协议的重要组成部分也是三个:client, server, KDC(密钥分发中心). 要了解Kerberos协议的工作过程,先了解不含KDC的简单相互身份验证过程。

1. 简单的相互身份验证

A向B发送信息时,会附加一个Authenticator(认证码,该数据结构=身份信息+时间戳)来进行彼此的身份验证。开始验证之前,A和B已经有一个有且只有二人知晓的密钥。下面是工作流程:

a. A用密钥加密了【信息+Authenticator(身份信息+时间戳)】,将其发给B

b. B用密钥解密了A发来的Authenticator,并将其中包含的时间戳记录下来。B将这个时间戳与自己的当前时间进行比较,如果这个时间差大于某个值(windows下默认是5分钟),B认为信息不是A发来的,拒绝后续验证。如果这个时间差小于设定值,B要检查在过去5分钟内,是否存在含有更早时间戳的Authenticator,如果没有,B认为信息确实是A发来了。至此,完成了B对A的验证。

c. B用密钥加密Athenticator里的时间戳,然后将其发回给A,以证明自己确实是B.

d. A收到后,解密出时间戳,经过自己的对比,确认了对方确实是B. 至此,完成了A对B的验证

2. 引入session key和密钥分发中心KDC

实现简单相互身份验证有一个前提,即,A和B必须有一个有且只有二人知晓的密钥。在2中,我们要设计一个密钥分发机制来完善1的流程。这里引入key distribution center, KDC密钥分发中心。当A尝试向B发信息时,KDC会分别向A、B发放一个加密过的session key,这相当于1中那个有且只有AB双方知晓的密钥(注意,在传输过程中,session key要再包裹一层密钥进行加密,下面将具体说到)。

3. 引入secret key(密钥的加密)

session key在传输过程中需要加密。因此我们又引入了一个加密密钥,叫做secret key(或者叫long term key,在用户账号验证中,这个key是衍生自账号密码). 这个key是KDC和A(或B)之间有且只有双方知晓的一个密钥。KDC与A之间进行传输时,是由仅有A与KDC双方知晓的key加密。KDC与B之间进行传输时,是由仅有B与KDC双方知晓的key加密。

4. 引入session ticket(密钥的识别)

实际应用中,一个KDC对应着许许多多的客户端和服务端,每个客户端与服务端之间都有一个共享的session key(密钥)。为了区别这些session key,我们引入session ticket的概念,它是一种内嵌了session key和客户端身份信息(原文authorization data for the client)的数据结构。相当于session key与客户端的1对1表。

下面是具体工作过程:

a. 客户端向KDC提交客户端身份信息(这个传输过程使用客户端secretkey进行加密),要求与服务端进行相互身份验证。

b. KDC生成一个仅有客户端与服务端知晓的session key。

c. KDC将session key附加上客户端身份信息形成了session ticket,并用服务端secret key加密session ticke后传给服务端。服务端收到了KDC回复,使用服务端secret key解密,获得了有且只有客户端和服务端二者知晓的密钥session key。

d. KDC将【session key+服务端secret key加密后的session ticket】用客户端secret key加密后,传给客户端。客户端收到了KDC的回复,用客户端secret key解密出【session key+服务端secret key加密后的session ticket】。解密出的两部分内容分开地放在一个安全的缓存中(一块隔离的内存空间,而不是硬盘上)。当客户端再次向服务端发送信息时,客户端就可以直接向服务端发送【要发送的信息+服务端secret key加密后的session ticket+用session key加密的Authenticator(身份信息+时间戳)】

e. 服务端收到了来自客户端的以上凭据,先用服务端secret key将session ticket解密,取得内嵌在session ticket里的session key,用其将Authenticator解密,得到了客户端发送消息的时间戳。之后按照1中简单相互身份验证过程中的步骤b, c, d继续进行。

PS:

1. session ticket可以被重复使用。客户端从KDC获得session ticket后,会将其放在安全缓存中(一块隔离的内存空间,而不是硬盘上)。每当客户端想要访问指定服务端,客户端就出示相应的session ticket。

2. session ticket有失效期,通常是8小时,可以在相应的Kerberos策略中设置。

3. 服务端不需要存储session ticket。KDC只负责发送信息,不验证信息是否发放到正确的对象。因为即使发错了对象,对方没有secret key(有且只有KDC和正确对象知晓的密钥),是解不开信息的。循序渐进了解Kerberos认证工作原理

时间: 2024-12-29 05:10:49

图解Kerberos认证工作原理的相关文章

循序渐进了解Kerberos认证工作原理

循序渐进了解Kerberos协议的工作过程 本文是我在看了这篇英文说明之后的自我总结,还没有写完... https://technet.microsoft.com/zh-cn/library/cc961976.aspx 是总结,不是翻译,所以是我看后按自己的理解写的,如有问题,请指正! Kerberos这个单词是古希腊神话中一只有三个头的狗,这条狗守护在地狱之门外,防止活人闯入.Kerberos协议以此命名,因为协议的重要组成部分也是三个:client, server, KDC(密钥分发中心).

kerberos工作原理

最近调研了kerberos.看了网上学多关于kerberos的文章,我认为这篇文章比较好. http://blog.csdn.net/gracexu/article/details/1707032 这篇文章对麻省理工的论文进行翻译.该论文以四幕话剧的形式缓缓道来,有点像<研究之美>,通过两个人的头脑风暴讲解kerberos的原理. 一.使用kerberos进行验证的原因 1. 可靠 Hadoop 本身并没有认证功能和创建用户组功能,使用依靠外围的认证系统 高效 2. Kerberos使用对称钥

Linux可插拔认证模块(PAM)的配置文件、工作原理与流程

PAM的配置文件: 我们注意到,配置文件也放在了在应用接口层中,他与PAM API配合使用,从而达到了在应用中灵活插入所需鉴别模块的目的.他的作用主要是为应用选定具体的鉴别模块,模块间的组合以及规定模块的行为.下面是一个示例配置文件: # cat /etc/pam.d/system-auth: #%PAM-1.0 # This file is auto-generated. # User changes will be destroyed the next time authconfig is

Kerberos认证原理简介

1.1 What is Kerberos 1.1.1 简单介绍 Kerberos是一个用于鉴定身份(authentication)的协议, 它采取对称密钥加密(symmetric-key cryptography),这意味着密钥不会在网络上传输.在Kerberos中,未加密的密码(unencrypted password)不会在网络上传输,因此攻击者无法通过嗅探网络来偷取用户的密码. Kerberos利用对称加密和受信任的第三方(即KDC, key distribution center)来鉴别

LVS介绍及工作原理图解

很多人使用过LVS集群系统,但对于LVS集群,大多数人不清楚它到底是个什么东西.接下来我们就聊聊LVS及其工作原理. 一.lvs介绍 LVS的英文全名为"Linux Virtual Server",即Linux虚拟服务器,是一个虚拟的四层交换器集群系统,根据目标地址和目标端口实现用户请求转发,本身不产生流量,只做用户请求转发,目前是负载均衡性能最好的集群系统. 二.Lvs原理介绍 图示如下: 1.首先用户向负载均衡器调度器(Director Server)发起请求,负载均衡器将请求发往

图解 WebGL &amp; Three.js 工作原理

1.WebGL背后的工作原理是什么? 2.以Three.js为例,讲述框架在背后扮演什么样的角色? 我们为什么要了解原理? 我们假定你对WebGL已经有一定了解,或者用Three.js做过了一些东西,这个时候,你可能碰到了这样一些问题: 1.很多东西还是做不出来,甚至没有任何思路: 2.碰到bug无法解决,甚至没有方向: 3.性能出现问题,完全不知道如何去优化. 这个时候,我们需要了解更多. 1.什么是矩阵? 简单说来,矩阵用于坐标变换,如下图: 2.那它具体是怎么变换的呢,如下图: 3.举个实

图解WebGL&amp;Three.js工作原理

“哥,你又来啦?”“是啊,我随便逛逛.”“别介啊……给我20分钟,成不?”“5分钟吧,我很忙的.”“不行,20分钟,不然我真很难跟你讲清楚.”“好吧……”“行,那进来吧,咱好好聊聊” 一.我们讲什么? 我们讲两个东西:1.WebGL背后的工作原理是什么?2.以Three.js为例,讲述框架在背后扮演什么样的角色? 二.我们为什么要了解原理? 我们假定你对WebGL已经有一定了解,或者用Three.js做过了一些东西,这个时候,你可能碰到了这样一些问题:1.很多东西还是做不出来,甚至没有任何思路:

Kerberos认证协议中TGS服务器可以去掉吗?

Kerberos协议最早是由MIT提出的,是一种身份认证协议. 应用场景:在一个开放环境中,一个工作站用户想通过网络对分布在网络中的各种服务提出请求,那么希望服务器能够只对授权用户提供服务,并能够鉴别服务请求的种类. Kerberos协议的原理:Kerberos通过提供一个集中的授权服务器来负责用户对服务器的认证和服务器对用户的认证,而不是为每个服务器提供详细的认证协议. Kerberos名词: Client:用户. AS:认证服务器,可以通过查询数据库,判断用户的口令,从而为用户颁发票据授权票

appium自动化的工作原理(1)

用appium开发移动端自动化测试脚本这么长时间,还没有认证的了解下它的原理是什么,到底是如何实现的呢? 1.先看一个Appium加载的过程图解(来自:了解appium自动化的工作原理--https://blog.csdn.net/jffhy2017/article/details/69220719/) Appium的加载过程 1)调用Android adb完成基本的系统操作 2)向Android上部署bootstrap.jar 3)Bootstrap.jar Forward Android的端