Kerberos认证协议分析与研究

2017-11-20 08:45毕淏程晓荣
电脑知识与技术 2017年27期
关键词:身份认证

毕淏+程晓荣

摘要:在分布式网络的身份认证体系中,最具代表性的是基于对称密码体制的Kerberos认证模式,它引入了可信的第三方秘钥分配中心。该文先详细叙述了Kerberos协议的认证过程,分析其还存在的不足——对称密码体制安全性低、易受重放攻击。为此,尝试使用非对称秘钥以及随机数和秘钥链关联机制来增加秘钥强度,尽量减少秘钥被破解的可能性。同时,随机数也和时间戳共同使用判定消息是合法用户的重复请求还是非法用户的重放攻击,最后给出改进后认证过程。

关键词:Kerberos;身份认证;重放攻击;秘钥链

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2017)27-0037-02

网络的迅速发展使安全问题日益突出,认证机制在分布式网络环境中扮演越发重要的角色。简单来说,假如用户希望访问网络中的某些资源,而这些资源只允许授权用户的访问,就需要可靠的认证机制来证明访问者和被访问者的身份。良好的认证机制可以减少非法用户假冒合法用户对网络资源进行盗取和破坏。Kerberos是基于可信第三方的认证协议,密码设计基于Needham—Schroeder协议[1],它可以在客户访问服务器前提供较完善的保护措施和控制机制。

1 Kerberos身份认证

1.1 简介

Kerberos一词来源于希腊神话,意为“三个头的狗”,也是地狱之门的守护者[2]。其中三个主体分别是认证服务器、客户和应用服务器,用户在访问服务器前,需要先从第三方认证服务器中获取许可证,只有通过合法性认证的用户,才能依据票据去访问所需的服务和应用。

在认证过程前,基本名词如表1。

秘钥:网络安全的可靠性主要依靠秘钥强度和协议严谨性[3],Kerberos中存在三种秘钥,一种是长期秘钥,另两种是短期秘钥和长期秘钥的派生秘钥。Kerberos认为被长期秘钥加密的数据不能在网络中传输,因为一旦这些被长期秘钥加密的数据包被网络监听者截获,在理想条件下,只要时间充足,是可以通过计算获得该秘钥的。Kerberos使用短密匙或长期密匙的派生密匙进行加密,短期密匙有生命周期,即使被加密的数据包被黑客截获把密匙计算出来,密匙早已过期。而长期密匙的派生密匙往往是对长期密匙进行哈希运算。

1.2 认证过程

认证过程可分为三个阶段: AS(Authentication Service) Exchange、TGS(Ticket Granting Service)Exchange、CS(Client/Server )Exchange,原理如图2所示。

(1) AS Exchange:KDC中的Authentication Service实现对Client身份的确认,并颁发给该Client一个TGT(Ticket Granting Ticket)。具体过程如下:

Client→AS:KC{IDC||IDTGS}。

Client向KDC的AS发送请求, 为了确保仅限于自己和KDC知道,Client使用自己的KC对其进行加密(KDC可以通过数据库获得该KC进行解密)。请求包含Client的基本身份信息IDC以及TGS的基本信息IDTGS等。

AS→ Client:KC{SKC,TGS||IDTGS},TGT。

其中TGT=KTGS{SKC,TGS||IDC||IPC||ETTGT}。验证通过之后,AS将一份回复信息发送给Client。该信息主要包含两个部分:KC加密过的SKC,TGS和被KTGS加密的票据授权票据(TGT),其内容包括SKC,TGS、Client信息IDC、IPC以及到期时间ETTGT等。

(2) TGS Exchange:

Client→TGS:{TGT||Authenticator_1}。

TGT是前一步骤中AS发送给Client的,此时由Client转发给TGS。Authenticator_1=SKC,TGS{IDC||TS||IDS}用以证明TGT的拥有者的身份,所以它用SKC,TGS加密,其中包括Client的ID信息和时间戳TS,时间戳的作用是防止黑客截获数据包伪造合法用户,超过时间阈值的数据包无效。最终Client把要访问的应用服务器IDS、TGT和Authenticator_1一起加密发送给TGS。

TGS→Client:SKC,TGS{SKC,S},KS{Ticket}。

Ticket=KS{SKC,S||IDC||IPC||ETTicket}

