刘卫红,何丽
(广东农工商职业技术学院,广州510507)
跨域口令认证密钥交换协议(简称C2C-PAKE协议)主要用于不同域间用户协商和共享会话密钥,以确保跨域用户通信的保密性与完整性。2002年Byun等人首次提出了一种C2C-PAKE协议[1],随后Wang、Kim和Yoon依次指出前者协议存在的安全漏洞并给出了改进协议。随后Byun重新提出新的改进协议[2],然而不久后被Yoneyama等人[3]指出仍然存在不可检测在线字典攻击。究其原因,还是口令熵值较小,重复利用且易被遗忘,这些缺点都将成为攻击者的攻击方向,于是许多双因子或多因子认证协议被提出。目前使用较多的是基于口令、智能卡和生物特征的双因子或多因子协议(文献[5-9])。在这些多因子协议中,攻击者不能仅靠口令来破解协议,还需要获得智能卡信息或生物特征。智能卡由于不易携带和易丢失性,给用户带来不便甚至存在一定的安全隐患。生物特征包括面孔、指纹、虹膜等,它具有不易遗忘、不易丢失,不易伪造且随身携带等优点,因此基于生物特征和口令的双因子认证相对更安全和可行,目前有很多研究将其应用在用户与服务器间密钥协商协议中[9]。
本文将在文献[2,9]的基础上将生物特征因子应用于跨域口令认证密钥交换协议中。鉴于人们对智能手机的高依赖性,以及智能手机普遍支持采集指纹信息,所以本文基于指纹和智能手机协助改进跨域口令认证密钥交换协议。
盲签名是一种数字签名的方式,它除了满足一般的数字签名条件外,还必须满足两个条件:
(1)签名者不知道他所签署消息的具体内容;
(2)签名消息不可追踪。
盲签名的过程为:请求签名者先将消息加密(称为盲化),再把加密后的消息发送给签名者签名。签名者签名后将签名发送回请求签名者,请求签名者先将签名解密(称为脱盲),然后再把消息明文和解密的签名发送给验证者验证。
HKDF是一种可通过弱口令生成强安全密钥的协议,包括HKDF.prepare和HKDF.extract两种算法:
HKDF.prepare(pw,t,r)→ak,ac
HKDF.extract(pw,ac)→ak
其中,pw表示用户口令,t表示循环运算次数,r是一个随机字符串,HKDF.prepare算法以pw、t和r为输入,输出一个认证密钥ak和它的密文ac。HKDF.extract算法则使用pw对密文ac解密后重新得到密钥ak,如果口令不正确,此算法将一直循环运算没有输出。
本文用到的所有符号说明如下:
MPA、MPB分别表示用户A和用户B的智能手机;PCA、PCB分别表示用户A和用户B的电脑;SA、SB分别表示用户A和用户B所在域的服务器;A→B:M表示A给B发送消息M;IDi表示用户i的身份标识;pwi表示用户i的口令;ei表示用户i的指纹参数;pki表示用户i的私钥;aki表示用户i的认证密钥;aci表示用户i的认证密文;di为系统随机选取的随机数,ri为系统生成的随机字符串,ti为系统设置的运算次数,⊕表示异或操作;p,q表示大素数,且p=2q+1;g表示q阶群GF(p)的生成元;Zq是一个模q的整数环;是Zq的乘法群;表示在中随机选取元素x;gx表示gx=gx(modp);H1和H2表示安全的单向Hash函数;Ek(M)表示用密钥k加密消息M;Ticketi表示另一服务器传递给用户i所在域中服务器的密文。
一个跨域基于指纹和口令密钥交换协议被称为是安全的,如果它满足下列5个条件:
(1)语义安全性:对外部恶意攻击者来说,会话密钥和随机数不可分;
(2)密钥保密性:密钥具有前向安全性,且能抗重放攻击,恶意服务器攻击;
(3)用户口令、指纹信息和私钥安全;
(4)对抗不可检测在线字典攻击、离线字典攻击;
(5)服务器与用户以及用户与用户之间都能进行身份认证。
本文包括用户A的手机端MPA、电脑端PCA以及所在域的服务器SA和用户B的手机端MPB、电脑端PCB以及所在域的服务器SB六个参与方。协议包括注册和密钥协商两个阶段。
注:Step1与Step1'代表两个步骤无先后关系,其余类似。
注册阶段:用户在手机端输入自己的口令和指纹进行注册,注册完成后,将用户ID和认证密钥以及认证密钥的密文保存在服务器端,但手机端、电脑端和服务器端都不保存用户口令、指纹和私钥信息。
说明:用户A在手机端输入口令pwA和指纹参数eA进行计算,生成用户的私钥pkA
然后选定一个循环运算次数tA,使用私钥pkA和系统生成的随机字符串rA生成用户的认证密钥akA和认证密文acA最后用SA的公钥PSA加密akA,将IDA,EPSA
(akA),acA发送给SA,SA收到后使用自己的私钥解密EPSA(akA)得到akA,将IDA,akA和acA都保存起来。用户只需记住用户名和口令,手机端、电脑端和服务器都不存储用户的口令、指纹和私钥信息。
说明:生成过程与A同理,略。
密钥协商阶段:注册后,当用户有跨域用户密钥交换需求时,用户双方分别录入自己的口令和指纹数据,生成私钥从而解密服务器发送给用户的密文得到认证密钥,并将其用服务器公钥加密后发送给服务器。服务器解密后进行运算和对比,如果相符,则协助用户完成跨域密钥交换。
说明:用户A在电脑端PCA输入口令pwA,系统自动生成一个盲化因子dA,并计算盲化后的口令αA,然后将αA发送给手机端MPA。
说明:生成过程与A同理,略。
用户A在手机端MPA按下指纹生成指纹参数eA,对盲化口令αA进行签名,然后将βA发送给电脑端PCA。
说明:生成过程与A同理,略。
电脑端PCA对签名后的盲化口令进行去盲化,得到用户私钥pkA,然后给服务器SA发送IDA,IDB。
说明:生成过程与A同理,略。
服务器SA根据IDA查找到对应的认证密钥密文acA,并选取一个随机数NSA发送给电脑端PCA。
说明:生成过程与A同理,略。
电脑端PCA使用私钥pkA和HKDF函数算法对认证密钥密文acA进行解密,得到认证密钥akA
HKDF.extract(pkA,acA→akA)
然后PCA选取一个随机数NA,并随机选取,最后用服务器S的公钥P加密ak,N,N,gx,ID,IDASAASAAAB并将其发送给SA。
说明:生成过程与A同理,略。
服务器端SA用自己的私钥解密从PCA收到的消息后验证akA,NSA,如果不正确则拒绝。否则随机选取,用服务器SB的公钥PSB
加密计算TicketB并将其发送给SB。
服务器端SB用自己的私钥解密从PCB收到的消息后验证akB,NSB,如果不正确则拒绝。否则随机选取,用服务器SA的公钥PSA加密计算TicketA并将其发送给SA。
服务器端SA用自己的私钥解密TicketA后得到,计算gyr'r和RA=H2(NA+1)⊕H2(akA),然后用RA加密gyr'r和NA+1发送给PCA。
PCA收到后用自己的认证密钥akA和NA计算RA,然后解密ERA(gyrr',NA+1)得到gyrr',并验证NA是否正确,如果不正确则拒绝,否则计算sk=gyrr'x=gxyrr'作为用户A和用户B的会话密钥进行安全通信。
服务器端SB用自己的私钥解密TicketB后得到gxr,计算gxrr'和RB=H2(NB+1)⊕H2(akB),然后用RB加密gxrr'
和NB+1发送给PCB。
PCB收到后用自己的认证密钥akB和NB计算RB,然后解密ERB(gxrr',NB+1)得到gxrr',并验证NB是否正确,如果不正确则拒绝,否则计算sk=gxrr'y=gxyrr'作为用户B和用户A的会话密钥进行安全通信。
(1)语义安全性
因为各参与方在传递敏感信息时都用服务器公钥或用户认证密钥的转换密钥对消息进行了加密,因此,改进协议相对于外部敌手来说是语义安全的。
(2)密钥保密性
前向安全性:若E窃取了pwA和pwB并获取了用户的指纹信息eA和eB,由于他没有SA和SB的私钥,因而无法解密所截获的消息得到gx或gy,更无法计算出之前的会话密钥sk=gxyrr',从而保证了协议的前向安全性。
重放攻击:因为协议中的 x,y,r,r',dA,dB,NSA,NSB,NA,NB都是临时随机变量,所以E不能假冒任何一方发动重放攻击。
恶意服务器攻击:假定服务器不会伪冒自己域中用户进行主动攻击。假设SA是恶意服务器,由于他无法得到其他域中用户的认证密钥或其他服务器的私钥,因此无法解密Step7'中的ERB(gxrr',NB+1)或计算Step6中的TicketB,也就无法获取sk=gxyrr';同时服务器虽然保存了域内用户的认证密钥akA和密文acA,但由于服务器不保存任何用户的口令或指纹信息,也就无法计算用户在其他域中的认证密钥和密文,因此无法伪装用户在其他服务中进行跨域密钥交换,故不存在恶意服务器攻击。
(3)用户口令、指纹信息和私钥的安全性。
用户口令、指纹信息和私钥都不保存在手机端、电脑端和服务器端,所以不存在泄漏可能。假设在通信过程中,攻击者窃取用户A移动端与电脑端或电脑端与服务器端的任何一次会话消息,因为涉及到口令、指纹和私钥的消息都被Hash函数、离散对数或HKDF方法处理过,由于Hash函数的不可逆性和离散对数问题的困难性以及HKDF算法的安全性可知,攻击者不可能获取用户口令、指纹信息和私钥信息。
(4)抗不可检测在线字典攻击、抗离线字典攻击。
不可检测在线字典攻击:敌手选择一个作为A的候选口令,然后在电脑端随机选取dA计算将发送给手机端,接着在手机端输入一个指纹信息,并计算,并将其发送回手机端以计算,接着用这个和服务器发送的用户密文acA计算,最后用服务器SA的公钥加密并发送给服务器验证。显然和SA存储的认证密钥akA相符的概率几乎为零。因为指纹信息相同的概率几乎为零,再加上pkA=H1(pwA)eA与,由此通过HKDF.extract计算出来的与HHKDF.extract计算出来的akA显然不相等,SA马上能检测到敌手对A的攻击。
离线字典攻击:如果攻击者选择离线字典攻击,攻击者同样从口令空间中选取一个候选口令pw'A作为A的真实口令。此时攻击者不是在线与服务器之间进行交互验证口令的正确性,而是通过截获的真实会话中的任意一个消息来进行验证。因为涉及到口令、指纹和私钥的消息都被Hash函数、离散对数或HKDF方法处理过,由于Hash函数的不可逆性和离散对数问题的困难性以及HKDF算法的安全性可知攻击者从真实消息中验证口令正确的概率几乎为零。
(5)服务器与用户以及用户与用户间的身份认证。
用户注册阶段将自己的认证密钥ak和密文ac发送给服务器。密钥交换阶段,服务器使用ak、ac和随机选取的随机数NS验证用户身份,因为只有正确的用户才能通过HKDF.extract算法使用自己的私钥sk将认证密文ac转换为认证密钥ak。
然后服务器使用用户选取的随机数N和认证密钥ak计算H2(N+1)⊕H2(ak)加密随机数N并发送给用户,用户收到并解密后比对随机数N,从而实现用户对服务器的认证。服务器间的信息是用对方公钥加密而成,因此保证了只有对方才能解密信息,以此实现服务器间的身份认证。
本文的改进跨域基于指纹和口令密钥交换协议结合了口令认证的简单、指纹认证的安全便携,以及离散对数和公钥加密的高可靠等特点,具有语义安全性,密钥保密性、前向安全性,且能对抗重放攻击、恶意服务器攻击、离线字典攻击、不可检测在线字典攻击等常见攻击。即实现了服务器与用户的双向认证,又保证了传输数据的完整性和真实性,安全可靠地实现了跨域用户间的密钥协商与共享,为以后的跨域基于指纹和口令的密钥交换协议设计提供了参考。