一类可基于口令、抗秘密数据泄露的认证和密钥交换方法

文档序号:7891010阅读:263来源:国知局
专利名称:一类可基于口令、抗秘密数据泄露的认证和密钥交换方法
技术领域
本发明属于密码协议,具体涉及一类可基于口令、抗秘密数据泄露的认证和密钥交换方法,基于口令的公钥加密和密签方法,知识绑定证明和抗临时秘密数据泄露的方法。

背景技术
系统参数(G′,G,g,q),其中G′是一个阶为N的有限群,G为G′中阶为q的子群,g为G的生成元,使得定义在G上的离散对数问题是难的。常用的G′,G的设置如下G′为p为一个素数,q整除(p-1),此时G′的阶为N=p-1;或者,G′为定义在一个有限域的椭圆曲线(即定义在一个有限域上的椭圆曲线上的点构成的群)。一般而言,中的元素操作用乘法表示,单位元为整数1,而椭圆曲线上的运算用加法表示,单位元为无穷远点。在本文档中,我们用乘法来表示G′中元素的操作。除非有特别说明,将G、G′中的单位元记为1G,G′/1G表示的是由G′减去单位元1G之后其它元素的集合,即G′中的非1G元素;记G/1G为G中的非1G元素。不失一般性,指数运算和不在指数上的乘法运算的结果是G′或G中的一个元素,指数上的加法和/或乘法运算是模q计算。定义函数DLZq→G,使得h=DL(w)=gw。w称为h的离散对数。我们要求给定随机计算出的h,没有多项式时间算法计算出h的离散对数w,这称为离散对数问题。计算Diffie-Hellman问题指的是给定随机的gx与gy没有多项式时间算法计算出gxy。对于熟悉本领域的人而言,离散对数问题及计算Diffie-Hellman问题也可以定义在由椭圆曲线或双线性对(bilineartity)定义的群上。
检查确认一个元素X∈G可有如下方法(1)计算并检查Xq=1;(2)如果N=2q+1,计算并检查X2≠1,或计算X的Legendre符号;(3)如果G′=G(比如G′,G为素数阶的椭圆曲线群),只需检查X∈G′;(4)计算并检查X∈G′且XN/q≠1从而保证X不在一个阶可整除N/q的小子群中;(5)若G′为定义在一个有限域Fq的椭圆曲线,检查X∈G′/1且X的x-坐标和y在坐标是Fq中的元素。一般而言,可将X∈G的检查嵌入到协议的其它运算之中。
1.常用的(包括很多商业应用的)基于口令的认证协议,比如IETF(InternetEngineering Task Force)的2246号RFC(Request For Comments)文档所规定的用于保护万维网(Wordl-Wide Web WW)安全的SSL/TLS认证协议,的运行环境和步骤如下 (1).客户“A”没有公钥,但客户“A”在服务器“B”处注册一个口令w;服务器“B”将w存放在用户“A”对应的数据库条目中,或将w加密存放在用户“A”对应的数据库条目中。服务器“B”具有公钥。
(2).客户“A”和服务器“B”运行一个单向认证密钥交换协议,其中仅服务器向客户进行身份认证,而客户并不进行身份认证。比如,客户“A”使用服务器的公钥加密一个随机数K;记产生的会话密钥为K。
(3).客户“A”利用K作为一个对称加密算法Enc的公钥加密口令w得到密文CC=EncK(w),并计算标签tA=MACK(sid,rA),其中MAC是一个消息认证码算法,sid是会话标示符,rA是用户“A”的角色标示;用户“A”将(C,tA)发送给服务器“B”;收到C后,服务器“B”利用K验证tA的正确性,解密C得到w,并与存储在服务器中用户“A”对应条目中的口令进行比对,若正确则认可客户“A”的身份,否则拒绝。
上述基于口令的用户认证存在如下不足 (a).因为用户的口令可能直接明文存放在服务器“B”的数据库中,因此易于泄露。
(b).若会话密钥K泄露,则可由离线攻击由C计算出w。即通过离线猜测w的可能值,并用会话密钥K进行加密与C比对,若相同则为正确的口令。
(c).密文C的泄露可以给攻击者进行基于时间(timing)的分析提供帮助,从而危害甚至泄露口令。
(d).用户“A”需额外发送tA=MACK(sid,rA),而不是绑定到C中。
(e).步骤(2)的会话密钥交换只是单向对服务器“B”进行身份认证,没有双向认证,即没有对客户“A”进行身份认证。不兼容客户“A”具有公钥的情形。
(e).服务器“B”不能够进行事先离线计算,以加速在线计算的效率。
2.常用的Diffie-Hellman密钥交换协议,比如IETF的2409号RFC文档所规定的用于保护互联网安全的IKE协议,以及IETF的4251号RFC文档所规定的用于保护分布式客户-服务器网络安全的SSH协议等,有如下不足 (1).使用数字签名进行身份认证,因此不能很好地保护用户的隐私; (2).而且,由于数字签名的验证和产生不能够充分地进行事先离线计算,在线计算的效率不够好; (3).不能够与不使用签名的密钥交换协议进行很好的兼容。
而常用的不使用签名进行身份认证的Diffie-Hellman密钥交换协议,比如美国国家标准化组织(ANSI)的X9.42-2001标准文档、国际标准化组织(ISO)的IS 15946-3标准文档、国际电气和电子工程师协会(IEEE)的1363-2000标准文档等所规定的MQV协议又有如下不足 (a).MQV协议的在线计算效率不够好。MQV的会话密钥生成方式不允许用户对会话密钥进行部分离线计算以提高在线计算的效率。具体来讲,用户“A”不能够在接受到用户“B”的DH-密钥成分Y之前进行事先离线部分计算会话密钥,用户“B”不能够在接受到用户“A”的DH-密钥成分X之前进行事先离线部分计算会话密钥。
(b).MQV协议不能够很好地保护用户的隐私。在MQV协议中,每个用户的会话密钥不能够仅仅由对方用户的DH-密钥成分的离散对数而计算出。即会话密钥以不可否认的方式绑定到到产生该会话密钥的两个用户。因此,MQV协议不能够很好地保护用户隐私。
(c).MQV协议不能够完全保证每个用户的DH-密钥成分不包含在小的子群中。
3.常用的Diffie-Hellman密钥交换协议,比如IETF的2409号RFC文档所规定的用于保护互联网安全的IKE协议,的一次执行期间所产生的临时秘密数据的泄露会提供给攻击者攻击其它协议运行的便利。即存放的临时秘密数据的泄露会危害正在运行的其它协议的安全性。
4.常用的Diffie-Hellman密钥交换协议的关于用户的DH-密钥成分为相应群中元素的检查不能够与事先离线计算很好地结合,或者不能够完全保证用户的DH-密钥成分不包含在小的子群中。
5.常用的Diffie-Hellman密钥交换协议只是分别针对某种特定的应用环境,扩展性能和系统性能差;

发明内容
本发明的目的在于提供一类高效、可基于口令且抗秘密数据泄露的密钥交换方法。本发明密钥交换方法具有如下特点 1.与常用的(包括很多商业应用的)基于口令的认证协议,比如IETF的2246号RFC文档所规定的SSL/TLS认证协议相比,有如下不同和特点 (1).服务器“B”不将客户“A”的口令w直接存放在用户“A”对应的数据库条目中;其存放的数据不会泄露客户“A”的口令,即所存放数据的泄露不会泄露客户的口令;而且所存放的数据直接用于会话密钥的生成,并可事先计算以加速计算效率。
(2).客户“A”的口令以一种隐性的方式参与会话密钥的生成过程,提供了一定程度的双向认证。
(3).在会话密钥生成后,客户“A”不将口令用会话密钥进行加密传送,即会话密钥生成后传输的信息可与用户“A”的口令没有关系;这个特点保证了即便会话密钥被泄露,攻击者也不能从泄露的会话密钥利用离线攻击求出用户的口令。而且,不将口令用会话密钥进行加密传送也可以很好地防范基于时间的分析。
(4).客户“A”可不需额外发送tA=MACK(sid,rA),而是将其绑定到协议发送的其它信息中,进一步提高计算和通讯复杂性。其中,K是生成的会话密钥。
2.与常用的Diffie-Hellman密钥交换协议,比如IETF的2409号RFC文档所规定的IKE协议,相比,有如下不同和特点 (1).不使用数字签名进行身份认证,因此能够很好地保护用户的隐私; (2).可以进行很好的事先离线计算,从而保证在线计算的高效率; (3).能够与不使用签名的密钥交换协议进行很好的兼容。
与常用的不使用签名进行身份认证的Diffie-Hellman密钥交换协议,比如美国国家标准化组织(ANSI)的X9.42-2001标准文档、国际标准化组织(ISO)的IS 15946-3标准文档、国际电气和电子工程师协会(IEEE)的1363-2000标准文档等所规定的MQV协议,相比,有如下不不同和特点 (a).在本发明协议(实现方法-4)中,每个用户只需在线做一个指数运算;而在MQV协议中,每个用户均需在线做1.5个指数运算;因此,发明协议具有更好的在线计算效率。
(b).发明协议所生成的会话密钥具有良好的可抵赖性,可以更好地保护用户的隐私;而在MQV协议中,所生成的会话密钥以不可否认的方式绑定到到产生该会话密钥的两个用户,因此不能够很好地保护用户的隐私。
(c).发明协议可以完全保证每个用户的DH-密钥成分不包含在小的子群中。
3.发明协议具有良好的抵御临时秘密数据泄露所造成的危害,所保存的关于协议某一次执行的的临时秘密数据的泄露不影响协议其它执行的安全,并且不给攻击者求解计算Diffie-Hellman问题提供有效的便利。
4.发明协议关于用户的DH-密钥成分为相应群中元素的检查能够与事先离线计算很好地结合,并能够完全保证用户的DH-密钥成分不包含在小的子群中。
5.发明协议具有优良的扩展性能和系统性能,可应用与各种不同的应用环境和场合。本发明方法的系统工作环境为 (1).系统参数(G′,G,g,q),其中G′是一个阶为N的有限群,G为G′中阶为q的子群,g为G的生成元,使得定义在G上的离散对数问题是难的。常用的G′,G的设置如下G′为p为一个素数,q整除(p-1),此时G′的阶为N=p-1;或者,G′为定义在一个有限域的椭圆曲线(即定义在一个有限域上的椭圆曲线上的点构成的群)。一般而言,中的元素操作用乘法表示,单位元为整数1,而椭圆曲线上的运算用加法表示,单位元为无穷远点。在本文档中,我们用乘法来表示G′中元素的操作。除非有特别说明,将G、G′中的单位元记为1G,G′/1G表示的是由G′减去单位元1G之后其它元素的集合,即G′中的非1G元素;记G/1G为G中的非1G元素。不失一般性,指数运算和不在指数上的乘法运算的结果是G′或G中的一个元素,指数上的加法和/或乘法运算是模q计算。定义函数DLZq→G,使得h=DL(w)=gw。w称为h的离散对数。我们要求给定随机计算出的h,没有多项式时间算法计算出h的离散对数w,这称为离散对数问题。计算Diffie-Hellman问题指的是给定随机的gx与gy,没有多项式时间算法计算出gxy。对于熟悉本领域的人而言,离散对数问题及计算Diffie-Hellman问题也可以定义在由椭圆曲线或双线性对(bilineartity)定义的群上。对于任一元素X∈G′,我们记X-1为X的相对于G′的逆元,即XX-1=1G;作为本领域的常识,X-ab的计算可有各种等价的计算方式,比如X-ab=(X-1)ab=(X-a)b=(Xa)-b=(X-b)a=(Xb)-a=…,Xtcb+tfy=Xt(cb+fy),等; 检查确认一个元素X∈G可有如下方法(1)计算并检查Xq=1;(2)如果N=2q+1,计算并检查X2≠1,或计算X的Legendre符号;(3)如果G′=G(比如G′,G为素数阶的椭圆曲线群),只需检查X∈G′;(4)计算并检查X∈G′且XN/q≠1从而保证X不在一个阶可整除N/q的小子群中;(5)若G′为定义在一个有限域Fq的椭圆曲线,检查X∈G′/1且X的x-坐标和y在坐标是Fq中的元素。一般而言,可将X∈G的检查嵌入到协议的其它运算之中。
(2).H是一个哈希函数;对于字符串或数值s1,s2,…sm,m>1,H(s1,s2,…sm)表示的是将s1,s2,…,sm,用合适编码表示,然后将所有的编码顺序连接串联起来,最后将串联后得到的串作为H的输入。不失一般性,我们设H的输出是Zq={0,1,2,…,q-1}中的元素,否则我们可以简单地取H的输出的一个属于Zq的子串或对H的输出进行模q计算。若s1,s2,…,sm是m个字符串,S1,S2,…Sn是n个集合,1≤n,m,{s1,s2,…,sm,S1,S2,…,Sn}表示的是{s1,s2,…,sm}∪S1∪S2∪…∪Sn,其中大括号内的元素顺序可以任意变化。H(s1,s2,…,sm,S1,S2,…,Sn)表示的是将s1,s2,…sm及S1∪S2∪…∪Sn-{s1,s2,…,sm}中的元素用合适编码表示,然后将所有的编码串顺序连接串联起来,最后将串联后得到的串作为H的输入。
(3).除非有特别说明,具有身份ID IA的用户“A”有一个公钥A=ga∈G,其中a由用户“A”在Zq={0,1,2,…,q-1}中随机选取。相应地,具有ID IB的用户“B”的公钥记为B=gb∈G,以此类推。其中IA为用户“A”的身份信息或用户名,IB为用户“B”的身份信息或用户名。对于任一元素x∈Zq,我们记-x为x的相对于Zq的负元,即x+(-x)=0modq。
不失一般性,公钥证书颁发机构在向用户颁发证书时,检查确认用户注册的公钥为G中的元素或为G/1G中元素。任何检查不通过,证书颁发机构拒绝颁发公钥证书。这样,每个用户只需检查对方用户的公钥证书即可确认对方的公钥为G或G/1G中的元素。
(4).协议基于Diffie-Hellman密钥交换协议。除非有特别说明,记X=gx为用户“A”的DH密钥成分,x为DH密钥成分X的离散对数,x由用户“A”从Zq={0,1,…,q-1}中随机选取。记Y=gy为用户“B”的DH密钥成分,y为DH密钥成分Y的离散对数,y由用户“B”从Zq={0,1,…,q-1}中随机选取。假设用户“A”为协议的发起者(初始者),用户“B”为协议的响应者。即用户“A”先发送X;在收到X后用户“B”再发送Y。一般而言,用户“B”需在发送Y之前检查X∈G′/1G或X∈G,“A”需在收到Y之后检查Y∈G′/1G或Y∈G。
(5).与协议执行相关的其它信息pubpub是除DH-密钥成分X=gx或X′,Y=gy之外的其它与协议执行相关的信息的一个子集或序列,可为空或含重复元素。这儿,其它与协议执行相关的信息包括用户即协议初始者与响应者的身份信息或用户名、协议初试者和响应者的角色标示、公钥及公钥证书信息、IP地址,协议版本,安全参数和密钥(长度)参数,协议的会话标示,时间戳,任意数值,以及除DH-密钥成分外的协议会话传输的其它信息。在不同的实现方法和应用中,pub的取值可不同。一般而言,pub包含协议初始者与响应者的公钥与身份或用户名信息,即 会话标示符sid一般由用户“A”和“B”发送的两个随机数RA和RB或DH-密钥成分以初始者-响应者的顺序串联构成,即sid=RA‖RB或sid=X‖Y,其中‖表示的是串联运算符。
用户的协议角色标示rA和rB一般用不同的整数,比如rA=0,rB=1;或者由用户“A”和“B”发送的随机数或DH-密钥成分的不同顺序来标示,比如rA=RA‖RB或rA=X‖Y,rB=RB‖RA或rB=Y‖X。
对于熟悉本领域的人而言,随机数RA和RB,以及可能的公钥证书的交换,即可在实现方法运行之前进行,也可包含在实现方法中用户各自发送的信息中。
(6).密钥导出函数KDFKDF(S,aux)是一个密钥导出函数,其中S是一个数值或数值的集合,aux是一个数值字符串集合或计数器。一般而言,KDF是一个哈希函数或哈希函数序列或直接输出其第一个输入,比如KDF(S,aux)=H(S,aux)(这种计算适合于哈希函数H的输出的长度大于等于规定的密钥的长度的情况,即真正的输出可能是H(S,aux)的一个子串,比如前缀,输出的子串的长度等于规定的密钥的长度),或KDF(S,aux)=H(S,1)H(S,2)…H(S,k)其中k≥1,aux是一个计数器(这种计算适合于哈希函数H的输出的长度小于规定的密钥的长度的情况),或KDF(S,aux)=S;或者KDF是一个以S为随机种子的伪随机函数,比如KDF(S,aux)=PRFS(aux)。会话密钥和认证密钥可由同一个密钥导出函数在相同的输入上导出;或者,会话密钥和认证密钥由同一个密钥导出函数在不同的输入上分别导出,比如会话密钥为H(S,aux)而认证密钥为H(aux,S);或者,会话密钥的导出函数与认证密钥的导出函数不同,而它们的输入相同或不同,比如会话密钥与认证密钥的导出使用不同的哈希函数或伪随机函数。
(7).标签认证函数FT(K,U),其中K为一个秘密数值或秘密数值的集合,U为一个数值字符串集合。标签认证函数FT(K,U)为任何满足如下性质的函数(1)不能够从FT(K,U)在K的长度的多项式时间内求出K,即相对于输入K,函数FT是单向的;(2)给定FT(K,U),不能够在K的长度的多项式时间内计算出FT(K,U′)或FT(K,U′)使得U≠U′。一般而言,FT是一个单向哈希函数,比如FT(K,U)=H(K,U);或者FT是一个消息认证码MAC函数,其中MAC的私钥由K,U导出而认证的信息是U的一个子集,比如FT(K,U)=MACK(U)。
我们假设协议运行送方有某种机制协商上述参数(包括安全参数和密钥长度参数)、函数、算法(包括对称和公钥加密算法、认证算法、签名算法、哈希函数等),用户角色标示及会话标示符号表示方法等,以及运行以下哪种实现方法,并达成一致。这种协商机制可随应用环境和系统的不同而不同。一般而言,pub包含协商所交互的信息的一个子集。对于熟悉本领域的而言,在申请方法中进行的对各种元素的检查确认默认是一次性的,即一旦确认正确(一般在该元素的首次计算时进行),则在后续的运行中不在检查。
实现方法根据应用环境和系统的不同,有如下实现方法 实现方法-1实现方法-1适用于客户“A”没有或不便于使用公钥,并且用户“B”不发送DH-密钥成分Y=gy的情形;但是客户“A”在用户“B”处注册了一个口令w。一般而言,用户“A”是一个客户,用户“B”是一个服务器。用户“B”管理一个用户数据库,并为每一个客户在数据库中创建一个条目;用户“B”支持以B=gb∈G′为公钥基于Diffie-Hellman或ElGamal的公钥加密算法,比如ANSI X9.63、ISO/IEC 15946-3及IEEEP1363a等标准化文档所规定的基于Diffle-Hellman的公钥加密算法ECIES,或者ISO18033-2标准化草案所规定的基于Diffle-Hellman的公钥加密算法PSEC;其中任一合法的公钥加密密文,记为C,是一个包含若干个数值的集合且均包括一个用于和公钥B生成Diffie-Hellman秘密的DH-密钥成分X=gx∈G;即X=gx用来在加密者和解密者之间生成一个共同的Diffie-Hellman秘密Btx=gtbx=Xtb∈G′,其中,t=1或