TGS收到Client发来的信息,由于它没有SKC,TGS故不能对Authenticator_1进行解密,只能先用自己的秘钥KTGS对TGT解密,得到SKC,TGS、IDC、IPC、ETTGT,如果ETTicket在有效時间内,则继续进行。TGS使用得到的SKC,TGS对Authenticator_1解密,所得结果与TGT结果比对,IDC相同则通过验证。

此后,TGS会产生Client与应用服务器的会话密匙SKC,S和票据服务Ticket,它们分别被SKC,TGS与KS加密。票据服务主要内容包括会话秘钥SKC,S、用户ID、IP以及Ticket的有效期。TGS会将这两份加密信息同时发送给Client。

(3) CS Exchange:

Client→Sever:Ticket,Authenticator_2。

Authenticator_2=SKC,S{IDC||TS}。

Client收到后,先用SKC,TGS对第一个信息解密,得到SKC,S,再用SKC,S对用户信息和时间戳加密,得到Authenticator_2,连通从TGS收到的Ticket一并发送给应用服务器Server。endprint

Sever→ Client:SKC,S{TS+1}。

服务器收到Client的信息后,先用自己的KS对Ticket解密,得到SKC,S和相关的客户信息,检验Ticket是否在有效时间ETST内,有效则再用SKC,S对Authenticator_2解密,比较二者IDC是否一致,一致则通过验证。通过以上步骤,Server确认Ticket的持有者为合法客户端,二者会使用SKC,S加密通讯数据,保障数据安全性。

2 协议安全性分析

Kerberos协议虽有严格的认证过程,但有部分不足。

2.1 会话秘钥的安全

SKX,Y是短期会话秘钥,有一定的生命周期,因此它往往由设备根据某种信息或状态自动生成,所以其容易受到猜测或被破解。且该秘钥是由KDC内部的AS和TGS颁布,如果KDC本身安全性不够,秘钥也容易被获取。

2.2 时间同步问题和重放攻击

重放攻击是入侵者通过重放消息来冒充合法用户对被攻击者实施欺骗,往往出现在Client与应用服务器的交互工程中。攻击者截获并复制合法用户的请求信息再一次发送给应用服务器,服务器仍然认为这是合法的请求。Kerberos并不是毫无办法,它有时间戳项,但时间戳要求分布系统内部时钟高度同步,这种高度同步又十分困难。因此,在一定时间范围内,服务器接受相同的请求信息,这就给了非法用户可乘之机。综上,仅仅根据时间戳来防止重放攻击,还是有些薄弱。

2.3 Kerberos在对通信数据进行加密时,采用了对称秘钥体制,即加密和解密都是同一秘钥

这种加密方式简单易行但安全性不高,目前在安全要求较高的领域普遍采用非对称密码体制,即公钥和私钥。非对称秘钥克服了对称秘钥的缺点,通信之前双发不必再进行秘钥交换,避免了秘钥交换过程中的安全问题[4]。

3 Kerberos协议改进

3.1 改进原理

传统改进方式中,随机数和时间戳相结合是防止重放攻击的重要方法,超过时间戳范围的视为非法请求,不超过时间戳阈值但随机数相同也视为非法请求。在本文中,随机数也和秘钥链结合,使随机数除了在防重放攻击中发挥作用外,也加强SKX,Y的秘钥强度。当TGS和Server收到随机数后,其解密用的SKX,Y不再是其本身,而是其经过随机数次的哈希运算得到的秘钥。即便SKX,Y被猜出,无法得知随机数也不能解密。

增设公钥存储中心(Public Key)存储公钥,私钥由拥有者自己管理。当需要某个实体的公钥时,可以向公钥存储中心发出申请。由于公钥本身就对外公开,顾此过程无需加密。以公钥KPUB和私钥KPRI代替原密匙KX,原理如图3所示。

3.2 改进后访问步骤(此过程省略各实各部分请求公钥过程,随机数为i)

(1) AS Exchange:

Client→AS:KPUB.AS{IDC||IDTGS||i}。

Client请求了AS、TGS、Server的公钥,并用AS的公钥对IDC、IDTGS、i等进行加密。

AS→ Client:KPUB.C{SKC,TGS||IDTGS||TGT}

TGT = KPUB.TGS{SKC,TGS||IDC||IPC|| ETTGT||i}。

AS收到Client请求后用自己的私钥解密,并用Clinet的公钥加密Client与TGS的会话秘钥、TGT以及TGS的信息等。其中TGT和未改动之前的TGT相比增加了随机数选项,该随机数是对KPUB.AS{IDC||IDTGS||i}解密得到的。

