一个简便的三方密钥交换协议
【摘要】基于口令认证的三方密钥交换协议(3PAKE)是使通信双方在认证服务器的帮助下能相互进行认证并建立一个会话密钥。在本论文中,我们提出了一个通过增强口令而不需服务器中间加密的简单的基于口令认证的三方密钥交换协议。通过这种方式,每个客户端只共享一个值得信赖的服务器通用密码,任何两个客户端通过服务器的介入可以验证彼此并交换会话密钥。相比以前的协议,我们所提出的协议无需加密密码且更有效率、更方便。
【关键词】口令攻击;口令;第三方协议;认证;密钥交换
1.引言
密码验证协定(PAKE关键交换)协议,是指用户和服务器之间共享口令或口令的验证值,服务器借此对用户进行身份的认证,并协助用户完成会话密钥的生成。目的是通过各通信方的交互,建立共同的会话密钥,从而能够实现在不安全信道上的安全通信。设计一个安全的PAKE面临这样一个问题,由密码是从一个比较小的范围中选取的,这样的协议很容易受到字典攻击。Bellovin and Merritt[1]在此基础上,首次提出了两方的基于口令的密钥交换协议(2PAKE)解决了通信双方如何在不预先共享秘密的情况下协商会话密钥的问题,开辟了公钥密钥学的新方向。加密的关键是通讯双方共同协商一个共享会话密钥,然后使用该会话密钥来加密所传送的消息。自此,基于口令的认证方式成为使用最普遍也最方便的加密方式。[9-11][2-3]但是2PAKE协议也存在弊端,由于2PAKE使用的是“用户一服务器”模型,用户所需要记忆的口令数会随着与它通信的用户数的增加而增加,这限制了协议在实际中的应用。例如在大型通信环境中采用2PAKE 将导致“用户—用户”之间的密钥管理非常的复杂。为了解决这个问题,一些第三方密钥验证协议(3PAKE)[4-7]随即被提出。在一个3PAKE,每个用户只需要与一个可信的服务器(TS)共享一个简单口令,可信服务器认证通信双方并帮助持有不同口令的通信方生成会话密钥。1995年,Steiner等[1]开发出一种基于Diffie-Hellman(DH)密匙交换概念的3PAKE协议,与Bellovin和Merrit的协议相比,其交互轮数与验证元数目都有效的减少,系统的运算效率更高。之后,Ding和Horster[5]等。指出Steiner等的协议无法检测出在线猜测密码攻击,并提出了一种改进的方案来解决这个安全漏洞。Lin等在文献[6]证明Steiner等的协议无法抵御连续的恶意程序调用离线猜测密码攻击。为解决这个的缺陷,Lin等使用公共密钥加密技术来构建他们的补救措施,以提高密钥协议的安全性。然而,公共密钥技术无论是通信开销或是计算开销都很大。为了提高协议性能,文献[7]中,作者提出了不使用公钥加密的3PAKE协议,但也需要使用到一个密码作为验证密码。
在本文中,我们提出了一个简便的3PAKE[8]。与以前的3PAKE协议相比,我们的协议是更加高效、便捷的自协议且不需要加密密码。
2.预备知识
在本节中,提出了一种新的简便的3PAKE协议。接下来我们介绍一下论文中使用到的参数与符号。首先,系统选用两个大素数p,q并找到一个整数g,g 是属于GF(p)和GF(q)的原始元素。GF(p)是q阶循环加群GF(q)是q 阶循环乘群。为了阐明这个协议我们需要使用到一些公式与运算符,现将使用到的符号含义介绍如下:
p,q:表示两个大素数
g:表示一个属于GF(p)和GF(q)的原始元素
TS:表示可信的服务器
A,B:分别表示通信的发起方和应答方
:表示用户B(user A)和TS之间的共享口令
:表示用户B(user B)和TS之间的共享口令
h():表示单向的hash函数
IDA:表示A的网络ID
IDB:表示B的网络ID
||:表示级联运算
:表示按位异或运算
3.算法介绍
由于没有避免在线词典遭受攻击[7]机制,因此不能确保一个受信任的服务器的客户端是否是个有效的用户。为了抵抗这样的袭击,我们将为TS认证客户。我们的协议中,每一个客户分享一个human-memorable密码与可信赖的服务器(TS)。当两个客户想要建立一个共同的会话密钥,他们采取了彼此信任的服务器为鉴定。细节为下列步骤:
Setp1:用户选择一个随机数x并发送(IDA,gx)给B。
Setp2:用户也选择一个随机数y并发送(IDA,gx,IDB,gy)给TS。
Setp3:当收到(IDA,gx,IDB,gy)之后,由TS分别选择两个随机数字aandb,结合共享口令和,带入公式ZA=g(x+pwA)a,ZB=g(y+pwB)b,分别计算出(ZA,ZB)之后,然后由TS分别指派(ZA,ZB)给A,B。
Step4:当接收到TS传递过来的ZA。由A按照公式ga=g(x+pwA)a(x+pwA)-1推算出ga。User A按照公式KA=h(ga)计算结果,然后由A将计算出来的结果KA送到TS,由TS进行自我校验。
Step5:当接收到TS传递过来的ZB。由B按照公式gb=g(x+pwB)b(x+pwB)-1推算出gb。User A按照公式KB=h(gb)计算结果,然后由B将计算出来的结果KB送到TS,由TS进行自我校验。
Step6:一旦接收到KAandKB,TS按照=h(ga)和=h(gb)计算结果然后,分别检测KA与、KB与是否匹配。如果不匹配,TS将会中断会话并且认定当前用户不是合法用户。如果匹配,TS分别按照公式和计算出结果。之后,TS将AuthTA 和AuthTB分别送给A,B。
Step7:当A,B从TS接收到(AuthTA AuthTB),B按照计算结果并且检测与AuthTB是否匹配。如果匹配,B按照公式K=gxy和AuthBA=h2(gxy)计算结果,之后将AuthBA和AuthTA发送到A;否则,B终止协议。
Step8:当A接收到(AuthTAAuthBA),然后由A验证AuthTA是不是想要的目标信息。如果是,那么表明TS是一个可信赖的服务器,之后检测AuthBA 是不是需要的目标信息,如果是,表明B可信赖的。至此,A和B交换共享密钥K=gxy,该密钥用作之后的通信。然后,A传送AuthAB=h2(gxy)给B用作B 的自我校验。
Step9:一旦接收到AuthAB,B验证该值是不是匹配。如果匹配,K作为有效的会话密钥。
算法示意图如下图1,图2所示。
4.算法安全性分析
在本节中,我们将分析,我们提出的协议是安全的。在这里,主要讨论我们提出的3PAKE协议可以抵抗各种已知的攻击。
(1)在线猜测攻击
在我们的协议中,只有两个通信实体都是合法用户,TS才会继续执行协议。否则,协议终止。在第6步,如果验证信息是无效的,TS将会把该目标的传输密码视作字典攻击。所以该协议可以抵抗在线猜测攻击。
(2)离线猜测攻击
在一个离线猜测攻击中,攻击者攻击一个密码,并证实他的猜测。然而,在我们的协议中没有提供给离线用户任何有用的信息来帮助验证猜测口令的正确