;一般而言,加密者和解密者真正使用的共同秘密是由{X,Btx=Xtb}利用密钥导出函数导出,即KDF(Btx,X)=KDF(Xtb,X)。B=gb∈G′既可以是固定的用户“B”的公钥,即随机选取的b∈Zq在不同的会话中保持不变。B=gb∈G′亦可由用户“B”在每一次的会话中独立地随机选取,即b在不同的会话中独立地在Zq中选取。
实现方法-1的核心和特征是构建两个函数KA和KB使得KA(x,w,B,pub)=KB(b,w,X′,pub)。用户“A”计算并发送DH-密钥成分X′=gxBβ∈G′;用户“A”计算KA=Btx∈G′,而用户“B”计算KB=X′tbB-tbβ∈G′或KB=(X′B-β)tb∈G′;其中,若B=gb∈G′是用户“B”的公钥则用户“B”可事先计算和存储B-tbβ∈G′和/或Btbβ∈G′;若B=gb∈G′不是用户“B”的公钥,而是由用户“B”在每一次的会话中独立地随机选取,则用户“B”先将B=gb∈G′发送给“A”。
具体方法为将基于Diffie-Hellman或ElGamal的公钥加密算法中的用于生成Diffie-Hellman秘密的DH-密钥成分X=gx∈G换为X′=gxBβ∈G′。如下计算基于Diffie-Hellman或ElGamal的公钥加密算法中的关于(X,B)的Diffie-Hellman秘密Btx=gtbx=Xtb=(X′B-β)tb=X′tbB-tbβ∈G′用户“A”计算KA=Btx∈G′,而用户“B”计算KB=X′tbB-tbβ∈G′(这种计算方式适合于用户“B”事先计算和存储B-tbβ∈G′的情形)或KB=(X′B-β)tb∈G′(这种计算方式适合于用户“B”事先计算和存储B-β∈G′的情形);其中,t=1或

,β为w或-w,且w和-w编码为Zq中的一个元素;或者,β为Hw(W)或-Hw(W),其中W为{w,IA,IB,B,pub}或{w,X′,IA,IB,B,pub}的一个包含w的子集,Hw是一个输出长度小于q的长度的哈希函数,Hw一般设置为哈希函数H输出的一个短的子串(比如H输出的8或16或32位的前缀)。加密者和解密者真正使用的共同秘密由{X′,KA=KB}导出,即KDF(KA,X′)=KDF(KB,X′),或者由{X′,KA=KB}与aux导出,aux是{IA,IB,sid,rA,rB,pub}的一个子集,可为空。记由{X′,KA=KB}或由{X′,KA=KB}与aux导出的秘密为(k1,k2);一般而言,k1是一个用于对称加密和解密的密钥,k2是一个MAC认证密钥。
用户“B”可事先计算B-1。若β的计算不涉及X′且若B=gb∈G′是用户“B”的公钥,用户“B”事先计算B-tbβ∈G′和/或Btbβ∈G′,并将B-tbβ和/或Btbβ存储在对应于用户“A”的数据库条目中;即在用户“A”向用户“B”注册口令w时,用户“B”计算β,B-tbβ∈G′和/或Btbβ∈G′,删除掉β并将B-tbβ和/或Btbβ存储于数据库中用户“A”所对应的条目中,而不是直接存放口令w或β;或者,用户“B”事先计算B-β,并将B-β安全存储在对应于用户“A”的数据库条目中(此时,B-β的泄露将泄露用户的口令,建议对B-β进行加密存储)。但是,如果用户“B”没有公钥,而是随机选取并发送B=gb∈G′给用户“A”,即b在不同的会话中独立地在Zq中选取,则用户“B”仍需将β存放在对应于用户“A”的数据库条目中(建议对β加密存储)。
为防止离线攻击,用户“A”在X′,Btx计算完毕后立即删除x,而w,β,Bβ或者马上删除或者存储在安全的位置。用户“A”的计算均可事先进行;特别地,若β=-w或β=-Hw(W),用户“A”可事先计算B-1一加速计算,此时-β正好为w或Hw(W)。若β=w或β=Hw(W),用户“B”可事先计算和存储B-1。
对于用户“B”具有公钥“B”的情形,一般而言,如果解密者,即用户“B”,检查确认X′∈G,则令t=1。如果解密者仅检查确认X′∈G′或X′∈G′/1G,而不能确认X′∈G,则令并检查确认X′tb≠Btbβ(适用于KB=X′tbB-tbβ∈G′的计算方式)或KB≠1G或(X′B-β)t≠1G。如果用户“B”没有公钥,而是随机选取并发送B=gb∈G′给用户“A”,即b在不同的会话中独立地在Zq中选取,则用户“B”仅检查确认X′∈G′或X′∈G′/1G,并令t=1。任何检查不通过,用户“B”中止协议执行,返回或不返回出错信息。用户“A”在发送密文的同时或发送密文之前,发送用户“A”的身份信息IA;经此修改后的基于Diffie-Hellman或ElGamal的公钥加密算法称为基于口令的Diffie-Hellman或ElGamal公钥加密算法。
客户“A”使用基于口令的Diffie-Hellman或ElGamal公钥加密算法加密一个随机数R得到密文C,并将密文C及身份信息IA发送给用户“B”;用户“B”若成功解密C得到R,则会话密钥和认证密钥由随机数R及{k1,k2,C,pub}的一个子集利用密钥导出函数导出,或直接将会话密钥和/或认证密钥设为R;记导出的认证密钥为R′。推荐的计算方式为会话密钥设为R,而认证密钥R′由R与k2导出。若用户“B”解密出错,则中止执行,返回或不返回出错信息;我们假设用户“A”只被允许出错有限次,以防止在线猜测攻击。
为了向用户“A”证明其知道R,用户“B”利用标签认证函数FT计算并发送tB=FT(R′,auxB),其中auxB是{IB,sid,rB,C,X′,pub}的一个子集,sid是会话标示符,rB是用户“B”的协议角色标示。用户“A”利用认证密钥R′检查tB正确性,若不正确,则中止协议执行,返回或不返回出错信息。
用户“A”采用如下方法向用户“B”证明其的确知道R用户“A”在发送密文C的同时或在收到tB并验证确认tB的正确性后,计算并向用户“B”发送tA=FT(R′,auxA),其中auxA是{IA,sid,rA,C,X′,pub}的一个子集且auxA≠auxB,rA是用户“A”的协议角色标示。如果对于R的基于口令的Diffie-Hellman或ElGamal公钥加密密文C中已经包含一个标签tE=MACk(E)或一般的tE=FT(k,E),其中E是密文C中的一个元素或密文C中除tE之外的其它元素的一个子集且一般而言k∈{k1,k2},则用户“A”可如下更高效地向用户“B”证明其知道R用户“A”不发送tA=FT(R′,auxA),而是将密文C中的tE更换为或一般地tA=FT(KR,{E,auxA}),其中auxA是{IA,sid,rA,pub}的一个子集且auxA≠auxB,KR是由(k,R′,aux)或(k,R,aux)导出或直接设为R′(推荐KR=R′),aux是{IA,IB,sid,rA,rB,E,pub}的一个子集,可为空;即KR=KDF({k,R′},aux)或KR=KDF({k,R},aux)或KR=R′;一般地,KR=H(k,R),或或或KR=R′;用户“B”检查tA正确性,若不正确,则中止协议执行,返回或不返回出错信息。
实现方法-2实现方法-2适用于客户“A”具有公钥A=ga,用户“B”有公钥B=gb但不发送DH-密钥成分Y=gy的情形. 如果用户“A”在用户“B”处注册了一个口令w,则实现方法-3的核心和特征是构建两个函数KA和KB使得KA(a,x,w,B,pub)=KB(b,w,A,X,pub)。具体方法为用户“A”计算并发送DH-密钥成分X′=gxBβ∈G′,其中,β为w或-w,且w和-w编码为Zq中的一个元素;或者,β为Hw(W)或-Hw(W),其中W为{w,IA,A,IB,B,pub}或{w,X′,IA,A,IB,B,pub}的一个包含w的子集,Hw是一个输出长度小于q的长度的哈希函数,一般取H输出的一个短的子串(比如H输出的8或16或32位的前缀)。用户“A”计算用户“B”计算(这种计算方式的优点是所需的在线指数运算少,实质上只需在线进行一个指数运算,其中B-β可事先计算;缺点是B-β的泄露会泄露用户的口令),或(这种计算方式适用于用户“B”事先计算

的情形,其中可事先计算;优点是

的泄露不会泄露用户的口令;推荐使用这种计算方式),或(这种计算方式适用于用户“B”事先计算B-bβ的情形),或其中,c=H(X′,pub)或H(X′,B,pub),e=1或H(pub),ti=1或