(2) TGS Exchange:

Client→TGS:{TGT||Authenticator_1}

TGT=K PUB.TGS{SKC,TGS||IDC||IPC||ETTGT||i},

Authenticator_1=SKC,TGS{IDC||TS||IDS}

Client用自己私钥解密AS发来的信息得到了和TGS的通信秘钥,并用该会话秘钥经过i次哈希运算的结果SKC,TGS加密Authenticator_1,连同TGT一起发送给TGS。

TGS→ Client:SKC,TGS{SKC,S||IDS|| Ticket }

Ticket=KPUB,S{SKC,S||IDC||IPC||ETTicket||i}

TGS收到后,用自己公钥对TGT解密,得到SKC,TGS,验证是否在有效时间内。验证通过则取出随机数i对SKC,TGS进行i次哈希运算得解密秘钥SKC,TGS,然后解密Authenticator_1比对IDC认证Client合法性,比对成功则用Server的公钥加密SKC,S、IDC、IPC、ETTicket和随机数i等信息。最后回复Client 通过SKC,TGS加密的数据和用KPUB.S加密的票据Ticket。

(3) CS Exchange:

Client→Sever:Ticket,Authenticator_2。

Authenticator_2=SKC,S{IDC||TS}。

Client用SKC,TGS解密数据包得到Ticket和SKC,S,并对SKC,S进行i次哈希运算得到SKC,S,然后用其加密Client基本信息IDC、时间戳选项以及序号生成Authenticator_2包。最后将Authenticator_2和Ticket一同发给Server。

Sever→ Client:SKC,S{i+1}

Server收到数据后首先用自己的私钥KPRI,S对Ticket解密,得到SKC,S、IDC、IPC、ETST和随机数i,比对是否在有效时间内,成功则继续比对随机数i,i相同则认为重发攻击不做理会,不同则认为是合法请求。同理,Server将SKC,S做i次哈希运算得到SKC,S,用其解密Authenticator_2,得到IDC后和Ticket中的IDC对比,相同通过验证,回复i+1,之后双方可用SKC,S通信。

3.3 改进后安全性分析

采用非对称秘钥和秘钥链的主要目的是加强秘钥强度,其主要目的是使最终解密秘钥不出现在公网上[5]。非对称秘钥中没有私钥无法解密,本文采用的秘钥链和随机数结合的方法没有正确的随机数即使破解会话秘钥也无法破解数据包。当然,由于引入了非对称秘钥,认证完成后,Client和Server可以使用SKC,S加密通信数据,也可以使用对方的公钥。由于Client可能发送重复请求,为了使正常请求不被视为重放攻击,Client发送的重复请求信息必须不完全相同,为此引入随机数,有效期内的请求信息中的随机数不能相同。

4 总结

良好的认证机制可以提前扼杀非法入侵,是保护系统的第一道防线。文中分析了Kerberos的秘钥强度和防重放攻击的不足。非对称秘钥在Kerberos中的应用已经很成熟,不再赘述。随机数是防范重放攻击的常用方法,本文将随机数的作用进一步延伸,使随机数和秘钥链结合,进一步加强了秘钥强度,使真正会话秘钥不出现在网络中。如果随机数过大,秘钥链的哈希运算会比较复杂,可以使随机数对某个数取余,减少运算量。当然,Kerberos安全协议还有待进一步提高,例如时间同步和系统本身对主动攻击的抵抗能力[6]。

参考文献:

[1] 刘寿臣. Kerberos网络认证系统的关键技术分析[J]. 电脑知识与技术, 2016, 12(6):69-70.

[2] Jan De Clercq. Kerberos[M].Elsevier Inc.:2007.

[3] 陈灿, 李俊. Kerberos协议的形式化分析[J]. 微电子学与计算机, 2006, 23(6):49-51.

[4] 邵叶秦, 涂中群, 张小荣. Kerberos 5协议的安全分析[J]. 电脑知识与技术, 2010, 6(2X):1319-1320.

[5] 游新娥,胡小红. Kerberos身份认证协议分析与改进[J]. 计算机系统应用,2012,(04):216-219.

[6] 杨晓婕. Kerberos协议安全性分析[J]. 計算机安全, 2013(6):17-21.endprint

猜你喜欢
身份认证
云电子身份管理与认证系统中的关键技术优化改进