- 1 -
基于动态口令体制的 Kerberos协议改进
黄建华,何希
华东理工大学,上海(200237)
摘 要: 本文介绍了 Kerberos认证协议的工作原理,分析了该协议的局限性。而后结合了
-Diffie Hellman算法生成动态验证口令实现动态身份认证的方法,改进了 Kerberos协议,克
服了 Kerberos的某些局限性。
关键词:Kerberos协议;动态口令; -Diffie Hellman算法;动态身份认证
中图分类号:
1. 引言
网络环境中的身份认证协议及系统,在网络安全中占据十分重要的位置,对于网络应用
的安全有着非常重要的作用。认证技术是信息安全理论与技术的一个重要方面。身份认证在
安全系统中的地位极其重要,它是安全系统的第一道门,是安全服务的基础。一旦身份认证
系统被攻破,那么系统的所有安全措施形同虚设。身份认证系统往往是黑客攻击的目标。
Kerberos是目前应用最广的网络身份认证协议,是一种应用于分布式网络环境,对用户
及网络连接进行认证的增强网络安全的服务。Kerberos协议实现了应用服务器和客户之间的
双向身份认证,相对于其他身份认证协议而言,它有着安全性高和使用性高的特点。但由于
对称加密的固有特点使得 Kerberos协议存在一定的局限性,本文中结合了Diffie Hellman− 算
法原理,提出了一种利用生成动态口令改进 Kerberos协议的方法。
2.Kerberos协议
Kerberos认证协议工作原理
Kerberos采用对称密钥加密算法来实现通过可信第三方 KDC的身份认证。因此,它有
三个通信参与方。它包含一个可信的第三方认证中心——密钥分发中心 KDC,其中包括两
类服务器:一类为认证服务器 AS;一类为票据许可服务器 TGS。认证服务器 AS只能有一
个,而票据许可服务器 TGS 可以有多个。还包括需要认证的双方。将发起认证服务的一方
称为用户 C,用户方需要访问的对象称为服务器 S。用户需要从 KDC 取得通信许可票据
(Ticket),并以此向服务器证明自己的身份。
Kerberos有一个保存所有用户密钥的数据库。对于个人用户,密钥是一个加密的口令,
对于需要鉴别的网络业务或希望使用这些业务的用户机,则要用 Kerberos 注册其密钥。由
于 Kerberos 知道每个实体的密钥,因此它能产生消息向一个实体认证另一个实体的身份,
它还为两个实体产生一个会话密钥用来加密双方间的通信消息,通信完毕销毁该会话密钥。
- 2 -
图 Kerberos协议认证原理
Kerberos协议认证原理见图 。假设 iID 为 i的身份标识, cAD 为用户地址,TS为时间
戳,Lifetime为生存期,
cK
E 为基于用户口令的散列码, ,a bK 为由 AS生成 a与 b间安全交换
报文共享密钥。Kerberos协议的通信过程如下:
1: c tgsC AS ID ID TS→c
, 2 2: cK c tgs tgsAS C E K ID TS Lifetime Tickettgs⎡ ⎤→ ⎣ ⎦d
, 2 2tgsK c tgs c c tgs
Tickettgs E K ID AD ID TS Lifetime⎡ ⎤= ⎣ ⎦
: v cC TGS ID Tickettgs Authenticator→e
, , 4
:
c tgsK c v v v
TGS C E K ID TS Ticket⎡ ⎤→ ⎣ ⎦f
, 4 4vv K c v c c v
Ticket E K ID AD ID TS Lifetime⎡ ⎤= ⎣ ⎦
, 3c tgsc K c c
Authenticator E ID AD TS= ⎡ ⎤⎣ ⎦
: v cC V Ticket Authenticator→g
[ ]
, 5
: 1
c vK
V C E TS→ +h
Kerberos的局限性
Kerberos 的设计是和 MIT 的环境结合的,采用了对称加密算法,且每次认证都会生成
一个新的会话密钥,有效防止了窃听攻击。即使某次泄露了会话密钥也只会泄露当次的通信
内容,并不会影响下一次。而且一旦发现会话密钥泄露,可以立即重新生成一个会话密钥,
以把损失降到最低。服务许可票据和鉴别码的使用,实现了用户和服务器的双向身份认证,
即防止了伪装用户对服务器的攻击,也防止了伪装服务器对用户的攻击。但要把它推广到现
有的分布式通信网络中使用还存在一些局限性 [ ]1,2,3 。
(1)用户联机时通过工作站键人口令获得与认证服务器共享的密钥,尽管使用 TGT减
少了联机次数,从而避免口令的经常使用,但毕竟有口令的键人,这是极不安全的。口令很
容易被窃听和截取,人侵者可以记录下联机会话,通过计算密钥分析记录下的会话进行口令
猜测攻击当用户选择的口令不好时,更不能有效地防止口令猜测攻击。况且用户联机时并未
对 AS认证,不能防止联机欺骗。
(2)Kerberos 认证协议中依靠认证者信息中的时间标记来抗重放攻击。它假定在一个
区域内的所有用户的时间同步,收到的时间标记在规定的时间范围内(一般时间范围为 5
分钟)就认为不是重发的。实际上,攻击者可以先把伪造的消息准备好,一旦得到认证者信
息马上发出去,这在 5分钟的时间范围内是难以检查出来的。另外,系统内各时钟不可能完
全同步。
(3)Kerberos是一种秘密密钥网络认证协议,它是以对称加密算法 DES(美国标准加
- 3 -
密算法)作为协议的基础,它的服务器保存所有用户和服务器的密钥,这就必然在密钥的交
换、存储和管理上存在安全隐患,同时不能提供非否认机制,也就是不提供数字签名。
(4)、用字典攻击对 Kerberos系统进行攻击是简单有效的:从 Kerberos协议的认证过
程来看,AS(又称 KDC)并不能验证用户的身份,而是基于发回用户的消息是用 cK 加密的,
只有知道 cK 的人才能够对之解密,而 cK 和用户的 Password有关,由于很多用户不重视对强
口令的选择,入侵者可以通过收集票据来对此解密,如果票据足够多,口令恢复是可能的。
3.Kerberos协议的改进方案
动态口令生成原理
动态口令(Dynamic Password),又称一次性口令(0TP-One Time Password),是相
对于传统的静态口令而说的。它一般由某种终端设备,根据动态口令生成算法产生的随动态
参数变化而变化的口令。动态口令是变化的密码,其变化来源于产生密码的运算因子是变化
的。动态口令的生成算法一般都采用双运算因子,一是用户身份的识别码,是固定不变的,
如用户的私有密钥;二是变动因子。
本文中将用户已注册成功的口令作为用户身份的识别码,并选定随机数作为变动因子,
使得每次认证的用户口令不同。同时结合Diffie Hellman− 算法原理,在认证用户和 AS间安
全交换一个密钥。
-Diffie Hellman算法
Diffie Hellman− 算法是第一个公开密钥算法,早在 1976 年就发明了 [ ]4 ,其安全性源于
在有限域上计算离散对数比计算指数更为困难。Diffie Hellman− 算法能够用作密钥分配(认
证双方 A和 B能用它产生秘密密钥)但是它不能用于加密或解密信息。
首先,A和 B协商一个大的素数 n和 g,g是模 n的本原元。这两个证书不必是秘密的,
故 A和 B可以通过即使是不安全的途径协商它们。它们可在一组用户中公用。协议如下:
A选取一个随机整数 x,并且发送给 B modxX g n= 。
B选取一个随机整数 y,并且发送给 A modyY g n= 。
A计算 modxd Y n= 。
B计算 modyd X n′ = 。
d 和 d ′都等于 modxyg n。即使线路上的窃听者也不可能计算出这个值;他们只知道 n、
g、 X 和Y 。除非他们计算离散对数,恢复 x、y,否则无济于事。因此 d是 A 和 B 独立计
算的秘密密钥。
图 Diffie-Hellman密钥交换过程
- 4 -
尽管Diffie Hellman− 密钥交换体制有许多优点,但是它在会话认证协议中有一个固有的
弱点,就是无法避免中间人攻击,不能用于加密或解密信息。为了解决中间人攻击问题,在
传送用Diffie Hellman− 算法生成的会话密钥过程中,发送方一般先用自己的私钥加密,又用
接收方的公钥加密,所以只有其认定的接收方才能破解第一层加密,然后接收方又必须使用
其认定的发送方的公钥才能完全解密,得到真实的会话密钥 [ ]6 。
改进方案
改进方案中,需要鉴别的网络业务或希望使用这些业务的用户机仍需事先通过用户名和口令
向 Kerberos注册,不同的是双方间不采用共有密钥,而是交换彼此的公钥,并协商一个大
的素数 n和 g,g是模 n的本原元。Kerberos将注册用户的相关信息加密后存储,用户将
Kerberos的公钥和口令散列值加密后存储在令牌中。
modyd X n′ ='d d⇔
mod
mod
x
xy
X g n
d g n
=
=
pubK
'd
x
,X d
c
d
e
f
g
h
pubasK
E
pubcK
E
,c tgsK
E
,c vK
E
图 改进后 Kerberos协议认证原理
Kerberos协议认证原理见图 。其中符号: pubK 表示公钥, priK 表示私钥,y为整数、
表示用户注册的口令的散列值。改进后,则上述 Kerberos 协议的通讯过程六个步骤变更如
下:
鉴别服务交换:获得票据许可票据
1 1: pubasK cC AS E M ID X TS→ ⎡ ⎤⎣ ⎦c
1 pricK c tgs
M E ID d ID⎡ ⎤= ⎣ ⎦
modxX g n= ,x为 C选取的一个随机整数
modxyd g n=
y:用户口令散列值
C 将 cID 、 tgsID 和本次的动态密码 d用自己的私钥加密成数据包 1M ,再同 cID 、x 和计
算得到得 X一并用 AS的公钥加密后发送给 AS。发送完毕后,客户端会将 X和 d备份,并
启动计时器,若超过一定时间 T后仍无收到 AS的应答数据包则丢弃 X和 d;或在 T范围
之内收到 AS应答数据包进行验证后丢弃该随机数 X和 d。
AS收到 C发过来的认证数据包后,先用自己的私钥对收到的消息进行解密,得到用用
户私钥加密的数据包 1M ,以及 cID 和 X。AS 根据得到的 cID ,在数据库中查找对应用户的
公钥 pubcK 。用 pubcK 解密 1M ,得到 cID 、 tgsID 和本次动态密码 d 。AS 查找出数据库中对应
的用户口令 y,计算 modyd X n′ = ,比较 d ′和 C 发送过来的 d。若不同,拒绝 C 的请求,
- 5 -
向 C发送拒绝数据包;若相同,接受 C的请求,进入第②步。
2 2: pubcK cAS C E M ID X TS→ ⎡ ⎤⎣ ⎦d
2 , 2dK c tgs tgs
M E K ID Lifetime Tickettgs⎡ ⎤= ⎣ ⎦
, 2 2pubtgsK c tgs c c tgs
Tickettgs E K ID AD ID TS Lifetime⎡ ⎤= ⎣ ⎦
AS 向 C 发送数据包,即将 CID 、 cAD 、 tgsID 、 2TS 、 2Lifetime 、 ,c tgsK 和 Tickettgs 用基
于 d的散列码来加密,而后连同 C 发送过来的 X 用 C 的公钥 pubcK 加密。其中 Tickettgs 用
TGS的公钥加密。
C在 T范围之内收到 AS应答数据包后,先用自己的私钥解密得到 2M 、 CID 和 X。将 X
和本身暂存的 X进行比较。而后取出 d解密 2M ,得到与 TGS的共享密钥。
2、票据许可服务交换:获得服务许可票据
: v cC TGS ID Tickettgs Authenticator→e
, 3c tgsc K c c tgs
Authenticator E ID AD N TS⎡ ⎤= ⎣ ⎦
tgsN :C生成的随机数
C向 TGS发送数据包,发送 vID 、Tickettgs和 cAuthenticator ,其中 cAuthenticator 由 cID 、
cAD 、 3TS 和随机数 tgsN 用 ,c tgsK 加密而得。C将 tgsN 备份,并启动计时器,若超过一定时间 T
后仍无收到 TGS的应答数据包则丢弃 tgsN ;或在 T范围之内收到 TGS应答数据包进行验证
后丢弃该随机数 tgsN 。
TGS 收到 C 发来的数据包后,先用私钥解密 Tickettgs 得到 ,c tgsK ,再用 ,c tgsK 解密
cAuthenticator 。
, , 4
:
c tgsK c v v tgs v
TGS C E K ID N TS Ticket⎡ ⎤→ ⎣ ⎦f
, 4 4pubvv K c v c c v
Ticket E K ID AD ID TS Lifetime⎡ ⎤= ⎣ ⎦
TGS向 C发送数据包,即将 ,c vK 、 vID 、 tgsN 、 4TS 和 vTicket 用 ,c tgsK 加密。其中 vTicket 用
V的公钥加密。
C在 T范围之内收到 TGS应答数据包后,用 ,c tgsK 解密得到 tgsN 和与 V的共享密钥。
客户/服务器鉴别交换:获得服务
: 'v cC V Ticket Authenticator→g
, 5
'
c vc K c c v
Authenticator E ID AD N TS= ⎡ ⎤⎣ ⎦
vN :C生成的随机数
C向 V发送数据包,发送 vTicket 和 'cAuthenticator ,其中 'cAuthenticator 由 cID 、 cAD 、 5TS
和随机数 vN 用 ,c vK 加密而得。C将 vN 备份,并启动计时器,若超过一定时间 T后仍无收到
V的应答数据包则丢弃 vN ;或在T范围之内收到V应答数据包进行验证后丢弃该随机数 vN 。
V收到 C发来的数据包后,先用私钥解密 vTicket 得到 ,c vK ,再用 ,c vK 解密 'cAuthenticator 。
, 5
: 1
c vK v
V C E N TS→ ⎡ + ⎤⎣ ⎦h
- 6 -
4. 新方案的性能分析
改进后的 Kerberos认证系统具有更高的安全性:
(1)、在通信过程中,不存在口令的键入和传输。用户口令保存在令牌中,主要真正
的用户才持有该令牌。在认证中,传输的是令牌将用户选的随机数 x 和保存的口令通过
Diffie Hellman− 算法计算得出的 X,避免了口令被窃听和截取的可能。
(2)、用户与认证服务器共享的密钥是计算得出的 X,该密钥中加有动态因子随机数,
具有一次性,大大降低了口令猜测的成功几率;同时由于加密和解密所需要的密钥 X 位数
很长,实际上不可能通过字典攻击的方法来破解加密信息。
(3)、在用户、KDC和提供服务的服务器三者之间的通信,都是通过公钥体制进行加
密解密的;Kerberos在关联数据库仅保存了用户名的注册口令,用户、TGS和服务的公钥,
即使 Kerberos 服务器被攻击,攻击者只能得到用户名和所有公钥,不能获得用户认证信息
或者系统服务。
(4)、对时间戳的要求降低了,由用户产生的一次性随机数来代替时间戳,以解决实
践同步问题,即协议不需要同步时钟,只是采用异步认证方式,再结合系统原有的生存期控
制,将有效地保证一定的时间段里只能存在唯一的合法消息,从而消除了重放的可能。
5. 结束语
Kerberos是目前应用最广的网络身份认证协议,以上改进方法是在 Kerberos的基础上结
合了Diffie Hellman− 算法原理产生一次性身份验证口令的思想,联网时不使用口令,提高了
安全性;在认证过程中,由用户对自己加盖的时间戳进行验证,解决了 Kerberos 的时间同
步的问题,并有效地防止了重放攻击。采用 RSA 公钥加密算法虽比单钥加密速度慢一些,
但大大降低了对 Kerberos 服务器安全依赖的绝对程度。尽管文中对身份认证服务的协议设
计做了一些研究探索工作,但对这一领域的研究和改进还需要不断的进行。
参考文献
[1] 郝文江,杨永川.对 Kerberos网络认证的一种改进技术[J].网络安全技术与应用,2007,(6):P24-P26.
[2] 汪楚娇,王拓,黄永宣,等.Kerberos认证安全优化及应用[J].应用与开发,2002,(11):P23-P26.
[3] 邓永江,程转流.一个改进的 Kerberos认证协议设计与分析[J].福建电脑,2006,(6):P134-P135.
[4] , . Directions in Cryptography [J].IEEE Transactions on Information Theory, 1976,
22(6):P644-P654.
[5] 汤卫东,李为民.利用 Diffie-Hellman算法改进 Kerberos协议[J].计算机工程与设计,(2):P343-P345.
[6] 刘坤,杨世平.对基于对称密码体制的 Kerberos协议改进[J].网络安全技术与应用.2005,(5):P6-P11.
[7] 徐远涛,黄继刚.身份认证系统认证协议的设计与分析[EB/OL].
[8] , of the Kerberos Authentication System [J].ACM SIGCOMM Computer
Commuication Review,1990 ,20(5):P119-P132.
- 7 -
Improvement of Kerberos Agreement based on Dynamic
Password System
Huang Jian-hua, He Xi
Department of Computer Science, East China University of Science and Technology, Shanghai,
(200237)
Abstract
The paper shows the operating theory of the Kerberos identification agreement, and the limitation of
the agreement is analyzed. It is combined with -Diffie Hellman Algorithm to cause the dynamic
authenticating password to achieve the dynamic authentication. It has improved the Kerberos
Agreement and overcome some limitations of the Kerberos.
Keywords: Kerberos Agreement; Dynamic Password; Diffie Hellman− Algorithm; Dynamic
Authentication