,1≤i≤2;c的计算依赖于X′,e的计算不依赖于X′;用户“A”的所有计算均可事先进行,并在{β,X′,KA}计算完毕后删除x,而w,β,Bβ或者马上删除或者存储在安全的位置;特别地,若β=-w或β=-Hw(W),用户“A”可事先计算B-1以加速计算,此时-β正好为w或Hw(W)(此时用户“B”可不事先计算B-1);若β=w或β=Hw(W),用户“B”可事先计算B-1。用户“B”可事先计算和存储B-1、若β的计算不涉及X′用户“B”还可事先计算和/或B-bβ∈G′;用户“B”将

或B-bβ或



或的一个子集存储在用户“A”对应的数据库条目中,必要时加密存放,而不是直接存放口令w或β,此时KB的计算为或若用户“B”不事先计算或B-bβ∈G′,用户“B”将

安全存储在用户“A”对应的数据库条目中,必要时对

进行加密存放,此时KB的计算为 ti,1≤i≤2,设置的关键为对于基于口令的实现,如果用户“B”检查确认X′∈G和A∈G,则令t1=t2=1。如果解密者仅检查确认A∈G,X′∈G′或X′∈G′/1G,而不能确认X′∈G,则令t1=1,用户“B”检查确认(适用于的计算方式),或(适用于的计算方式,推荐这种检查方式)或/和或(适用于的计算方式),或(适用于的计算方式),或(适用于以上各种KB计算方式),或任何检查不通过,用户“B”则中止协议运行,返回或不返回出错信息。
会话密钥和认证密钥有两种产生方式 (1).会话密钥和认证密钥直接由KA=KB及{c,e,X′,pub}的某个子集利用密钥导出函数导出,此时用户“B”检查X′∈G。
(2).或者,将基于Diffie-Hellman或ElGamal的公钥加密算法中的DH-密钥成分X=gx换为X′=gxBβ∈G′。加密者和解密者真正使用的共同Diffile-Hellman秘密由{X′,KA=KB}导出,即KDF(KA,X′)=KDF(KB,X′),或者由{X′,KA=KB}与aux导出,aux是{IA,IB,sid,rA,rB,pub}的一个子集,可为空。记由{X′,KA=KB}或由{X′,KA=KB}与aux导出的秘密为(k1,k2);一般而言,k1是一个用于对称加密和解密的密钥,k2是一个MAC认证密钥。用户“A”在发送密文C的同时或发送密文之前,发送用户“A”的公钥证书或身份信息IA,从而得到一个具有发送者身份认证功能的基于口令的密签算法。用得到的基于口令的密签算法加密一个随机数R;记对随机数R的密签为C,密签C为若干个数值的集合。若用户“B”解密出错,则中止执行,返回或不返回出错信息。会话密钥和认证密钥由随机数R及{k1,k2,C,pub}的一个子集利用密钥导出函数导出,或直接将会话密钥和/或认证密钥设为R;记导出的认证密钥为R′。我们假设用户“A”只被允许出错有限次,以防止在线猜测攻击。
如果用户“A”在用户“B”处没有注册口令,则用户“A”计算并发送DH-密钥成分X=gx∈G;此时,实现方法-2的核心和特征是构建两个函数KA和KB使得KA(a,x,B,pub)=KB(b,A,X,pub)。具体方法为用户“A”计算用户“B”计算其中,c=H(X,pub)或H(X,B,pub),e=1或H(pub),ti=1或

,1≤i≤2;c的计算依赖于X,e的计算不依赖于X。用户“A”的所有计算均可事先进行;用户“B”可事先计算会话密钥和认证密钥有两种产生方式 (1).会话密钥和认证密钥直接由KA=KB及{c,e,X,pub}的某个子集利用密钥导出函数导出,此时用户“B”检查X′∈G。
(2).或者,将基于Diffie-Hellman或ElGamal的公钥加密算法中的加密者和解密者真正使用的共同Diffile-Hellman秘密由{X,KA=KB}导出,即KDF(KA,X)=KDF(KB,X),或者由{X,KA=KB}与aux导出,aux是{IA,KB,sid,rA,rB,pub}的一个子集,可为空。记由{X,KA=KB}或由{X,KA=KB}与aux导出的秘密为(k1,k2);一般而言,k1是一个用于对称加密和解密的密钥,k2是一个MAC认证密钥。用户“A”在发送密文的同时或发送密文之前,发送用户“A”的公钥证书或身份信息IA,从而得到一个具有发送者身份认证功能的基于口令的密签算法。用得到的基于口令的密签算法加密一个随机数R;记对随机数R的密签为C,密签C为若干个数值的集合。若用户“B”解密出错,则中止执行,返回或不返回出错信息。会话密钥和认证密钥由随机数R及{k1,k2,C,pub}的一个子集利用密钥导出函数导出,或直接将会话密钥和/或认证密钥设为R;记导出的认证密钥为R′。
ti,1≤i≤2,设置的关键为对于非基于口令的实现,如果用户“B”检查确认X∈G和A∈G,则令t1=t2=1;如果解密者仅检查确认A∈G,X∈G′或X∈G′/1G,而不能确认X∈G,则令t1=1,用户“B”检查确认或任何检查不通过,用户“B”则中止协议运行,返回或不返回出错信息。
记导出的认证密钥为R′,为了向用户“A”证明其知道R′,用户“B”利用标签认证函数FT计算并发送tB=FT(R′,auxB);其中对于基于口令的实现auxB是{IB,sid,rB,X′,pub}的一个子集,对于非基于口令的实现auxB是{IB,sid,rB,X,pub}的一个子集,sid是会话标示符,rB是用户“B”的协议角色标示;用户“A”利用认证密钥R′检查tB正确性,若不正确,则中止协议执行,返回或不返回出错信息; 用户“A”采用如下方法向用户“B”证明其的确知道R′用户“A”在发送X′或X的同时或在收到tB并验证tB的正确性后,计算并向用户“B”发送tA=FT(R′,auxA),其中auxA是{IA,sid,rA,X′,pub}或{IA,sid,rA,X,pub}的一个子集且auxA≠auxB,rA是用户“A”的协议角色标示。如果认证密钥是由密签的随机数R导出的,且密签C中已经包含一个标签tE=MACk(E)或一般的tE=FT(k,E),其中E是C中的一个元素或C中除tE之外的其它元素的一个子集,则用户“A”可如下更高效地向用户“B”证明其知道R′用户“A”不发送tA=FT(R′,auxA),而是将密签C中的tE更换为或一般地tA=FT(KR,{E,auxA}),其中auxA是{IA,sid,rA,X′,pub}或{IA,sid,rA,X,pub}的一个子集且auxA≠auxB;KR是由(k,R′,aux)或(k,R,aux)导出或直接设为R′,其中,aux是{IA,IB,sid,rA,rB,X′,pub}或{IA,IB,sid,rA,rB,X,pub}的一个子集,可为空;即KR=KDF({k,R′},aux)或KR=KDF({k,R},aux)或KR=R′;一般地,KR=H(k,R),或或或KR=R′,其中KR的长度取为与k相同;用户“B”检查tA正确性,若不正确,则中止协议执行,返回或不返回出错信息; 实现方法-3实现方法-3适用于客户“A”没有或不便于使用公钥的情形,但是用户“A”仍发送DH-密钥成分X=gx,且用户“B”有公钥B=gb并发送DH-密钥成分Y=gy的情形。
实现方法-3的核心和特征是构建两个函数KA和KB使得KA(x,B,Y,pub)=KB(b,y,X,pub);具体方法为用户“A”计算用户“B”计算其中,c=H(X,pub)或H(X,B,pub),f=H(pub,X,Y)或f=H(pub,B,X,Y)或H(c,Y),ti=1或

,1≤i≤2;注意c的计算依赖于X但不依赖Y,f的计算既依赖于X亦依赖于Y;用户“A”可事先计算
ti,1≤i≤2,设置的关键为(1).如果用户“B”检查确认X∈G,则令t1=t2=1。(2).若用户“B”仅检查确认X∈G′或X∈G′/1G而不能确认X∈G,若y可能会泄露(或用户“B”担心y可能会泄露)),则令用户“B”检查确认若y不会泄露(即足够安全,或用户“B”确认y不会泄露),则同(1)t1,t2仍可为1。任何检查不通过,则中止协议运行,返回或不返回出错信息。
利用密钥导出函数由KA=KB及{f,c,X,Y,pub}的某个子集导出会话密钥和认证密钥;记导出的认证密钥为R′,为了向用户“A”证明其知道R′,用户“B”利用标签认证函数FT计算并发送tB=FT(R′,auxB),其中auxB是{IB,sid,rB,X,Y,pub}的一个子集,sid是会话标示符,rB是用户“B”的协议角色标示。用户“A”利用认证密钥R′检查tB正确性,若不正确,则中止协议执行,返回或不返回出错信息。为了向用户“B”证明其的确知道R′,用户“A”在收到tB并验证确认tB的正确性后,计算并向用户“B”发送tA=FT(R′,auxA),其中auxA是{IA,sid,rA,X,Y,pub}的一个子集且auxA≠auxB,rA是用户“A”的协议角色标示;用户“B”利用认证密钥R′检查tA正确性,若不正确,则中止协议执行,返回或不返回出错信息。
在具体实施中,建议实现方法-3与权利要求6中变体(1)结合实施。
实现方法-4实现方法-4适用于客户“A”有离散对数公钥A=ga并发送DH-密钥成分X=gx,且用户“B”亦有离散对数公钥B=gb并发送DH-密钥成分Y=gy的情形。
实现方法-4的核心和特征是构建两个函数KA和KB使得KA(a,x,B,Y,pub)=KB(b,y,A,X,pub)。具体方法为用户“A”计算用户“B”计算其中,c=H(X,pub)或H(X,B,pub),d=H(pub,Y)或H(pub,A,Y)e=0或1或H(pub),f=H(pub,X,Y)或H(c,d),ti=1或

,1≤i≤4。c、d、e、f设置的关键之处为c的计算依赖于X但不依赖Y,d的计算依赖与Y但不依赖X,e的计算既不依赖X亦不依赖Y,f的计算依赖于(X,Y)。用户“A”可事先计算用户“B”可事先计算 ti,1≤i≤4,设置的关键为(1).若用户“A”检查确认B∈G,Y∈G,用户“B”检查确认A∈G,X∈G,则令t1=t2=t3=t4=1;(2).若用户“A”仅检查确认B∈G,X∈G′或X∈G′/1G,而不能确认X∈G,用户“B”仅检查确认A∈G,Y∈G′或Y∈G′/1G,而不能确认Y∈G,且用户“A”担心x和/或用户“B”担心y可能会泄露,则令t1=1,用户“B”检查确认或用户“A”检查确认或若x,y均不会泄露,则仍同(1)可设t1=t2=t3=t4=1。任何检查不通过,则中止协议运行,返回或不返回出错信息。
利用密钥导出函数由KA=KB及{f,c,d,e,X,Y,pub}的某个子集导出会话密钥和认证密钥;一般而言,采用如下方法产生会话密钥k1和认证密钥k2,其中HK是一个哈希函数(1).(k1,k2)←HK(KA,f,1)HK(KA,f,2)…HK(KA,f,i)=HK(KB,f,1)HK(KB,f,2)…HK(KB,f,i),其中i≥1由一个计数器来实现,i的取值依赖于(k1,k2)的长度,即直到HK(KA,f,1)HK(KA,f,2)…HK(KA,f,i)的长度大于等于(k1,k2)的长度。设(k1,k2)的长度为l,我们可取HK(KA,f,1)HK(KA,f,2)…HK(KA,f,i)的长度为l的前缀或后缀。(2).k1←HK(KA,f,1)HK(KA,f,2)…HK(KA,f,i)=HK(KB,f,1)HK(KB,f,2)…HK(KB,f,i);k2←HK(f,KA,1)HK(f,KA,2)…HK(f,KA,i)=HK(f,KB,1)HK(f,KB,2)…HK(f,KB,j)。设k1的长度为l1,k2的长度为l2,则计数器i的取值直到哈希函数序列的输出长度大于等于l1,计数器j的取值直到哈希函数序列的输出长度大于等于l2。
记导出的认证密钥为R′=k2,为了向用户“A”证明其知道R′,用户“B”利用标签认证函数FT计算并发送tB=FT(R′,auxB),其中auxB是{IB,sid,rB,X,Y,pub}的一个子集,sid是会话标示符,rB是用户“B”的协议角色标示;用户“A”利用认证密钥R′检查tB正确性,若不正确,则中止协议执行,返回或不返回出错信息。为了向用户“B”证明其的确知道R′,用户“A”在收到tB并验证tB的正确性后,计算并向用户“B”发送tA=FT(R′,auxA),其中auxA是{IA,sid,rA,X,Y,pub}的一个子集且auxA≠auxB,rA是用户“A”的协议角色标示;用户“B”利用认证密钥R′检查tA正确性,若不正确,则中止协议执行,返回或不返回出错信息。
实现方法-5实现方法-5适用于客户“A”和客户“B”其中之一,而非全部,可能没有定义在(G′,G,g,q)上的离散对数公钥,但仍支持数字签名的情形。
令ti=1或

