基于国密算法的Kerberos身份认证协议改进与分析

2022-07-18 13:35:36黄丹丹刘佳欣
金陵科技学院学报 2022年2期
关键词:解密票据报文

黄丹丹,张 正,2,刘佳欣,3

(1.金陵科技学院网络安全学院,江苏 南京 211169;2.中国科学院信息工程研究所,北京 100093;3.东南大学网络空间安全学院,江苏 南京 211189)

Kerberos身份认证协议是一种基于票据工作原理的计算机网络协议,用于在不安全的网络通信环境中以安全的方式相互认证用户身份[1],也可保障数据的完整性和保密性。传统的Kerberos协议基于对称密码体制,文献[2-3]使用AES、ECC和RSA等算法代替DES来提高安全性,文献[4]提出一种基于混合密码体制的 Kerberos协议。这些Kerberos协议都存在几个固有缺陷,如弱口令安全问题、时间同步导致的重放攻击问题、密钥管理瓶颈问题、恶意程序攻击密钥分发中心(KDC)问题。

针对Kerberos协议的固有缺陷,国内外许多学者提出了如下改进方案:1)胡宇等基于混合加密体制和密钥协商协议提出了改进方案[5];陈锋等提出使用Diffie-Hellman密钥取代用户口令加密需要传输的数据[6]。这两个方案虽然有效解决了用户弱口令问题,但如果KDC服务器存在安全威胁,攻击者完全可以截取Kerberos认证的前两个报文,并通过第一个报文的信息对第二个报文进行解密,从而实现中间人攻击。2)张利华等基于一次一密协议(EOTP)与AES算法,提出改进的Kerberos协议[7]。这个方案的优点在于实现身份的双向认证且解决了时间同步的问题,缺点是增大了Kerberos认证的开销,效率低。Kadhim等使用虚拟密码代替Kerberos协议中的对称密码[8],也同样需要更多的计算资源和认证开销。胡志刚等提出了将视觉密码技术嵌入到Kerberos协议的方案[9],Du等使用随机数标识替代Kerberos协议中的时间戳[10]。这些方案都解决了弱口令和重放攻击带来的问题,但降低了Kerberos协议的灵活性。3)李继勇将Weil对与Kerberos协议结合,提高了Kerberos协议的安全性和可行性[11];田俊峰等提出“中介KDC服务器”的概念,并利用公钥密码体制对Kerberos协议进行改进[12]。这些方案虽然有效解决了原协议中某些固有的安全问题,但同时也产生了新的安全问题,如中间人攻击、系统资源负担增大、密钥管理困难等。4)邬春学等基于身份密钥协商技术改进了Kerberos协议[13],陈家琪等将无证书密钥协商协议应用到改进的Kerberos协议中[14],这两种方案都不需要公钥证书,因此提高了系统的运行效率,节省了开销,但客户端的计算量增加,对客户端的性能要求提高。5)王颖等为了解决中间人攻击和社会工程攻击的问题,提出了动态远程认证用户身份的安全方案[15];为了适应云计算环境中的身份认证,赵广强等提出了类似于零知识证明的匿名身份认证方案[16];范玉涛等给出基于动态口令的身份认证方案[17]。这些方案都降低了身份认证的成本,但不能抵御主动截取的攻击问题[18-19]。6)为了抵抗重放攻击,方俊实现了身份的双向认证[19],但该方案无法抵抗窃取信息的攻击;王滨等基于动态口令研究了一种改进的身份认证方案[20],并通过列出具体的攻击步骤证明该方案只能实现身份的单向认证;张佳等提出了基于生物特征识别和TOTP一次性口令算法的双因子身份认证[21],由于是基于动态口令,相比静态口令提高了系统的安全性,但在TOTP同步处理中,探测时间窗口大小的设置对系统的安全性和有效性具有较大影响,因此实用性不高;张兴兰等提出的基于单光子的两方量子身份认证协议[22],实现了双向认证以及多方认证,但不能有效抵抗中间人攻击和重放攻击。

本文主要对国密SM2、SM3和SM4算法进行研究与分析,提出了一种基于国密算法和动态密钥的改进的Kerberos身份认证协议。传统的Kerberos 协议基于对称密码体制,本文改进的Kerberos协议使用基于国密算法SM2、SM3、SM4的混合密码体制,不仅能实现双向安全认证,还可抵抗爆破攻击、假冒用户攻击和重放攻击等。

1 相关技术概述

1.1 国密算法

