Kerberos协议详解

Kerberos协议详解,第1张

最近工作中经常用到Kerberos认证,虽然一些软件已经实现了Kerberos认证,配置一下就能使用,但是我一直不是很清楚它的具体流程,下面通过分析它的协议(Kerberos V5)进一步加深对Kerberos认证的了解。

Kerberos是一种第三方认证协议,通过使用对称加密技术为客户端/服务器应用程序提供强身份验证。在希腊神话中Kerberos是守护地狱之门的一条三头神犬,而这三个头分别代表着协议的三个角色,如下图所示它们分别是:

Kerberos认证主要通过三个子协议来完成,它们分别为:

具体流程如下图所示:

下面以用户 pixis 去访问 CIFS 服务为例来详细讲解一下这3个交换的过程。

首先当用户在Client输入用户名和密码时,Client将用户密码的hash值作为加密密钥,对时间戳进行加密,同时附上明文的用户名发送给AS,KRB_AS_REQ包的格式如下所示:

AS收到KRB_AS_REQ后会通过用户名查找该用户对应密码的hash值,然后去解时间戳,还要对时间戳的有效性进行验证,时间戳不能和AS的时间相差太大,否则就说明两边时间不同步或者是一个重放的请求,AS会直接拒绝该请求,Kerberos认证培粗档强依赖于时钟同步,接下来还会看到它的用处。通过这一步AS就完成了对Client的验证以及时钟同步的验配乱证。

AS会创建一个连接Client和TGS的会话key(Client/TGS Session Key,绿色的钥匙)以及TGT(Ticket Granting Ticket),TGT中包含用户信息,时间戳,超时时间以及Client/TGS Session Key。AS将TGT用TGS密码的hash值加密(红锁),将Client/TGS Session Key用该用户(pixis)密码的hash值加密(蓝锁)。然后AS将这两部分放到KRB_AS_REP中返回给Client。

Client收到AS的响应消息以后,利用自身用户(pixis)密码的hash值对KRB_AS_REP中的上半部分进行解密,这样可以获取到Client/TGS Session Key,Client/TGS Session Key是票据授权服务交换阶段需要用到的密钥,票据授权服务交换不再使用用户(pixis)密码的hash值作为密钥。但由于TGT是使用TGS密码的hash值加密的,所以Client无法对其解密。那么这里就有个疑问了,既然Client无法处理TGT,那AS为什么要把它发给Client呢?它到底是干什么用的呢?这个问题接下来再回答。

Client使用Client/TGS Session Key对用户信息以及当前的时间戳进行加密生成Authenticator,然后凳斗再附上AS发送过来的TGT以及自己要申请访问的服务信息CIFS,生成KRB_TGS_REQ后发送给TGS。

TGS收到Client发送来的KRB_TGS_REQ后,其逻辑如下图所示:

通过上面TGS的处理逻辑可以看出,TGT实际上是给TGS用的,TGS需要对它进行解密并获取Client/TGS Session Key以及Client信息。有了Client/TGS Session Key,TGS才能用它解开KRB_TGS_REQ中的Authenticator信息,并对Client进行验证。也就是说在第一阶段AS认证完Client后本来应该把KRB_AS_REP拆成两部分,一部分Client/TGS Session Key发给Client,另一部分TGT发给TGS,但是AS没有这样做,而是把这两部分都发给了Client,这是为什么呢?首先网络传输有延时,AS没法保证TGS在收到KRB_TGS_REQ之前必须收到TGT,AS和TGS是两个独立的服务,除了AS里面存有TGS的密码外它们之间没有太多的联系,既然这样还不如让Client代为发送TGT。其次如果AS直接发送TGT给TGS,TGS势必要缓存TGT里面的信息,这就增加的TGS的复杂度。

验证通过后,TGS会创建一个连接Client和Server之间的会话key(Client/Server Session Key,紫色的钥匙)以及ST(Service Ticket),ST中包含用户信息,Service信息以及Client/Server Session Key。TGS将ST用Server密码的hash值加密(黄锁),将Client/Server Session Key用Client/TGS Session Key加密(绿锁)。然后TGS将这两部分放到KRB_TGS_REP中返回给Client。

有没有觉得KRB_TGS_REP和身份认证服务交换阶段的KRB_AS_REP很像,只不过Client/TGS Session Key变成了Client/Server Session Key,TGT变成了ST。

接下来的逻辑就跟票据授权服务交换阶段很像了。Client使用Client/Server Session Key对用户信息以及当前的时间戳进行加密生成Authenticator,然后再附上TGS发送过来的ST,生成KRB_AP_REQ后发送给Server。

Server端的处理逻辑也跟票据授权服务交换阶段的TGS服务很像,这里就不赘述了,现在我们看看Server端返回什么。为了防止Server是个假的Server,Client要求Server将Authenticator字段中的Timestamp用Client/Server Session Key加密后发回来,通过上图我们知道,Server要想得到Client/Server Session Key,必须要有密码来解开ST才行,只有真的Server才有密码解开ST,而假的Server是拿不到Client/Server Session Key的。

Client收到KRB_AP_REP后用Client/Server Session Key对其解密,得到Timestamp后然后跟之前发送的Timestamp对比,信息一致就说明对端是真的Server,这样就完成了Client和Server间的双向认证。

看完上面的流程后总感觉有些麻烦,2,3和4,5干的事情很像,有点多余。Client访问完AS后直接得到Client/Server Session Key和TGS,然后Client拿着这些直接访问Server不香吗?就像下图这样:

总觉得Client/TGS Session Key和TGT是多余的,后来才明白Kerberos是要实现单点登录的,按上图的方案,Client访问每个服务都要输入一次用户名密码,当Kerberos管理的服务很多时这是无法接收的。另外Client/TGS Session Key是有过期时间的,即使被破解了也会因为过期而不带来太大的风险,如果一直使用用户的密码就不好说了,因为用户密码的更新时间是不确定的,如果经常用它来加密一些数据放在公网上传输,时间久了是不安全的。从上面的流程我们可以看出,Kerberos认证依赖于只有用户自己和AS知道用户的密码,如果有第三方知道了用户的密码整个认证就失效了。所以最好是一次登录,接下来的交互都使用Client/TGS Session Key和TGT。就像下图所示的一样:

以上只是简要的概述了整个协议的流程,但实际的逻辑以及交互包的格式远比上面介绍的复杂,有兴趣的朋友可以去研究一下它的说明书rfc1510。

kerberos是由MIT开发的提供网络认证服务的系统。它可用来为网络上的各种server提供认证服务,使得口令不再是以明文方式在网络上传输,并且联接之间通禅含讯是加密的;它和PKI认证的原理不一样,PKI使用公钥体制(不贺御笑对称密拆乎码体制),kerberos基于私钥体制(对称密码体制)。

kerberos的设计目标不包括授权

Kerberos是一种计算机网络巧纳授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。

Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机 *** 作系统的认证,无需基于主机地址的信任,不要求网络上所有主基宽漏机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。

在以上情况下, Kerberos 作为一搏烂种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。

Kerberos又指麻省理工学院为这个协议开发的一套计算机网络安全系统。系统设计上采用客户端/服务器结构与DES加密技术,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证。可以用于防止窃听、防止replay攻击、保护数据完整性等场合,是一种应用对称密钥体制进行密钥管理的系统。Kerberos的扩展产品也使用公开密钥加密方法进行认证。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12431452.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存