,1≤i≤6;令auxAj,aux′Aj,auxBi,aux′Bi,1≤j≤7,1≤i≤9,分别是是除X=gx,Y=gy之外的其它与协议执行相关的信息的一个子集或序列,可为空或含重复元素。auxA和aux′A是{IA,sid,rA,X,Y,pub}的一个子集,auxB和aux′B是{IB,sid,rB,X,Y,pub}的一个子集且auxA≠auxB,其中sid是会话标示符,rB是用户“B”的协议角色标示,rA是用户“A”的协议角色标示。令 第一轮用户“A”发送 第二轮用户“B”发送或或{Y,FT(T′1,auxB),auxB3}或{Y,aux′B3}。其中,(这儿的U可为空值),auxB3包含用户“B”的身份信息IB,auxB2和/或auxB1包含用户“B”的身份信息IB(auxB2和/或auxB1可仅含用户“B”的身份信息IB)。
用户“A”利用检查T1或FT(T′1,auxB)的正确性;即计算并检查或或计算并检查FT(T′1,auxB)的正确性。任何检查不正确,则用户“A”中止运行,返回或不返回出错信息。
第三轮若用户“A”具有公钥A=ga∈G,则用户“A”发送或或{FT(T′2,auxA),auxA5}。其中,(这儿的U可为空值),auxA5含用户“A”的公钥证书或IA,auxA2,auxA6含用户“A”的身份信息IA(auxA2,auxA6可仅含用户“A”的身份信息IA);用户“B”利用和来检查T2或FT(T′2,auxA)的正确性,即计算并检查或或计算并检查FT(T′2,auxA)的正确性。任何检查不正确,则用户“B”中止运行,返回或不返回出错信息。
若用户“A”不具有公钥A=ga∈G但仍支持数字签名,则用户“A”发送{sA,auxA7},其中auxA7含用户“A”的公钥证书或IA,sA为用户“A”使用自己的私钥对

或H(FT(TSA,auxA),aux′A)的一个数字签名,(这儿的U可为空值);用户“B”利用和用户“A”的公钥来检查sA的正确性,即计算

并利用用户“A”的公钥来检查sA的正确性;或者,计算和H(FT(TSA,auxA),aux′A),并利用用户“A”的公钥来检查sA的正确性。任何检查不正确,则用户“B”中止运行,返回或不返回出错信息。
第四轮若用户“B”具有公钥B=gb∈G,则用户“B”发送或或{FT(T′3,auxB),auxB7};其中,(这儿的U可为空值),auxB7含用户“B”的公钥证书或IB,auxB4,auxB8含用户“B”的身份信息IB(auxB4,auxB8可仅含用户“B”的身份信息IB);用户“A”利用和来检查T3或FT(T′3,auxB)的正确性,即计算并检查或或计算并检查FT(T′3,auxB)的正确性。任何检查不正确,则用户“A”中止运行,返回或不返回出错信息。
若用户“B”不具有公钥B=gb∈G但仍支持数字签名,则用户“B”发送{sB,auxB9},其中auxB9含用户“B”的公钥证书或IB,sB为用户“B”使用自己的私钥对

或H(FT(TSB,auxB),aux′B)的一个数字签名,(这儿的U可为空值);用户“A”利用和用户“B”的公钥来检查sB的正确性,即计算

并利用用户“B”的公钥来检查sB的正确性;或者,计算和H(FT(TSB,auxB),aux′B),并利用用户“B”的公钥来检查sB的正确性。任何检查不正确,则用户“A”中止运行,返回或不返回出错信息。
会话密钥由和{X,Y,pub}的一个子集导出,其中用户“A”计算KA,用户“B”计算KB。用户“A”可事先计算X=gx,



用户“B”可事先计算Y=gy,



若用户“A”事先计算

则在计算完毕后将

删除,而保存

若用户“B”事先计算

则在计算完毕后将

删除,而保存
ti,1≤i≤6,设置的关键为令若用户“B”检查确认X∈G,则令t1=t4=t5=1;若用户“A”检查确认Y∈G,则令t2=t3=1。若用户“B”仅检查确认X∈G′或X∈G′/1G,而不能确认X∈G且在第四轮不使用签名,则t1,t3,t4,t5至少其中之一为

,并一次性检查确认Xhy≠1G和/或Xhb≠1G(即在协议运行中第一次计算Xhy≠1G或Xhb≠1G时候进行检查,一旦确认则不在检查);若用户“A”仅检查确认Y∈G′或Y∈G′/1G,而不能确认Y∈G且在第三轮不使用签名,则t1,t2,t3,t5至少其中之一为

,并一次性检查确认Yhx≠1G和/或Yha≠1G。若用户“A”在第三轮使用签名,则用户“A”可仅检查确认Y∈G′或Y∈G′/1G并可令t3=1;若用户“B”在第四轮使用签名,则用户“B”可仅检查确认X∈G′或X∈G′/1G并可令t1=t5=1。任何检查不通过,则中止协议执行,返回或不返回出错信息。一般而言,令t1=t3=t5=t6。注意当并且无用户使用签名时,上述实施的检查不仅保证DH-密钥成分不在小子群中,而且不会泄露每个用户自己的DH-密钥成分的离散对数的奇偶性(但是仍不能保证对方的确知道其发送的DH-密钥成分的离散对数)。
公钥注册和公钥证书颁发方法 可应用如下公钥注册和公钥证书颁发方法来简化上述实现方法的计算。
(1).公钥证书颁发机构CA在向用户颁发证书时,检查确认用户注册的公钥为G中的元素或为G/1G中元素;任何检查不通过,证书颁发机构拒绝颁发公钥证书;这样,每个用户只需检查对方用户的公钥证书即可确认对方的公钥为G或G/1G中的元素。建议在所有的实现方法中均采用(1)。
(2).用户在向公钥证书颁发机构注册用户身份信息ID和公钥PK∈G′时,同时提交公钥的逆元PK-1∈G′;即除ID和PK∈G′外,公钥证书申请书还包括PK-1∈G′。推荐在实现方法-1和基于口令的实现方法-2中采用(2)。
(3).用户在向公钥证书颁发机构注册用户身份信息和公钥时,同时提交身份信息、公钥和aux的哈希值;或者,身份信息、公钥及公钥逆元和aux的哈希值;提供或不提供对得到的哈希值和/或aux的使用注册公钥对应的私钥的数字签名;其中,aux是协议其它信息,一般包括时间戳(即公钥注册申请的日期和时间)、会话标示符等的一个子集(这儿会话标示符可为CA发送给用户的一个随机数,或CA和注册用户交换的两个随机数的串联),等。aux可取为空值;记所得到的哈希值为tPK,可能的用户的数字签名为sPK;即,除用户的身份信息、公钥和/或公钥逆元外,公钥证书申请书同时包括aux和tPK,但包括或不包括sPK。
(4).若公钥颁发机构检查发现tPK或sPK错误,则拒绝颁发证书;公钥证书颁发机构在向用户颁发证书时,对用户的身份信息、公钥和/或其逆元、aux、哈希值tPK、和或无sPK进行数字签名;或者,CA仅对哈希值tPK进行数字签名;而不是仅仅对用户的身份信息和公钥进行签名;即合法公钥证书必须同时包含证书颁发机构的数字签名。
这样,哈希函数或密钥导出函数输入或pub所包含的(IA,A)或A可换为在用户“A”公钥证书中的哈希值,记为tAPK;哈希函数或密钥导出函数输入或pub所包含的(IB,B)或B可换为用户“B”公钥证书中的的哈希值,记为tBPK。并且,若公钥证书包含用户公钥的逆元,则在权利要求1的实现方法-1和实现方法-2中,用户“A”和“B”不需事先计算B-1∈G′。

具体实施例方式 具有身份IA的用户“A”的公钥是A=ga并具有证书CERTA,具有身份IB的用户“B”的公钥是B=gb并具有证书CERTB。证书颁发机构CA在颁发证书之前,检查确认A∈G/1G和B∈G/1G。我们假设用户“A”为协议运行初始者(initiator),即先发送DH-密钥成分X=gx∈G;“B”为协议运行响应者(responder),即收到X之后发送DH-密钥成分X=gy∈G。其中a,x,b,y从Zq中随机选取。
在下述协议具体实施中,消息认证码MAC采用由IETF(Internet Engineering TaskForce)所公布的第2104号互联网意见征求文档(Internet RFC 2104)中所描述的HMAC认证码。HMAC只需作两个哈西运算,并被证明既是消息认证码又是伪随机函数。在协议具体实施中,HMAC以及哈西函数H,HK由SHA-1哈西函数来实现。对称加密采用NIST(美国标准与技术局)的标准所规定的AES算法。
权利要求1的实现方法-1的基于
具体实施例方式 口令注册用户“B”可事先计算和存储B-1。用户“A”向用户“B”注册口令w时,用户“B”计算H(w,IA,IB)并令β为H(w,IA,IB)的长度为32位的前缀。用户“B”计算B-tbβ∈G′和Btbβ∈G′,删除掉β并将B-tbβ和/或Btbβ存储于数据库中用户“A”所对应的条目中。
角色标示设用户“A”和“B”参数协商阶段已经交换了两个随机数RA和RB(以及用户“B”的公钥证书),即用户“A”发送RA,用户“B”发送RB。令用户“A”的角色标示为rA=RA‖RB;用户“B”的角色标示为rB=RB‖RA;其中“‖”是字符串串联运算符。RA的发送可包含在以下用户“A”发送密文的信息中。
我们给出基于ANSI X9.63、ISO/IEC 15946-3及IEEE P1363a等标准化文档所规定的ECIES公钥加密算法的具体实施方式
。基于其它Diffie-Hellman公钥加密算法,比如ISO18033-2标准化草案所规定的PSEC公钥加密算法等,的具体实施方式
类似。
令用户“A”如下计算(1).计算X′=gxBβ∈G;(2).计算KA=Btx∈G,若KA=1G则重复(1)和(2)直到KA≠1G;(3).计算Diffie-Hellman秘密k1与k2(k1,k2)←H(KA,X′,1)HK(KA,X′,2)…HK(KA,X′,i),其中i≥1由一个计数器来实现,i的取值依赖于(k1,k2)的长度,即直到H(KA,X′,1)HK(KA,X′,2)…HK(KA,X′,i)的长度大于等于(k1,k2)的长度。设(k1,k2)的长度为l,我们可取H(KA,X′,1)HK(KA,X′,2)…HK(KA,X′,i)的长度为l的前缀。(4).用户“A”随机选取一个随机数R,计算计算H(k2,R)并令KR取为H(k2,R)的与k2的长度相同的前缀,计算最后,用户“A”发送{IA,X′,E,tA}给服务器“B”,其中C={X′,E,tA}称为基于口令的公钥加密密文。
收到{IA,X′,E,tA}后,用户“B”做如下计算(1).检查确认X′∈G′/1G,若错误(即)则中止运行并返回出错信息;(2).计算X′tb∈G′并检查确认X′tb≠Btbβ(其中Btbβ是事先计算并存储在数据库中的),若错误(即X′tb=Btbβ)则中止运行并返回出错信息;(3).计算KB=X′tbB-tbβ∈G′(其中B-tbβ是事先计算并存储在数据库中的);(4).计算计算Diffie-Hellman秘密k1与k2方法同用户“A”的步骤(3),只是将哈希函数输入中的KA换为KB;(5).利用k1对E进行解密得到R;(6).利用k2和R计算出KR(方法同用户“A”),检查确认若错误(即)则中止运行并返回出错信息;(7)将会话密钥直接设为KR,计算并发送并将会话密钥设为R。(用户“B”的公钥证书也可在这一步发送。) 收到tB后,用户“A”检查确认若错误(即)则中止运行并返回出错信息;将会话密钥设为R。
权利要求1的实现方法-2的基于口令基于
具体实施例方式 我们给出权利要求1的实现方法-2的基于口令基于具体实施方式
,非基于口令的具体实施方式
是基于口令的实施方式的简化版本。
口令注册用户“B”可事先计算和存储B-1。用户“A”向用户“B”注册口令w时,用户“B”计算H(w,IA,IB)并令β为H(w,IA,IB)的长度为32位的前缀。用户“B”计算与Ab∈G;删除掉β并将