国产SM4算法是分组密码算法[23],SM4算法明文和密钥长度都为128 bit,加解密原理与DES算法类似,采用Feistel网络结构,安全性不亚于AES算法。SM4算法包括参数的产生、非线性变换、线性变换、合成置换、轮函数以及加解密算法,加解密和密钥扩展都是32轮迭代结构,解密结构与加密类似,唯一不同的是解密密钥使用的次序与加密时相反。SM4算法中S盒的输入输出都为8 bit,起到混淆作用。

SM2算法是基于椭圆曲线密码体制的公钥密码[23],我国密码管理局推荐使用有限域F256上曲线作为SM2标准曲线。为了实现SM2、SM9等公钥算法完全国产化,王小云院士带领团队自主研发了SM3哈希算法。SM3哈希算法将输入小于264bit的消息输出为256 bit固定长度的摘要[23],算法由填充、迭代、消息扩展和压缩函数组成,主要使用异或、模块、模块化加法、移位等操作。我国商用密码中常使用SM3算法生成数字签名、消息验证码MAC、报文摘要等以满足安全的要求。

1.2 Kerberos协议

传统Kerberos协议由KDC、应用端和客户端三部分组成。由于应用端和客户端都无法保证Kerberos认证的安全性,因此Kerberos身份认证协议的安全性依赖于KDC,即Kerberos服务器。KDC是整个Kerberos认证系统的核心,它存储了所有用户与服务器的身份信息和密钥,KDC包括认证服务器(authentication server,AS)、票据授权服务器(ticket-granting server,TGS)和数据库,功能是提供授权票据和分发会话密钥。

Kerberos协议初始认证集中在AS上进行,优点在于用户想要访问不同的服务器,若票据许可票据(ticket-granting ticket,TGT)没有过期,则只需凭借TGT访问TGS即可,不需要每次进行初始身份认证。KDC中存储着所有合法用户和服务器的身份信息和密钥。应用服务器(server,S)为合法用户提供资源和服务,客户端(client,C)为用户与AS提供消息交互。

Kerberos协议认证过程一般分为三个阶段。第一阶段,C向AS发出认证请求,认证通过后,AS向C发送访问TGS的票据和会话密钥。第二阶段,C向TGS发送票据和随机数,TGS向C返回S的票据和会话密钥。第三阶段,C用S的票据访问S,至此完成身份认证。

2 改进协议过程

2.1 基于动态密钥的改进的Kerberos协议

本节介绍对传统Kerberos进行改进的协议,用户与AS之间的共享密钥使用动态密钥,动态密钥由动态随机数、时间戳以及数据库中的用户口令通过SM3哈希算法生成。

2.1.1 认证第一阶段

改进的Kerberos协议在初始认证中新增了用来协商更新动态会话密钥的随机数。认证第一阶段具体过程如下。

1)初始认证。客户端C向KDC中的AS申请初始认证,AS给予初始认证响应。

① 初始认证请求(AS_BRE_REQ)。C向AS发送初始认证请求报文,使用会话密钥KC加密随机数N1,用来更新本地密钥Keynum的rndnum和数据库存储的用户口令pwd,与CID一起封装成报文发送给AS,报文为{KC[N1,rndnum,pwd],CID}。

② 初始认证响应(AS_BRE_REP)。AS根据请求报文,向C发送响应报文,响应报文内容为{KC[N1+1,N2]}。

2)TGT票据请求与响应。

① TGT票据请求(AS_REQ)。C向AS发送请求,获取TGT。该请求包括客户端的账号CID、IP地址CIP、票据授权服务器账号TGSID、时间戳timestamp1、生存周期lifetime1和随机数N3,请求报文内容为{KC[N2+1,CID,CIP,TGSID,timestamp1,lifetime1,N3]}。

② 响应TGT和会话密钥(AS_REP)。AS收到C的请求,AS通过KDC中存储的客户端密钥KC,生成TGS与C的会话密钥SKC,TGS,访问TGS的票据TC,TGS、时间戳timestamp2、生存周期lifetime2和随机数N3,其中TC,TGS=KTGS{CID,CIP,TGSID,lifetime2,N2,SKC,TGS}。其次,AS用密钥KC加密SKC,TGS、TC,TGS、timestamp2、随机数和TGSID,并将加密报文响应给C。响应报文内容为{KC[SKC,TGS,TC,TGS,TGSID,timestamp2,N2+1,N3,SKC,TGS]}。C收到响应后进行解密,若为合法用户,可正确解密获得访问TGS票据和会话密钥,进行下一阶段;若为非法用户,则无法解密。

2.1.2 认证第二阶段

在认证第二阶段,客户端C用第一阶段获取的TGT向TGS申请访问S的票据。