与Ab存储于数据库中用户“A”所对应的条目中(必要时对

特别是Ab,进行加密存放)。
角色标示用户角色rA与rB的标示方法同实现方法-1的具体实施方式
。(我们假设协议双方已经交换和验证了各自的公钥证书。)用户“A”发送的随机数RA和用户“A”的公钥证书也可包含在以下协议具体实施方式
中用户“A”发送的第一轮的信息中。
我们给出基于ANSI X9.63、ISO/IEC 15946-3及IEEE P1363a等标准化文档所规定的ECIES公钥加密算法的具体实施方式
。基于其它Diffie-Hellman公钥加密算法,比如ISO18033-2标准化草案所规定的PSEC公钥加密算法等,的具体实施方式
类似。
令用户“A”如下计算(1).计算X′=gxBβ∈G;(2).计算若KA=1G则重复(1)和(2)直到KA≠1G;(3).计算Diffie-Hellman秘密k1与k2(k1,k2)←H(KA,X′,1)HK(KA,X′,2)…HK(KA,X′,i),其中i≥1由一个计数器来实现,i的取值依赖于(k1,k2)的长度,即直到H(KA,X′,1)HK(KA,X′,2)…HK(KA,X′,i)的长度大于等于(k1,k2)的长度。设(k1,k2)的长度为l,我们可取H(KA,X′,1)HK(KA,X′,2)…HK(KA,X′,i)的长度为l的前缀。(4).用户“A”随机选取一个随机数R,计算计算H(k2,R)并令KR取为H(k2,R)的与k2的长度相同的前缀,计算最后,用户“A”发送{IA,X′,E,tA}给服务器“B”,其中C={X′,E,tA}称为基于口令的公钥加密密文。(用户“A”的公钥证书可在这一步发送。) 收到{IA,X′,E,tA}后,用户“B”做如下计算(1).检查确认X′∈G′/1G,若错误(即)则中止运行并返回出错信息;(2).计算(其中

是事先计算并存储在数据库中的),并检查若错误(即),则中止运行并返回出错信息;(3).计算其中c=H(X′,IA,A,IB,B),Ab是事先计算并存储在数据库中的。(4).计算计算Diffie-Hellman秘密k1与k2方法同用户“A”的步骤(3),只是将哈希函数输入中的KA换为KB;(5).利用k1对E进行解密得到R;(6).利用k2和R计算出KR(方法同用户“A”),检查确认若错误(即)则中止运行并返回出错信息;(7)将会话密钥直接设为KR,计算并发送并将会话密钥设为R。
收到tB后,用户“A”检查确认若错误(即)则中止运行并返回出错信息;将会话密钥设为R。
权利要求1实现方法-3的基于口令的
具体实施例方式 口令注册用户“B”可事先计算和存储B-1。用户“A”向用户“B”注册口令w时,用户“B”计算H(w,IA,IB)并令β为H(w,IA,IB)的长度为32位的前缀。用户“B”计算B-β∈G;将β存储于数据库中用户“A”所对应的条目中(必要时对B-β进行加密存放)。
角色标示令rA=0,rB=1。
事先计算用户“A”事先计算X′=gxBβ∈G,c=H(X′,IA,IB,B),和Btcxmodq∈G′,其中t=N/q。
在下面具体实施方式
中,大括号内的元素表示的是发送的信息。
第一轮用户“A”发送{X′=gxBβ∈G}(其中x从Zq中随机选取,大括号内的元素是要发送的信息)。收到X′后用户“B”检查确认X′∈G′/1G;若出错(即)任何检查不成功,用户“B”中止协议执行;若检查通过,用户“B”计算Y=gy∈G(其中y从Zq中随机选取)、c=H(X′,IA,IB,B)、f=H(c,Y),KB=(X′B-β)t(cb+fy)modq∈G′并删除y(其中B-β是事先计算并存储在数据库中的);用户“B”检查确认KB≠1G,若错误(即KB=1G)用户“B”则中止协议执行并返回出错信息。若KB≠1G,用户“B”计算(k1,k2)←H(KB,f,1)H(KB,f,2)…H(KB,f,i),其中i≥1由一个计数器来实现,i的取值依赖于(k1,k2)的长度,即直到H(KB,f,1)H(KB,f,2)…H(KB,f,i)的长度大于等于(k1,k2)的长度;如果(k1,k2)的长度为l,我们令(k1,k2)为H(KB,f,1)H(KB,f,2)…H(KB,f,i)的长度为l的前缀。
第二轮用户“B”发送收到“B”发送的信息后,用户“A”检查CERTB的有效性和Y∈G′/1G,任何检查不成功,用户“B”中止协议执行并返回出错信息;若检查通过,用户“A”计算f=H(c,Y),KA=BtcxYtfx∈G′;用户“A”计算(k1,k2)←H(KA,f,1)H(KA,f,2)…H(KA,f,i),其中i≥1由一个计数器来实现,i的取值依赖于(k1,k2)的长度,即直到H(KA,f,1)H(KA,f,2)…H(KA,f,i)的长度大于等于(k1,k2)的长度;如果(k1,k2)的长度为l,我们令(k1,k2)为H(KA,f,1)H(KA,f,2)…H(KA,f,i)的长度为l的前缀。用户“A”检查如果则将会话密钥设为k2并进入下一轮,否则(即)中止协议执行并返回出错信息。
第三轮用户“A”发送。收到tA后,用户“B”检查确认如果用户“B”将会话密钥设为k2,成功结束协议,否则中止协议执行。
权利要求1实现方法-4的
具体实施例方式 事先计算用户“A”事先计算X=gx∈G,c=H(X,IA,A,IB,B),t=t2=t3=t4=N/q和Btxcmodq∈G′,其中N为有限域G′的阶;用户“B”事先计算Y=gy∈G,d=H(IB,B,IA,A,Y),t=t2=t3=t4=N/q和Atyd modq∈G′。
第一轮用户“A”发送{CERTA,X};收到{CERTA,X}后用户“B”检查CERTA的有效性和X∈G′/1G;任何检查不成功,用户“B”中止协议执行。若检查通过,用户“B”计算c=H(X,IA,A,IB,B),f=H(c,d),Xt(cb+fy)modq;用户“B”检查确认Xt(cb+fy)≠1G,若Xt(cb+fy)=1G,用户“B”中止协议执行并返回出错信息;若Xt(cb+fy)≠1G,用户“B”计算KB=AtydXt(cb+fy)∈G′(其中Atyd modq∈G′是事先计算的),计算(k1,k2)←H(KB,f,1)H(KB,f,2)…H(KB,f,i),其中i≥1由一个计数器来实现,i的取值依赖于(k1,k2)的长度,即直到H(KB,f,1)H(KB,f,2)…H(KB,f,i)的长度大于等于(k1,k2)的长度;如果(k1,k2)的长度为l,我们令(k1,k2)为H(KB,f,1)H(KB,f,2)…H(KB,f,i)的长度为l的前缀。
第二轮用户“B”发送收到“B”发送的信息后,用户“A”检查CERTB的有效性和Y∈G′/1G;任何检查不成功,用户“A”中止协议执行并返回出错信息;若检查通过,用户“A”计算d=H(IB,B,IA,A,Y),f=H(c,d),Yt(da+fx)∈G′;用户“A”检查确认Yt(da+fx)≠1G,若Yt(da+fx)=1G,用户“A”中止协议执行并返回出错信息;若Yt(da+fx)≠1G,用户“A”计算KA=BtxcYt(da+fx)∈G′(其中Btxc modq∈G′是事先计算的)。用户“A”计算(k1,k2)←H(KA,f,1)H(KA,f,2)…H(KA,f,i),其中i≥1由一个计数器来实现,i的取值依赖于(k1,k2)的长度,即直到H(KA,f,1)H(KA,f,2)…H(KA,f,i)的长度大于等于(k1,k2)的长度;如果(k1,k2)的长度为l,我们令(k1,k2)为H(KA,f,1)H(KA,f,2)…H(KA,f,i)的长度为l的前缀。用户“A”检查如果则将会话密钥设为k2并进入下一轮,否则(即)中止协议执行并返回出错信息。
第三轮用户“A”发送收到tA后,用户“B”检查如果用户“B”将会话密钥设为k2,成功结束协议;否则(即),用户“B”中止协议执行并返回出错信息。
权利要求1实现方法-5的
具体实施例方式 我们给出一个用户“B”没有定义在(G′,G,g,q)上的离散对数公钥,且结合权利要求3的具体实施方式
。但用户“B”仍支持数字签名,比如RSA签名体制。我们假设用户“A”和“B”有某种协商机制来相互确认对方的公钥类型,所支持的算法,以及其它参数,并达成一致。在下述具体实施中,令 事先计算在下面具体实施方式
中,用户“B”可事先计算Y、H(IA,Y,Ay)并删除Ay。
第一轮用户“A”发送{X=gx∈G}。用户“B”检查确认X∈G′/1G,若错误(即)则中止运行并返回出错信息。用户“B”计算Y=gy∈G,Xhy∈G′,检查确认Xhy≠1G,若出错(即Xhy=1G)则中止运行并返回出错信息。用户“B”计算H(X,Y,Xhy),删除掉Xhy并计算
在整个协议运行过程中,用户“B”仅保留y、H(X,Y,Xhy)以及可能H(IA,Y,Ay)(如果H(IA,Y,Ay)事先计算)作为临时秘密数据(其它临时秘密数据使用完后马上删除)。
第二轮用户“B”发送用户“A”检查确认Y∈G′/1G,若错误(即)则中止运行并返回出错信息。用户“A”计算Yhx∈G′,检查确认Yhx≠1G,若错误(即Yhx=1G)则中止运行并返回出错信息。用户“A”计算H(X,Y,Yhx),删除Yhx,检查确认若错误则中止运行并返回出错信息。用户“A”计算H(IA,Y,Ya),计算 在整个协议运行过程中,用户“A”仅保留x、H(X,Y,Yhx)以及可能H(IB,X,Bx)(如果用户“A”事先计算H(IB,X,Bx))作为临时秘密数据(其它临时秘密数据使用完后马上删除)。
第三轮用户“A”发送其中CERTA是用户“A”的公钥证书。用户“B”验证确认CERTA有效性,若无效则中止运行并返回出错信息。用户“B”检查确认若错误则中止运行并返回出错信息。用户“B”计算

应用自己的签名私钥对

进行数字签名,记得到的数字签名为sB;用户“B”将会话密钥设为
第四轮用户“B”发送{CERTB,sB},其中CERTB是用户“B”的公钥证书。用户“A”验证确认CERTB有效性,若无效则中止运行并返回出错信息。用户“A”计算

并利用用户“B”的公钥检查确认sB是对

的有效数字签名,若错误(即sB不是对

的有效数字签名)则中止运行并返回出错信息。用户“A”将会话密钥设为

权利要求
1.一类可基于口令、抗秘密数据泄露的认证和密钥交换方法,其特征在于
系统工作环境为
(1).系统参数(G′,G,g,q),其中G′是一个阶为N的有限群,G为G′中阶为q的子群,g为G的生成元,使得定义在G上的离散对数问题是难的;在本文档中,我们用乘法来表示G′中元素的操作;除非有特别说明,将G、G′中的单位元记为1G,G′/1G表示的是由G′减去单位元1G之后其它元素的集合,即G′中的非1G元素;记G/1G为G中的非1G元素;不失一般性,指数运算和不在指数上的乘法运算的结果是G′或G中的一个元素,指数上的加法和/或乘法运算是模q计算;对于任一元素X∈G′,我们记X-1为X的相对于G′的逆元,即XX-1=1G;
(2).H是一个哈希函数;对于字符串或数值s1,s2,…sm,m>1,H(s1,s2,…sm)表示的是将s1,s2,…,sm,用合适编码表示,然后将所有的编码顺序连接串联起来,最后将串联后得到的串作为H的输入;不失一般性,我们设H的输出是Zq={0,1,2,…,q-1}中的元素,否则我们可以简单地取H的输出的一个属于Zq的子串或对H的输出进行模q计算;若s1,s2,…,sm是m个字符串,S1,S2,…Sn是n个集合,Φ为空集合,1≤n,m,则{s1,s2,…,sm,Φ,S1,S2,…,Sn}表示的是{s1,s2,…,sm}∪S1∪S2∪…∪Sn,其中大括号内的元素顺序可以任意变化;H(s1,s2,…,sm,Φ,S1,S2,…,Sn)表示的是将s1,s2,…sm及S1∪S2∪…∪Sn-{s1,s2,…,sm}中的元素用合适编码表示,然后将所有的编码串顺序连接串联起来,最后将串联后得到的串作为H的输入;
(3).除非有特别说明,具有身份IDIA的用户“A”有一个公钥A=ga∈G,其中a由用户“A”在Zq={0,1,2,…,q-1}中随机选取;相应地,具有ID IB的用户“B”的公钥记为B=gb∈G,以此类推;其中IA为用户“A”的身份信息或用户名,IB为用户“B”的身份信息或用户名;对于任一元素x∈Zq,我们记-x为x的相对于Zq的负元,即x+(-x)=0modq;
(4).协议基于Diffie-Hellman密钥交换协议;除非有特别说明,记X=gx∈G为用户“A”的DH密钥成分,x为DH密钥成分X的离散对数,x由用户“A”从Zq={0,1,…,q-1}中随机选取或从Zq={0,1,…,q-1}的奇数子集中随机选取;记Y=gy∈G为用户“B”的DH密钥成分,y为DH密钥成分Y的离散对数,y由用户“B”从Zq={0,1,…,q-1}中随机选取或从Zq={0,1,…,q-1}的奇数子集中随机选取;假设用户“A”为协议的发起者,用户“B”为协议的响应者;即用户“A”先发送X;在收到X后用户“B”再发送Y;在基于口令的实现方法中,客户“A”发送的DH-密钥成分为X′=gxBβ=XBβ∈G′;
(5).与协议执行相关的其它信息pubpub是除DH-密钥成分X=gx或X′,Y=gy之外的其它与协议执行相关的信息的一个子集或序列,可为空或含重复元素;这儿,其它与协议执行相关的信息包括用户即协议初始者与响应者的身份信息或用户名、协议初试者和响应者的角色标示、公钥及公钥证书信息、IP地址,协议版本,安全参数和密钥参数,协议的会话标示符,时间戳,cookie,任意数值,以及除DH-密钥成分外的协议会话传输的其它信息;在不同的实现方法中,pub的取值可不同;一般而言,pub包含协议初始者与响应者的公钥与身份或用户名信息,即
(6).密钥导出函数KDFKDF(S,aux)是一个密钥导出函数,其中S是一个数值或数值的集合,aux是一个数值字符串集合或计数器;一般而言,KDF是一个哈希函数或哈希函数序列,或是一个以S为随机种子的伪随机函数;会话密钥和认证密钥可由同一个密钥导出函数在相同的输入上导出;或者,会话密钥和认证密钥由同一个密钥导出函数在不同的输入上分别导出;或者,会话密钥的导出函数与认证密钥的导出函数不同,而它们的输入相同或不同;
(7).标签认证函数FT(K,U),其中K为一个秘密数值或秘密数值的集合,U为一个集合;标签认证函数FT(K,U)为任何满足如下性质的函数(1)不能够从FT(K,U)在K的长度的多项式时间内求出K,即相对于输入K,函数FT是单向的;(2)给定FT(K,U),不能够在K的长度的多项式时间内计算出FT(K,U′)或FT(K,U′)使得U≠U′;一般而言,FT是一个单向哈希函数;或者FT是一个消息认证码MAC函数,其中MAC的私钥由K、U导出而认证的信息是U的一个子集;
我们假设协议运行送方有某种机制协商上述参数、函数、算法,用户角色标示及会话标示符号的表示方法等,以及运行以下哪种实现方法,并达成一致;协商所交互的信息的一个子集可包含在pub中;在申请方法中进行的对各种元素的检查确认是一次性的,即一旦确认正确,则在后续的运行中不在检查;
实现方法根据应用环境或系统的不同,有如下实现方法
实现方法-1实现方法-1适用于客户“A”没有或不便于使用公钥,并且用户“B”不发送DH-密钥成分Y=gy的情形;但是客户“A”在用户“B”处注册了一个口令w;一般而言,用户“A”是一个客户,用户“B”是一个服务器,用户“B”管理一个用户数据库,并为每一个客户在数据库创建一个条目;用户“B”支持以B=gb∈G′为公钥的基于Diffie-Hellman或ElGamal的公钥加密算法,其中任一合法的公钥加密密文,记为C,是一个包含若干个数值的集合且均包括一个用于和公钥B生成Diffie-Hellman秘密的DH-密钥成分X=gx∈G;即X=gx用来在加密者和解密者之间生成一个共同的Diffie-Hellman秘密Btx=gtbx=Xtb∈G′,其中,t=1或
;一般而言,加密者和解密者真正使用的共同秘密是由{X,Btx=Xtb}利用密钥导出函数导出,即KDF(Btx,X)=KDF(Xtb,X);B=gb∈G′既可以是固定的用户“B”的公钥,即随机选取的b∈Zq在不同的会话中保持不变;B=gb∈G′亦可由用户“B”在每一次的会话中独立地随机选取,即b在不同的会话中独立地在Zq中选取;
实现方法-1的核心和特征是构建两个函数KA和KB使得KA(x,w,B,pub)=KB(b,w,X′,pub);用户“A”计算并发送DH-密钥成分X′=gxBβ∈G′;用户“A”计算KA=Btx∈G′,而用户“B”计算KB=X′tbB-tbβ∈G′或KB=(X′B-β)tb∈G′;其中,若B=gb∈G′是用户“B”的公钥则用户“B”可事先计算和存储B-tbβ∈G′和/或Btbβ∈G′;若B=gb∈G′不是用户“B”的公钥,而是由用户“B”在每一次的会话中独立地随机选取,则用户“B”先将B=gb∈G′发送给“A”;
具体方法为将基于Diffie-Hellman或ElGamal的公钥加密算法中的用于生成Diffie-Hellman秘密的DH-密钥成分X=gx∈G换为X′=gxBβ∈G′;如下计算基于Diffie-Hellman或ElGamal的公钥加密算法中的关于(X,B)的Diffie-Hellman秘密Btx=gtbx=Xtb=(X′B-β)tb=X′tbB-tbβ∈G′用户“A”计算KA=Btx∈G′,而用户“B”计算KB=X′tbB-tbβ∈G′或KB=(X′B-β)tb∈G′;其中,t=1或
,β为w或-w且w和-w编码为Zq中的一个元素;或者,β为Hw(W)或-Hw(W),其中W为{w,IA,IB,B,pub}或{w,X′,IA,IB,B,pub}的一个包含w的子集,Hw是一个输出长度小于q的长度的哈希函数,Hw一般设置为哈希函数H输出的一个短的子串;加密者和解密者真正使用的共同秘密由{X′,KA=KB}导出,即KDF(KA,X′)=KDF(KB,X′),或者由{X′,KA=KB}与aux导出,aux是{IA,IB,sid,rA,rB,pub}的一个子集,可为空;记由{X′,KA=KB}或由{X′,KA=KB}与aux导出的秘密为(k1,k2);一般而言,k1是一个对称加密的密钥,k2是一个认证密钥;
用户“B”可事先计算和存储B-1;若β的计算不涉及X′且若B=gb∈G′是用户“B”的公钥,用户“B”事先计算B-tbβ∈G′和/或Btbβ∈G′,并将B-tbβ和/或Btbβ存储在对应于用户“A”的数据库条目中;即在用户“A”向用户“B”注册口令w时,用户“B”计算β,B-tbβ∈G′和/或Btbβ∈G′,删除掉β并将B-tbβ和/或Btbβ存储于数据库中用户“A”所对应的条目中,而不是直接存放口令w或β;或者,用户“B”事先计算B-β,并将B-β安全存储在对应于用户“A”的数据库条目中;但是,如果用户“B”没有公钥,而是随机选取并发送B=gb∈G′给用户“A”,即b在不同的会话中独立地在Zq中选取,则用户“B”仍需将β安全存放在对应于用户“A”的数据库条目中;
为防止离线攻击,用户“A”在X′,Btx计算完毕后立即删除x,而w,β,Bβ或者马上删除或者存储在安全的位置;用户“A”的计算均可事先进行;特别地,若β=-w或β=-Hw(W),用户“A”可事先计算B-1以加速计算,此时-β正好为w或Hw(W);若β=w或β=Hw(W),用户“B”可事先计算和存储B-1;
对于用户“B”具有公钥“B”的情形,一般而言,如果解密者,即用户“B”,检查确认X′∈G,则令t=1;如果解密者仅检查确认X′∈G′或X′∈G′/1G,而不能确认X′∈G,则令并检查确认X′tb≠Btbβ或KB≠1G或(X′B-β)t≠1G;如果用户“B”没有公钥,而是随机选取并发送B=gb∈G′给用户“A”,即b在不同的会话中独立地在Zq中选取,则用户“B”可仅检查确认X′∈G′或X′∈G′/1G并令t=1;任何检查不通过,用户“B”中止协议执行,返回或不返回出错信息;用户“A”在发送密文的同时或发送密文之前,发送用户“A”的身份信息IA;经此修改后的基于Diffie-Hellman或ElGamal的公钥加密算法称为基于口令的Diffie-Hellman或ElGamal公钥加密算法;
客户“A”使用基于口令的Diffie-Hellman或ElGamal公钥加密算法加密一个随机数R得到密文C,并将密文C及身份信息IA发送给用户“B”;用户“B”若成功解密C得到R,则会话密钥和认证密钥由随机数R及{k1,k2,C,pub}的一个子集利用密钥导出函数导出,或直接将会话密钥和/或认证密钥设为R;记导出的认证密钥为R′;若用户“B”解密出错,则中止执行,返回或不返回出错信息;我们假设用户“A”只被允许出错有限次,以防止在线猜测攻击;
为了向用户“A”证明其知道R,用户“B”利用标签认证函数FT计算并发送tB=FT(R′,auxB),其中auxB是{IB,sid,rB,C,X′,pub}的一个子集,sid是会话标示符,rB是用户“B”的协议角色标示;用户“A”利用认证密钥R′检查tB正确性,若不正确,则中止协议执行,返回或不返回出错信息;
用户“A”采用如下方法向用户“B”证明其的确知道R用户“A”在发送密文C的同时或在收到tB并验证确认tB的正确性后,计算并向用户“B”发送tA=FT(R′,auxA),其中auxA是{IA,sid,rA,C,X′,pub}的一个子集且auxA≠auxB,rA是用户“A”的协议角色标示;如果对于R的基于口令的Diffie-Hellman或ElGamal公钥加密密文C中已经包含一个标签tE=MACk(E)或一般的tE=FT(k,E),其中E是密文中的一个元素或密文中除tE之外的其它元素的一个子集,则用户“A”可更高效地向用户“B”证明其知道R,即用户“A”不发送tA=FT(R′,auxA),而是将密文C中的tE更换为或一般地TA=FT(KR,{E,auxA}),其中auxA是{IA,sid,rA,pub}的一个子集且auxA≠auxB;KR是由(k,R′,aux)或(k,R,aux)导出或直接设为R′,aux是{IA,IB,sid,rA,rB,E,pub}的一个子集,可为空;即KR=KDF({k,R′},aux)或KR=KDF({k,R},aux)或KR=R′,其中KR的长度取为与k相同;一般地,KR=H(k,R,aux),或或或KR=R′;用户“B”检查tA正确性,若不正确,则中止协议执行,返回或不返回出错信息;
实现方法-2实现方法-2适用于客户“A”具有公钥A=ga,用户“B”有公钥B=gb但不发送DH-密钥成分Y=gy的情形;
如果用户“A”在用户“B”处注册了一个口令w,则实现方法-3的核心和特征是构建两个函数KA和KB使得KA(a,x,w,B,pub)=KB(b,w,A,X,pub);具体方法为用户“A”计算并发送DH-密钥成分X′=gxBβ∈G′,其中,β为w或-w,且w和-w编码为Zq中的一个元素;或者,β为Hw(W)或-Hw(W),其中W为{w,IA,A,IB,B,pub}或{w,X′,IA,A,IB,B,pub}的一个包含w的子集,Hw是一个输出长度小于q的长度的哈希函数,一般取H输出的一个短的子串;用户“A”计算用户“B”计算或或或其中,c=H(X′,pub)或H(X′,B,pub),e=1或H(pub),ti=1或
,1≤i≤2;c的计算依赖于X′,e的计算不依赖于X′;用户“A”的所有计算均可事先进行,并在{β,X′,KA}计算完毕后删除x,而w,β,Bβ或者马上删除或者存储在安全的位置;特别地,若β=-w或β=-Hw(W),用户“A”可事先计算B-1以加速计算,此时-β正好为w或Hw(W);若β=w或β=Hw(W),用户“B”可事先计算B-1;用户“B”可事先计算和存储B-1、若β的计算不涉及X′用户“B”还可事先计算和/或B-bβ∈G";用户“B”将
或B-bβ或