1)请求ST票据(TGS_REQ)。C向TGS发送请求访问服务器,该请求包括应用服务器SID、第一阶段获取的TGS票据TC,TGS、生存周期lifetime3、认证符号AC,TGS和随机数N4,其中AC,TGS只有C和TGS才有权解密。此外,由第一阶段可知只有TGS可解密TC,TGS。请求报文内容具体为{SID,TC,TGS,lifetime3,AC,TGS,N3+1,N4},其中AC,TGS=SKC,TGS{CID,CIP,timestamp2,lifetime2}。

TGS收到请求后,解密得到C与TGS会话密钥SKC,TGS,并验证报文有效期,检查IP地址是否相同。TGS进一步验证AC,TGS,其中AC,TGS包含时间戳和生存周期,可防止攻击者盗用客户身份。

2)响应ST票据(TGS_REP)。TGS验证身份后向C发送响应报文,报文中包含应用服务器SID、C与S的会话密钥SKC,S、C访问S的票据TC,S、时间戳timestamp5和随机数N5,并用SKC,TGS加密,响应报文内容为{SKC,TGS[SID,SKC,S,timestamp5,N4+1,N5,TC,S]},其中TC,S=KS{SID,CID,SKC,S,lifetime4,N5}。

2.1.3 认证第三阶段

在认证第三阶段,客户端C用第二阶段获取的票据访问相应服务。

1)请求S(AP_REQ)。C使用SKC,TGS解密响应报文,获取会话密钥SKC,S和票据TC,S。请求报文包括授权票据TC,S和认证符AC,S,其中AC,S用SKC,S加密,包含用户ID、IP、生存周期和随机数,具体为AC,S=SKC,S{CID,CIP,lifetime6,N6}。

2)S响应(AP_REP)。S收到请求报文验证C身份合法后,将时间戳timestamp5加1,与AC,S中随机数N6封装成响应报文,并用SKC,S加密发送给C,响应报文内容为{SKC,S[timestamp5+1,N6]}。

2.2 基于国密算法的改进协议的详细设计

本节利用国密算法的混合密码体制详细改进Kerberos协议。在协议过程中,使用国密SM4/SM2算法取代常见的AES/RSA算法,用SM3取代MD5、SHA-256等。本文改进的Kerberos身份认证协议分为注册过程和认证过程,总体结构如图1所示。认证过程包括用户与AS相互认证、用户与TGS通信以及用户与应用服务器通信3个模块。

图1 改进的Kerberos方案总体结构

2.2.1 客户端与AS相互认证

本模块中客户端A向AS发送认证请求AS_REQ,包括用KDC公钥Kkdc加密的时间戳timestamp、A的账号userA、随机数nonce和挑战值iv。AS收到后解密出时间戳,并与分离出的userA中的时间对比,记录userA的登录信息,与上次userA的登录信息对比得到生存周期。若A的请求服务合法,则AS向A响应AS_REP,包括用A的公钥Kclt、加密会话密钥Kclt-kdc、timestamp、nonce和iv,再用Kkdc加密userA和TGS会话密钥Kclt-kdc产生的TGT。A收到AS_REP响应后,解密出Kclt-kdc、timestamp和nonce,并保存TGT,过程如图2所示。

图2 客户端与AS认证过程

A无法解密TGT,主要是缓存下来与TGS通信。以上过程中Kkdc和Kclt加密都是基于国密SM2算法,此外,A的私钥A_pwd、KDC的私钥KDC_pwd都用SM3哈希算法运行后保存。

2.2.2 客户端与TGS通信

本模块中客户端A与TGS通信获取票据Ticket。首先,A生成TGS_REQ请求发送给TGS,包括缓存的TGT,会话密钥Kclt-kdc加密userA、时间戳timestamp和应用服务器ResourceB。其次,TGS收到请求后解密出TGT中的会话密钥,再用Kclt-kdc解密得到UserA和timestamp,并与数据库对比验证,保存ResourceB。若验证合法,则TGS向A响应TGS_REP,包括用Kclt-kdc加密的客户端与应用服务器会话密钥Kclt-srv以及Ticket。最后,A收到TGS_REP后用Kclt-kdc解密出Kclt-srv,并保存Ticket,在下一模块中A凭借Ticket访问应用服务器以获取资源,过程如图3所示。

图3 客户端与TGS通信过程

Ticket是由应用服务器的公钥Ksrv加密userA和Kclt-srv生成,A无法解密Ticket。以上过程中基于会话密钥Kclt-kdc的对称密码算法是SM4算法。

2.2.3 客户端与应用服务器通信

本模块中客户端A与应用服务器S通信进行密钥协商,完成身份认证过程。首先,A向S发送CS_REQ,包括用Kclt-srv加密的userA、timestamp和nonce,以及票据Ticket。其次,S收到后解密Ticket和数据enc_data,并与数据库对比验证完成动态密钥协商,再向A响应CS_REP,即用Kclt-srv加密的timestamp和nonce。最后,A收到CS_REP后使用Kclt-srv解密出timestamp和nonce,完成身份认证,过程如图4所示。