的一个子集存储在用户“A”对应的数据库条目中,必要时加密存放,而不是直接存放口令w或β,此时KB的计算为或若用户“B”不事先计算或B-bβ∈G′,用户“B”将
安全存储在用户“A”对应的数据库条目中,必要时对
进行加密存放,此时KB的计算为
ti,1≤i≤2,设置的关键为对于基于口令的实现,如果用户“B”检查确认X′∈G和A∈G,则令t1=t2=1;如果解密者仅检查确认A∈G,X′∈G′或X′∈G′/1G,而不能确认X′∈G,则令t1=1,,用户“B”检查确认或或/和或或或或任何检查不通过,用户“B”则中止协议运行,返回或不返回出错信息;
会话密钥和认证密钥有两种产生方式
(1).会话密钥和认证密钥直接由KA=KB及{c,e,X′,pub}的某个子集利用密钥导出函数导出,此时用户“B”检查X′∈G;
(2).或者,将基于Diffie-Hellman或ElGamal的公钥加密算法中的DH-密钥成分X=gx换为X′=gxBβ∈G′;加密者和解密者真正使用的共同Diffile-Hellman秘密由{X′,KA=KB}导出,即KDF(KA,X′)=KDF(KB,X′),或者由{X′,KA=KB}与aux导出,aux是{IA,IB,sid,rA,rB,pub}的一个子集,可为空;记由{X′,KA=KB}或由{X′,KA=KB}与aux导出的秘密为(k1,k2);一般而言,k1是一个用于对称加密和解密的密钥,k2是一个MAC认证密钥;用户“A”在发送密文C的同时或发送密文之前,发送用户“A”的公钥证书或身份信息IA,从而得到一个具有发送者身份认证功能的基于口令的密签算法;用得到的基于口令的密签算法加密一个随机数R;记对随机数R的密签为C,密签C为若干个数值的集合;若用户“B”解密出错,则中止执行,返回或不返回出错信息;会话密钥和认证密钥由随机数R及{k1,k2,C,pub}的一个子集利用密钥导出函数导出,或直接将会话密钥和/或认证密钥设为R;记导出的认证密钥为R′;我们假设用户“A”只被允许出错有限次,以防止在线猜测攻击;
如果用户“A”在用户“B”处没有注册口令,则用户“A”计算并发送DH-密钥成分X=gx∈G;此时,实现方法-2的核心和特征是构建两个函数KA和KB使得KA(a,x,B,pub)=KB(b,A,X,pub);具体方法为用户“A”计算用户“B”计算其中,c=H(X,pub)或H(X,B,pub),e=1或H(pub),ti=1或
,1≤i≤2;c的计算依赖于X,e的计算不依赖于X;用户“A”的所有计算均可事先进行;用户“B”可事先计算会话密钥和认证密钥有两种产生方式
(1).会话密钥和认证密钥直接由KA=KB及{c,e,X,pub}的某个子集利用密钥导出函数导出,此时用户“B”检查X′∈G;
(2).或者,将基于Diffie-Hellman或ElGamal的公钥加密算法中的加密者和解密者真正使用的共同Diffile-Hellman秘密由{X,KA=KB}导出,即KDF(KA,X)=KDF(KB,X),或者由{X,KA=KB}与aux导出,aux是{IA,IB,sid,rA,rB,pub}的一个子集,可为空;记由{X,KA=KB}或由{X,KA=KB}与aux导出的秘密为(k1,k2);一般而言,k1是一个用于对称加密和解密的密钥,k2是一个MAC认证密钥;用户“A”在发送密文C的同时或发送密文之前,发送用户“A”的公钥证书或身份信息IA,从而得到一个具有发送者身份认证功能的基于口令的密签算法;用得到的基于口令的密签算法加密一个随机数R;记对随机数R的密签为C,密签C为若干个数值的集合;若用户“B”解密出错,则中止执行,返回或不返回出错信息;会话密钥和认证密钥由随机数R及{k1,k2,C,pub}的一个子集利用密钥导出函数导出,或直接将会话密钥和/或认证密钥设为R;记导出的认证密钥为R′;
ti,1≤i≤2,设置的关键为对于非基于口令的实现,如果用户“B”检查确认X∈G和A∈G,则令t1=t2=1;如果解密者仅检查确认A∈G,X∈G′或X∈G′/1G,而不能确认X∈G,令t1=1,用户“B”检查确认或任何检查不通过,用户“B”则中止协议运行,返回或不返回出错信息;
记导出的认证密钥为R′,为了向用户“A”证明其知道R′,用户“B”利用标签认证函数FT计算并发送tB=FT(R′,auxB),其中对于基于口令的实现auxB是{IB,sid,rB,X′,pub}的一个子集,对于非基于口令的实现auxB是{IB,sid,rB,X,pub}的一个子集,sid是会话标示符,rB是用户“B”的协议角色标示;用户“A”利用认证密钥R′检查tB正确性,若不正确,则中止协议执行,返回或不返回出错信息;
用户“A”采用如下方法向用户“B”证明其的确知道R′用户“A”在发送X′或X的同时或在收到tB并验证tB的正确性后,计算并向用户“B”发送tA=FT(R′,auxA),其中auxA是{IA,sid,rA,X′,pub}或{IA,sid,rA,X,pub}的一个子集且auxA≠auxB,rA是用户“A”的协议角色标示;如果认证密钥是由密签的随机数R导出的,且密签C中已经包含一个标签tE=MACk(E)或一般的tE=FT(k,E),其中E是C中的一个元素或C中除tE之外的其它元素的一个子集,则用户“A”可更高效地向用户“B”证明其知道R′,即用户“A”不发送tA=FT(R′,auxA),而是将密签C中的tE更换为或一般地tA=FT(KR,{E,auxA}),其中auxA是{IA,sid,rA,X′,pub}或{IA,sid,rA,X,pub}的一个子集且auxA≠auxB;KR是由(k,R′,aux)或(k,R,aux)导出或直接设为R′,其中,aux是{IA,IB,sid,rA,rB,X′,pub}或{IA,IB,sid,rA,rB,X,pub}的一个子集,可为空;即KR=KDF({k,R′},aux)或KR=KDF({k,R},aux)或KR=R′;一般地,KR=H(k,R),或或或KR=R′,其中KR的长度取为与k相同;用户“B”检查tA正确性,若不正确,则中止协议执行,返回或不返回出错信息;
实现方法-3实现方法-3适用于客户“A”没有或不便于使用公钥的情形,但是用户“A”仍发送DH-密钥成分X=gx,且用户“B”有公钥B=gb并发送DH-密钥成分Y=gy的情形;
实现方法-3的核心和特征是构建两个函数KA和KB使得KA(x,B,Y,pub)=KB(b,y,X,pub);具体方法为用户“A”计算用户“B”计算其中,c=H(X,pub)或H(X,B,pub),f=H(pub,X,Y)或f=H(pub,B,X,Y)或H(c,Y),ti=1或
,1≤i≤2;注意c的计算依赖于X但不依赖Y,f的计算既依赖于X亦依赖于Y;用户“A”可事先计算
ti,1≤i≤2,设置的关键为(1).如果用户“B”检查确认X∈G,则令t1=t2=1;(2).若用户“B”仅检查确认X∈G′或X∈G′/1G而不能确认X∈G,若y可能会泄露,则令用户“B”检查确认KB=Xt(bc+yf)≠1G,若y不会泄露,则同(1)t1,t2仍可为1;任何检查不通过,则中止协议运行,返回或不返回出错信息;
利用密钥导出函数由KA=KB及{f,c,X,Y,pub}的某个子集导出会话密钥和认证密钥;记导出的认证密钥为R′,为了向用户“A”证明其知道R′,用户“B”利用标签认证函数FT计算并发送tB=FT(R′,auxB),其中auxB是{IB,sid,rB,X,Y,pub}的一个子集,sid是会话标示符,rB是用户“B”的协议角色标示;用户“A”利用认证密钥R′检查tB正确性,若不正确,则中止协议执行,返回或不返回出错信息;为了向用户“B”证明其的确知道R′,用户“A”在收到tB并验证确认tB的正确性后,计算并向用户“B”发送tA=FT(R′,auxA),其中auxA是{IA,sid,rA,X,Y,pub}的一个子集且auxA≠auxB,rA是用户“A”的协议角色标示;用户“B”利用认证密钥R′检查tA正确性,若不正确,则中止协议执行,返回或不返回出错信息;
实现方法-4实现方法-4适用于客户“A”有离散对数公钥A=ga并发送DH-密钥成分X=gx,且用户“B”亦有离散对数公钥B=gb并发送DH-密钥成分Y=gy的情形;
实现方法-4的核心和特征是构建两个函数KA和KB使得KA(a,x,B,Y,pub)=KB(b,y,A,X,pub);具体方法为用户“A”计算用户“B”计算其中,c=H(X,pub)或H(X,B,pub),d=H(pub,Y)或H(pub,A,Y),e=0或1或H(pub),f=H(pub,X,Y)或H(c,d)或H(c,Y)或H(d,X),ti=1或
,1≤i≤4;c、d、e、f设置的关键之处为c的计算依赖于X但不依赖Y,d的计算依赖与Y但不依赖X,e的计算既不依赖X亦不依赖Y,f的计算依赖于(X,Y);用户“A”可事先计算用户“B”可事先计算利用密钥导出函数由KA=KB及{f,c,d,e,X,Y,pub}的某个子集导出会话密钥和认证密钥;
ti,1≤i≤4,设置的关键为(1).若用户“A”检查确认B∈G,Y∈G,用户“B”检查确认A∈G,X∈G,则令t1=t2=t3=t4=1;(2).若用户“A”仅检查确认B∈G,X∈G′或X∈G′/1G,而不能确认X∈G,用户“B”仅检查确认A∈G,Y∈G′或Y∈G′/1G,而不能确认Y∈G,且x和/或y可能会泄露,则令t1=1,用户“B”检查确认或用户“A”检查确认或若x,y均不会泄露,仍同(1)可设t1=t2=t3=t4=1;任何检查不通过,则中止协议运行,返回或不返回出错信息;
记导出的认证密钥为R′,为了向用户“A”证明其知道R′,用户“B”利用标签认证函数FT计算并发送tB=FT(R′,auxB),其中auxB是{IB,sid,rB,X,Y,pub}的一个子集,sid是会话标示符,rB是用户“B”的协议角色标示;用户“A”利用认证密钥R′检查tB正确性,若不正确,则中止协议执行,返回或不返回出错信息;为了向用户“B”证明其的确知道R′,用户“A”在收到tB并验证tB的正确性后,计算并向用户“B”发送tA=FT(R′,auxA),其中auxA是{IA,sid,rA,X,Y,pub}的一个子集且auxA≠auxB,rA是用户“A”的协议角色标示;用户“B”利用认证密钥R′检查tA正确性,若不正确,则中止协议执行,返回或不返回出错信息;
实现方法-5实现方法-5适用于客户“A”和客户“B”其中之一,而非全部,可能没有定义在(G′,G,g,q)上的离散对数公钥,但仍支持数字签名的情形;
令ti=1或
,1≤i≤6;令auxAj,aux′Aj,auxBi,aux′Bi,1≤j≤7,1≤i≤9,分别是是除X=gx,Y=gy之外的其它与协议执行相关的信息的一个子集或序列,可为空或含重复元素;auxA和aux′A是{IA,sid,rA,X,Y,pub}的一个子集,auxB和aux′B是{IB,sid,rB,X,Y,pub}的一个子集且auxA≠auxB,其中sid是会话标示符,rB是用户“B”的协议角色标示,rA是用户“A”的协议角色标示;令
事先计算用户“A”可事先计算X、

;用户“B”可事先计算Y、

第一轮用户“A”发送
第二轮用户“B”计算并发送或或{Y,FT(T′1,auxB),auxB3},或{Y,aux′B3};其中,auxB3包含用户“B”的身份信息IB,auxB2和/或auxB1包含用户“B”的身份信息IB;
用户“A”利用检查T1或FT(T′1,auxB)的正确性,若不正确则中止运行,返回或不返回出错信息;
第三轮若用户“A”具有公钥A=ga∈G,则用户“A”计算并发送或或{FT(T′2,auxA),auxA5};其中,auxA5含用户“A”的公钥证书或IA,auxA2,auxA6含用户“A”的身份信息IA;用户“B”利用和来检查T2或FT(T′2,auxA)的正确性,若不正确则中止运行,返回或不返回出错信息;
若用户“A”不具有公钥A=ga∈G但仍支持数字签名,则用户“A”发送{sA,auxA7},其中auxA7含用户“A”的公钥证书或IA,sA为用户“A”使用自己的私钥对
或H(FT(TSA,auxA),aux′A)的一个数字签名,用户“B”利用和用户“A”的公钥来检查sA的正确性,若不正确则中止运行,返回或不返回出错信息;
第四轮若用户“B”具有公钥B=gb∈G,则用户“B”发送或或{FT(T′3,auxB),auxB7};其中,auxB7含用户“B”的公钥证书或IB,auxB4,auxB8含用户“B”的身份信息IB;用户“A”利用和来检查T3或FT(T′3,auxB)的正确性,若不正确则中止运行,返回或不返回出错信息;
若用户“B”不具有公钥B=gb∈G但仍支持数字签名,则用户“B”发送{sB,auxB9},其中auxB9含用户“B”的公钥证书或IB,sB为用户“B”使用自己的私钥对
或H(FT(TSB,auxB),aux′B)的一个数字签名,用户“A”利用和用户“B”的公钥来检查sB的正确性,若不正确则中止运行,返回或不返回出错信息;
会话密钥由和{X,Y,pub}的一个子集导出;用户“A”可事先计算或
,用户“B”可事先计算或
;若用户“A”事先计算
则在计算完毕后将
删除,而保存
;若用户“B”事先计算
则在计算完毕后将
删除,而保存
ti,1≤i≤6,设置的关键为令若用户“B”检查确认X∈G,则令t1=t4=t5=1;若用户“A”检查确认Y∈G,则令t2=t3=1;若用户“B”仅检查确认X∈G′或X∈G′/1G,而不能确认X∈G且在第四轮不使用签名,则t1,t3,t4,t5至少其中之一为
并检查确认Xhy≠1G和/或Xhb≠1G;若用户“A”仅检查确认Y∈G′或Y∈G′/1G,而不能确认Y∈G且在第三轮不使用签名,则t1,t2,t3,t5至少其中之一为
并检查确认Yhx≠1G和/或Yha≠1G;若用户“A”在第三轮使用签名,则用户“A”可仅检查确认Y∈G′或Y∈G′/1G并可令t3=1;若用户“B”在第四轮使用签名,则用户“B”可仅检查确认X∈G′或X∈G′/1G并可令t1=t5=1;任何检查不通过,则中止协议执行,返回或不返回出错信息;一般而言,令t1=t3=t5=t6。
2.根据权利要求1所述的可基于口令、抗秘密数据泄露的认证和密钥交换方法,其特征在于基于口令的公钥加密和密签方法
设客户“A”在用户“B”处注册了一个口令w,用户“B”具有公钥B=gb∈G并且支持以其公钥B为公钥的基于Diffie-Hellman或ElGamal的公钥加密算法,其中任一合法的密文C包括一个用于和公钥B生成Diffie-Hellman秘密的DH-密钥成分X=gx∈G′;即X=gx用来在加密者和解密者,即用户“B”,之间生成一个共同的Diffie-Hellman秘密Btx=gtbx=Xtb∈G′,即用户“A”计算Btx∈G′,用户“B”计算Xtb∈G′,其中,t=1或
;一般而言,加密和解密真正使用的共同秘密是由{X,Btx=Xtb}利用密钥导出函数导出,即KDF(Btx,X)=KDF(Xtb,X);
基于口令的公钥加密具体方法为将基于Diffie-Hellman或ElGamal的公钥加密算法中的用于生成Diffie-Hellman秘密的DH-密钥成分X=gx∈G换为X′=gxBβ∈G′;如下计算基于Diffie-Hellman或ElGamal的公钥加密算法中的关于(X,B)的Diffie-Hellman秘密Btx=gtbx=Xtb=(X′B-β)tb=X′tbB-tβb∈G′,即用户“A”计算KA=Btx∈G′,而用户“B”计算KB=X′tbB-tbβ∈G′或KB=(X′B-β)tb∈G′;加密者和解密者真正使用的共同秘密由{X′,KA=KB}导出,即KDF(KA,X′)=KDF(KB,X′),或者由{X′,KA=KB}与aux导出,aux是{IA,IB,sid,rA,rB,pub}的一个子集,可为空;其中,β为w并将w编码为Zq中的一个元素;或者,β为Hw(W),其中W为{w,IA,IB,B,pub}或{w,X′,IA,IB,B,pub}的一个包含w的子集,Hw是一个输出长度小于q的长度的哈希函数,Hw一般设置为哈希函数H输出的一个短的子串;其中,t=1或
;若β为w或Hw(W)且W为{w,IA,IB,B,pub}的一个包含w的子集,用户“B”事先计算B-tbβ∈G′和/或Btbβ∈G′,并将B-tbβ和/或Btbβ存储在对应于用户“A”的数据库条目中;即在用户“A”向用户“B”注册口令w时,用户“B”计算β,B-tbβ∈G′和/或Btbβ∈G′,删除掉β并将B-tbβ和/或Btbβ存储于数据库中用户“A”所对应的条目中,而不是直接存放口令w或β;为防止离线攻击,用户“A”在X′,Btx计算完毕后删除x,而w,β,Bβ或者马上删除或者存储在安全的位置;用户“A”的计算均可事先进行;一般而言,如果解密者,即用户“B”,检查确认X′∈G,则令t=1,如果解密者仅检查确认X′∈G′或X′∈G′/1G而不能确认X′∈G,则令并检查确认X′tb≠Btbβ或KB≠1G或(X′B-β)t≠1G;任何检查不通过,用户“B”中止协议运行,返回或不返回出错信息;用户“A”在发送密文的同时或发送密文之前,发送用户“A”的身份信息IA;经此修改后的基于Diffie-Hellman或ElGamal的公钥加密算法称为基于口令的Diffie-Hellman或ElGamal公钥加密算法;
基于口令的密签具体方法为设客户“A”具有公钥A=ga∈G,并在用户“B”处注册了一个口令w;将基于Diffie-Hellman或ElGamal的公钥加密算法中的用于生成Diffie-Hellman秘密的DH-密钥成分X=gx∈G换为X′=gxBβ∈G′;其中,β为w并将w编码为Zq中的一个元素,或者,β为Hw(W),其中W为{w,IA,A,IB,B,pub}的一个包含w的子集;用户“A”计算用户“B”算或或或其中,c=H(X′,pub)或H(X′,B,pub),e=1或H(pub),ti=1或
,1≤i≤2;
用户“A”的所有计算均可事先进行,并在{β,X′,KA}计算完毕后删除x,而w,β,Bβ或者马上删除或者存储在安全的位置;用户“B”可事先计算若β的计算不涉及X′用户“B”还可事先计算或/和B-bβ∈G′;用户“B”将
或B-bβ或


的一个子集存储在用户“A”对应的数据库条目中,必要时加密存放,而不是直接存放口令w或β,此时KB的计算为或若用户“B”不事先计算或B-bβ∈G′,用户“B”将
安全存储在用户“A”对应的数据库条目中,必要时对
进行加密存放,其中β∈{w,Hw(W)},此时KB的计算为
一般而言,如果用户“B”检查确认X′∈G和A∈G,则令t1=t2=1;如果解密者仅检查确认A∈G,X′∈G′或X′∈G′/1G,而不能确认X′∈G,令t1=1,用户“B”检查确认和/或或或或或或任何检查不通过,则中止协议运行,返回或不返回出错信息;
将KA=KB替换基于Diffie-Hellman或ElGamal的公钥加密算法中的Diffie-Hellman秘密Btx=gtbx=Xtb,即将Btx替换为KA,将Xtb换为KB,从而得到基于口令的密签算法。
3.根据权利要求1所述的可基于口令、抗秘密数据泄露的认证和密钥交换方法,其特征在于不可锻造的知识绑定证明方法
设A=ga∈G和X=gx∈G为一个用户,即知识绑定证明者“A”,的公钥和DH-密钥成分,针对一个验证者“B”给出的一个挑战Z=gz∈G′,“A”使用如下方法向验证者证明其的确知道a∈Zq和x∈Zq;其中,A,X,Z的发送顺序任意,即用户“A”既可以作为协议初始者亦可以作为协议响应者;
用户“A”计算并向用户“B”发送tA=FT(R′,auxA),其中auxA是{IA,sid,rA,X,Z}的一个子集,IA是用户“A”的身份信息,sid是会话标示符,rA是用户“A”的协议角色标示,认证密钥R′由KA=KB导出;知识绑定证明的核心是计算KA=KB的方法;其中,用户“A”计算KA,用户“B”计算KB,pub包含用户“A”和“B”的身份和公钥信息;
(1).其中,若挑战Z是随机的,则h1=H(Z,pub),若挑战Z是固定的公钥,则h1=H(pub,Z)或H(pub)或1;h2=H(X,Z,pub)或h2=H(h1,X);ti=1或
,1≤i≤2;一般而言,R′=KDF(KA,h2)=KDF(KB,h2);若用户“A”检查确认Z∈G,则令ti=1,1≤i≤2;若用户“A”仅检查确认Z∈G′/1G或Z∈G′,而不能确认Z∈G,则令1≤i≤2,并且用户“A”进一步检查确认KA≠1G;任何检查不通过,用户“A”中止协议运行,返回或不返回出错信息;
(2).KA=H(U,H(IA,Z,Zta),H(O,Ztx),aux),KB=H(U,H(IA,Z,Atz),H(O,Xtz),aux),其中t=1或
,U=(X,Z)或若用户“A”先发送X用户“B”后发送Z,则O=(X,Z),若用户“B”先发送Z用户“A”后发送X,则O=(Z,X);或者,KA=H(U,Zta,Ztx,aux),KB=H(U,Atz,Xtz,aux),t=1或
;aux是除X,Z之外的其它与协议执行相关的信息的一个子集或序列,可为空;验证者“B”可事先计算H(IA,Z,Atz)或Atz;若用户“A”检查确认Z∈G,则令t=1;若用户“A”仅检查确认Z∈G′/1G或Z∈G′,而不能确认Z∈G,则令并且用户“A”进一步检查确认Zta≠1G和/或Ztx≠1G;任何检查不通过,用户“A”中止协议运行,返回或不返回出错信息。
4.根据权利要求1所述的可基于口令、抗秘密数据泄露的认证和密钥交换方法,其特征在于如下抗临时秘密数据泄露的方法
抗临时秘密数据泄露的方法设A=ga∈G和X=gx∈G为一个用户,即知识绑定证明者“A”,的公钥和DH-密钥成分,设Z=gz∈G为验证者“B”的一个挑战,如下抗临时秘密数据泄露的方法适用于所有需计算Zta=Atz及Ztx=Xtz的协议;t=1或
;若证明者“A”先发送X验证者“B”后发送Z,则O=(X,Z),若“B”先发送Z用户“A”后发送X,则O=(Z,X);
具体方法为将原协议中的Zta=Atz替换为H(IA,Z,Zta=Atz,aux1)将Ztx=Xtz替换成H(O,Ztx=Xtz,aux2);auxj,1≤j≤2,分别是除X,Z之外的其它与协议执行相关的信息的一个子集或序列,可为空;即用户“B”将Atz替换为H(IA,Z,Atz,aux1),将Xtz替换成H(O,Xtz,aux2);用户“A”将Zta替换为H(IA,Z,Zta,aux1),将Ztx替换成H(O,Ztx,aux2);
验证者“B”可事先计算H(IA,Z,Atz,aux1);验证者仅保存{z,H(IA,Z,Atz,aux1),H(O,Xtz,aux2)}的一个子集作为临时秘密数据,而删除掉Atz和/或Xtz;证明者“A”仅保存{x,a,H(IA,Z,Zta,aux1),H(O,Ztx,aux2)}的一个子集作为临时秘密数据,而删除掉Zta和/或Ztx;这种方法与权利要求1的实现方法-5结合使用,其中用户“A”和“B”既是证明者又是验证者,X是对用户“B”的挑战,Y是对用户“A”的挑战。
5.根据权利要求1、2、3、4所述的认证和密钥交换、基于口令的公钥加密和密签、及知识绑定证明和抗临时秘密泄露的方法,其特征在于可应用如下公钥注册和公钥证书颁发方法的某个子集以简化计算
(1).公钥证书颁发机构CA在向用户颁发证书时,检查确认用户注册的公钥为G中的元素或为G/1G中元素;任何检查不通过,证书颁发机构拒绝颁发公钥证书;这样,每个用户只需检查对方用户的公钥证书即可确认对方的公钥为G或G/1G中的元素;
(2).用户在向公钥证书颁发机构注册用户身份信息ID和公钥PK∈G′时,同时提交公钥的逆元PK-1∈G′;即除ID和PK∈G′外,公钥证书还包括PK-1∈G′;
(3).用户在向公钥证书颁发机构注册用户身份信息和公钥时,同时提交身份信息和公钥和aux的哈希值,或者,身份信息和公钥及公钥逆元和aux的哈希值;提供或不提供对得到的哈希值和/或aux的使用注册公钥对应的私钥的数字签名;其中,aux是协议其它信息时间戳、会话标示符等的一个子集,可取为空值;记哈希值为tPK,数字签名为sPK;即,公钥证书同时包括tPK和aux的一个子集,但包括或不包括sPK;
(4).若公钥颁发机构检查发现tPK或sPK错误,则拒绝颁发证书;公钥证书颁发机构在向用户颁发证书时,对用户的身份信息、公钥和/或其逆元、aux、哈希值tPK、和或无sPK进行数字签名;或者,CA仅对哈希值tPK进行数字签名;而不是仅仅对用户的身份信息和公钥进行签名;即合法的公钥证书必须同时包含证书颁发机构的数字签名;
这样,哈希函数或密钥导出函数输入或pub所包含的(IA,A)或A可换为在用户“A”公钥证书中的哈希值,记为tAPK;哈希函数或密钥导出函数输入或pub所包含的(IB,B)或B可换为用户“B”公钥证书中的的哈希值,记为tBPK;并且,若公钥证书包含用户公钥的逆元,则在权利要求1的实现方法-1和实现方法-2中,用户“A”和“B”不需事先计算B-1∈G′。
6.根据权利要求1、2、3、4所述的认证和密钥交换、基于口令的公钥加密和密签、及知识绑定证明和抗临时秘密泄露的方法,其特征在于可应用如下变体的某个子集
(1).基于口令的变体权利要求1的实现方法-3和实现方法-4有如下基于口令的变体;设用户“A””在用户“B”处注册了一个口令w;在所有方法中用户“A”所发送DH-密钥成分X′=XBw或X′=XB-w,或者或
,或者

;其中B为用户“B”的公钥,X=gx∈G′,Hw是一个输出长度小于q的长度的哈希函数;收到X′后,用户“B”根据X′的相应计算方式计算出X=X′B-w或X=X′Bw,或者

,或者

;KA,KB,tA,tB计算仍使用X作为指数下的挑战,但指数上的函数c,d,e,f的输入中的X可换为X′;除其它规定的事先离线计算外,若或
,用户“A”可事先计算B-1∈G′;若X′=XBw或X′=XB-w,用户“B”可事先计算B-1∈G′;在基于口令的变体中,如果用户“A”的公钥和X′均被检查确认为G或G/1G中的元素,则所有指数上的ti取为整数1;在实现方法-3中,若用户“B”仅检查确认X′∈G′或X′∈G′/1G,而不能确认X′∈G,则令且用户“B”检查确认KB≠1G;任何检查不通过,则中止协议运行,返回或不返回出错信息;
(2).哈希函数的输入中嵌套相同或不同的哈希函数,即将原哈希函数的输入和嵌套的哈希函数作为一个特殊的有向图的节点,其中原哈希函数的输入代表的节点无扇入,最外层的哈希函数所代表的节点无扇出,每个节点所代表的数值是其扇出节点所代表的哈希函数的输入;
(3).将哈希函数输入的顺序任意变化;和/或,将哈希函数的所有输入换为所有输入的并集,即重复的元素在输入中只出现一次;和/或,将哈希函数换为任一个输出为整数的函数;和/或,应用在每一处的哈希函数与应用在其它处的哈希函数相同或不同;即,我们使用一组哈希函数{H1,H2,…Hn},其中对于任意的i,j,1≤i,j≤n,i≠j,Hi=Hj或Hi≠Hj,n≥1且n是我们需应用哈希函数的次数的上界;
(4).不同的密钥导出函数应用在每一处的密钥导出函数与应用在其它处的密钥导出函数相同或不同;即,我们使用一组密钥导出函数{KDF1,KDF2,…KDFn},其中对于任意的i,j,1≤i,j≤n,i≠j,KDFi=KDFj或KDFi≠KDFj,n≥1且n是我们需应用密钥导出函数的次数的上界;
(5).在所有方法中用户“A”检查KA≠1G,用户“B”检查KB≠1G;
(6).对于基于椭圆曲线的实现,将密钥导出函数输入中的KA,KB换为KA,KB的x-坐标值或y-坐标值;每个用户检查对方用户的DH-密钥成分的x-坐标和y-坐标是椭圆曲线所基于的有限域中的正确编码的元素;
(7).出错中止和出错信息返回在所有的方法中,一旦一个用户因检查不通过,即出错,而中止协议,发回或不发回出错信息;在基于口令的实现方法中,客户“A”只允许出错有限次,以防止在线攻击;
(8).会话标示符和用户协议角色标示方法会话标示符一般由用户“A”和“B”发送的两个随机数或DH-密钥成分以初始者-响应者的顺序串联构成;用户的协议角色标示一般用不同的整数或者由用户“A”和“B”发送的随机数或DH-密钥成分的不同顺序来标示。
全文摘要
本发明属于密码协议,具体涉及一类可基于口令、抗秘密数据泄露的认证和密钥交换方法。发明方法在保护用户口令、抗秘密数据泄露、更好地保护用户隐私、更好的在线计算效率、更少的通信带宽、以及更高的安全性方面优于相关美国或国际当前标准。发明的认证和密钥交换方法包含创新的基于口令的公钥加密和密签方法、知识绑定证明方法、抗临时秘密数据泄露方法、公钥证书颁发方法等子方法。发明方法具有良好的系统性、适应性、兼容性。
文档编号H04L29/06GK101626364SQ20081004031
公开日2010年1月13日 申请日期2008年7月8日 优先权日2008年7月8日
发明者赵运磊, 姚期智, 枫 储, 丁素芬 申请人:赵运磊, 姚期智, 枫 储, 丁素芬
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1