图4 客户端与S通信过程

以上过程S用私钥解密Ticket是基于SM2算法,客户端A与S会话传输使用的是SM4算法,因此改进的Kerberos协议使用了国密算法混合密码体制。

3 安全性分析

本节将改进的Kerberos协议与文献[18-22]的方案进行安全性比较和分析,如表1所示,其中√表示能够抵御此类攻击,×表示不能抵御此类攻击。由表1可知本文方案能够安全实现双向认证,而且可以抵抗5种攻击方式,因此安全性更高。

表1 改进的Kerberos协议与其他方案的安全性比较

1)爆破攻击。改进协议在KDC中存储了用户与应用服务器的关键注册信息,用SM4、SM2算法加密,攻击者只能获得加密后的注册信息,很难用爆破的方式获取明文;并且在身份认证前加了两个阶段用来协商随机数,更增加了密码穷举攻击的难度。此外,改进协议通过增加随机数长度即使用弱口令,也可在一定程度上提升身份认证的安全性。

2)假冒用户攻击。在协议中传输的报文数据经过SM4算法加密,密钥数据经过SM2算法公钥加密,注册信息中的口令都通过SM3哈希处理,攻击者在没有破解出明文之前,无法得到密钥。

3)重放攻击。传统Kerberos协议使用固定加密密钥;改进的协议使用动态密钥,增加了协议中报文的随机性,攻击者只能在当前一轮协议认证的第三阶段实施重放攻击。改进的协议通过序列号增加了重放报文的难度,提高了安全性。

4)双向认证。改进的协议实现了服务器与用户的双向认证,攻击者难以冒充KDC服务器或者应用服务器进行攻击。

5)中间人攻击。在改进的协议中,假设攻击者通过初始认证,此后用户仍向服务器发送随机数和时间戳,且用公钥加密认证信息,即使攻击者截获传输报文,也无法实施中间人攻击。

4 实现结果

4.1 改进协议的测试实现

本节测试环境为64位Win10系统、8 G内存、i5 8代内核、1.6 GHz个人计算机,编程环境为Python3.7,数据库使用MySql5.7。

改进的Kerberos协议测试包括KDC服务器端、用户端和应用服务器端。首先,在数据库中定义需要参加认证的用户和访问应用服务器,启动KDC服务器;然后在用户端登录并选择想访问的应用服务器,向AS服务器发送AS_REQ,AS服务器收到后响应AS_REP和TGT;用户再凭借TGT向TGS服务器发送TGS_REQ,TGS收到后响应TGS_REP并访问应用服务器的ST;最后用户凭借ST访问应用服务器资源。改进的Kerberos协议认证过程如图5所示。

(a)AS收到请求并返回响应

4.2 计算效率分析

下面对本文改进的Kerberos协议与其他方案的计算复杂度进行比较,这些方案都通过交互中间认证信息来完成身份认证过程。以下按照Kerberos协议认证过程从中间认证信息这一重要步骤的计算复杂度方面对文献[18-22]以及本文方案进行分析,其中文献[19-20]是基于传统Kerberos身份认证协议。各方案中间认证环节的输入数据量记为n,结果如表2所示。由表2可以看出,本文改进方案在计算哈希值、对比前后值和异或运算方面无计算量,中间认证信息的总计算复杂度不高于其他方案,且与传统Kerberos身份认证协议相比,本文方案计算复杂度更低,实现效率更高。

表2 各方案中间认证信息计算复杂度对比情况

5 结 语

通过分析国内外改进Kerberos身份认证协议的方法和不足之处,本文研究并实现了将基于国密算法的混合密码体制嵌入改进的Kerberos身份认证协议中。利用动态密钥协商技术,改进的Kerberos身份认证协议可实现双向认证,能够有效抵抗爆破攻击、假冒用户攻击、重放攻击、中间人攻击等。理论分析与仿真实验结果表明,改进的Kerberos协议具备更高的安全性和可用性,认证过程的计算效率比传统Kerberos身份认证协议更高。

猜你喜欢
解密票据报文
解密“热胀冷缩”
基于J1939 协议多包报文的时序研究及应用
汽车电器(2022年9期)2022-11-07 02:16:24
解密“一包三改”
少先队活动(2020年9期)2020-12-17 06:17:31
CTCS-2级报文数据管理需求分析和实现
炫词解密
浅析反驳类报文要点
中国外汇(2019年11期)2019-08-27 02:06:30
ATS与列车通信报文分析
解密“大调解”
中国卫生(2014年12期)2014-11-12 13:12:38