发明内容
为解决上述问题,本发明提供了一种身份隐藏的签密方法,所述方法包括:
第一设备根据其生成的DH-指数x∈Zq和第一设备的公钥A=ga∈G,第一辅助信息auxA其可为空的数据集合,以及第一设备需加密传输的数据集合DataA,确定第一参数X′=Agx∈G,其中X=gx∈G,x=hd(rA,auxd),是一个转换函数,1≤Ld≤|q|,|q|表示q的二进制长度, g表示有限群G′的循环子群G的阶为q的生成元,a∈Zq是第一设备的私钥,IA表示第一设备的身份,CERTA是第一设备的公钥证书,CERTB是第二设备的公钥证书,IB表示第二设备的身份,B=gb∈G是第二设备的公钥,b∈Zq是第二设备的私钥,所述第一设备根据(a,x,IB,B,CERTB)以及辅助信息auxA确定预先共享密钥S,根据S以及{X′,auxA,IA,A,IB,B}的一个子集利用密钥导出函数KDF确定第一设备和第二设备的加密密钥KA和KB以及辅助密钥K′,其中KA和KB相等或不等且K′可为空,第一设备计算CA=AE(KA,(IA,A,CERTA,rA,auxE,DataA)),其中AE是一个对称加密算法,第一设备将{X′,auxA,CA}发送给第二设备;其中若仅需第一设备向第二设备发送加密信息,可以令KA=KB并令辅助密钥K′为空;若发明签密方法用于认证密钥协商,可以利用辅助密钥K′以及{X′,auxA,IA,A,IB,B,rA,tA,DataA}的一个子集导出会话密钥;
收到第一设备发送过来的{X′,auxA,CA)后,第二设备根据其私钥b∈Zq以及{X′,auxA),确定预先共享密钥S,根据S以及{X′,auxA,IA,A,IB,B}的一个子集利用密钥导出函数KDF确定第一设备和第二设备的加密密钥KA和KB以及辅助密钥K′,所述第二设备利用KA解密接收到的所述CA得到(IA,A,CERTA,rA,auxE,DataA),验证公钥证书CERTA和第一参数X′的有效性,若验证结果不正确则终止运行,若验证结果正确则接受DataA,并可用第二设备的加密密钥KB来加密DataB,其中DataB为第二设备需加密传输至第一设备的可为空的数据集合,或者利用辅助密钥K′以及{X′,auxA,IA,A,IB,B,rA,tA,DataA}的一个子集导出会话密钥。
根据本发明的一个实施例,
为空或包含一个时间戳和/或第二设备的身份和/或公钥信息,hd是一个哈希函数或hd的输出是X的x-轴坐标或X的x-轴坐标的一个函数;在实际应用中,可以将第二设备的身份和/或公钥信息和/或DataA也作为hd输入的一部分;
和/或,auxA包含第一设备生成的随机数和/或时间戳和/或第一设备的身份信息和/或第一设备的IP地址信息和/或第二设备的IP地址信息和/或第二设备的身份信息,或auxA为空;
和/或,根据所需达到的安全强度需要,x的长度|x|可变,即:0<|x|≤|q|,其中|q|表示的是q的长度;
和/或,所述第二设备确定出S后,还判断S是否为G′中的单位元,如果S为单位元,则停止执行后续步骤,否则继续后续步骤;和/或,所述第一设备确定出S后,还判断S是否为G′中的单位元,如果S为单位元,则重新计算生成第一参数X′直到S≠lG,否则继续后续步骤;
和/或,AE是一个对称认证加密算法。比如,AE是一个对称认证加密算法,AE可以是确定待状态或随机的算法,并可是带有联合信息的认证加密函数(authenticatedencryptionwithassociateddata,AEAD)并可以提供消息长度隐藏功能。
根据本发明的一个实施例,
|x|=[|q|/2]或|x|=[|q|/2]+1或|x|=[|q|/4]或|x|=|q|,其中对于一个实数α,若α是小数则|[α]表示的是α的向上或向下取整。
根据本发明的一个实施例,
所述第一设备和/或第二设备所述根据如下表达式确定第一设备和第二设备的认证加密密钥KA和KB,
{KA,KB,K′}←KDF(S,aux)
其中,KDF是密钥导出函数,K′∈{0,1}*表示辅助密钥,可为空;
所述第一设备和第二设备由K′或S以及 导出会话密钥。
根据本发明的一个实施例,
所述第二设备根据如下表达式确定S:
S=X′td
所述第一设备根据如下表达式确定S:
S=B(a+x)t
其中,t表示伴随因子,即群G′的阶除以群G的阶的商。
根据本发明的一个实施例,
所述第二设备根据如下表达式确定S:
S=X′b
所述第一设备根据如下表达式确定S:
S=B(a+x)。
根据本发明的一个实施例,
所述第二设备在在确定S前,先检测第一参数X′∈G是否成立,若不成立,则停止执行后续步骤;
且/或,所述第一设备在在确定S前,先检测第二参数B∈G是否成立,若不成立,则停止执行后续步骤。
根据本发明的一个实施例,
所述第二设备验证第一参数X′的有效性的方法如下:根据方法约定计算x=hd(IA,A,X,aux′d),然后验证X′=Agx∈G′。
在现有的签密方法中,第一设备的身份和公钥信息需明文传输,或第一用户至少运行2个模指数运算,第二用户至少运行3个模指数运算。而在本发明所提供的签密方法中,第一用户的身份和公钥信息进行了隐藏;并且第一设备仅需运行2个模指数运算,而第二设备仅需运行2个模指数运算。另外,本发明方法耗费的带宽比现有签密方案更少。这不仅保护了第一设备的身份隐私,也极大地减少了各个设备的数据计算量,提高了计算和传输效率,同时更强化了安全性,并在应用上具有更为优良的灵活性。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
具体实施方式
以下将结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以相互结合,所形成的技术方案均在本发明的保护范围之内。
同时,在以下说明中,出于解释的目的而阐述了许多具体细节,以提供对本发明实施例的彻底理解。然而,对本领域的技术人员来说显而易见的是,本发明可以不用这里的具体细节或者所描述的特定方式来实施。
另外,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤(尤其是在验证一组数据的有效性时,数据有效性验证的顺序是可变的)。
在密码技术中,G表示一个有限群G′的一个循环子群,其中有限群G′和循环子群G的阶分别为N和q,g是循环子群G的生成元。lG表示有限群G′的单位元,其中,G/lG表示循环子群G中除了单位元lG之外的所有元素所构成的集合,G′/lG表示由有限群G′减去单位元lG之后其他元素的集合(即有限群G′中非lG的集合)。对于任意元素X∈G′,X-1表示元素X相对于有限群G′的逆元,即XX-1=lG。
一般而言,循环子群G的阶q为一个大的素数。典型地,|q|为256或512,其中|q|表示q以2进制表示时的长度。Zq为数字集合{0,1,2,...,q-1},而则表示数字集合{1,2,...,q-1}。
为了表述的方便,本发明中,采用乘法表示(multiplicativerepresentation)群上的操作,即有限群G′和循环子群G为乘法群。当然,本方法也可以等价地应用到加法群上,例如椭圆曲线以及其他代数群或具体的群、有限域、复数或复合模(compositemoduli)等。
一般而言,对于乘法群上的操作,指数上的操作是对q的求模,而群上元素的操作是对N或N+1求模操作或其他操作以保证操作的结果是有限群G′或循环子群G中的元素。例如,gx通常指的是gxmodq,gxgy通常表示的是gxgy∈G′,x+y∈Zq表示的是(x+y)modq,xy∈Zq表示的是(xy)modq。
本实施例中,参数G、q和g,所使用的认证加密算法AE及其密钥长度,所使用的AE、KDF等算法,第一参数X′的具体计算方式,第二参数Y′的具体计算方式,参数Ld,Le,L,hd,he会话密钥长度,以及auxA,auxB,aux,auxK,auxh,auxe,DataA,DataB,具体取值和设置方式等可以在发明方法运行之前确定并在运行方法的用户或设备之间达成一致,抑或是运行发明方法的用户和设备在协议运行之前或之中交换和协商这些参数并达成一致,本发明不限于此。
如果离散对数假设在循环子群G上成立,即给定X=gx∈G(其中,x从数字集合中随机选取,LA≤|q|标示0-1串的长度),没有概率多项式时间的算法能够以不可忽略的概率由X求出x。
在后续的描述中,采用IA和IB来标示不同用户或设备的逻辑或区别性的身份(例如名字、设备序列号、email、IP地址或是方法运行中的角色等)。而这些身份标示可可能伴随、包含或包含于一个数字证书。
本实施例中,具有身份标示IA的第一设备具有与之对应的公钥A。本实施例中,A=ga∈G。其中,a标示第一设备的私钥,其可以由第一设备在 中随机选取。
相应地,本实施例中,具有具有身份标示IB的第二设备具有与之对应的公钥B。本实施例中,B=gb∈G。其中,b标示第二设备的私钥,其可以由第二设备在 中随机选取。
需要指出的是,在没有特别说明的情况下,公钥A与第一设备的绑定以及公钥B与第二设备的绑定,是由一个可信第三方机构来执行。例如对于第一设备,可信第三方机构通常会检查第一设备的身份标示IA的有效性以及对应公钥A的有效性,然后对(IA,A)做一个数字签名,并将(IA,A)以及可信第三方所生成的数字前景形成一个针对(IA,A)的公钥证书,即为CERTA。
图1示出了本实施例所提供的签密方法的流程图。
如图1所示,在本实施例中,第一设备首先根据其公钥A和第一设备的DH密钥成分X的离散对数(即DH-指数)x,确定第一参数X′。本实施例中,第一设备的公钥A可以采用如下表达式确定的道:
A=ga(1)
其中,a表示第一设备的私钥。
第一参数X′可以根据如下表达式计算得到:
X′=Agx,x=hd(IA,A,Ib,B,tA,rA)(2)
其中tA是一个时间戳信息,rA∈Zq是第一设备秘密选取的随机数,d的长度,即Ld,设置为|q|/2。其中,其中(IA,A)可以用CERTA或CERTA的哈希来替换,(IB,B)可以用CERTB或CERTB的哈希来替换。在实际应用中,建议将DataA的部分或全部也作为hd输入的一部分。
得到参数X′后,第一设备计算
S=B(a+x)t(3)
其中,t表示伴随因子,它是群G′的阶除以群G的阶的商。若S=lG则第一设备重新计算第一参数X′,直到S≠lG。若S≠lG,则计算
KA←KDF(S,X′||IB)(4)
其中,KDF表示密钥导出函数。一般而言,KDF既然可以是一个哈希函数或哈希函数序列(例如HMAC,HKDF等),也可以是一个以预先共享密钥S为随机种子的伪随机函数。第二设备计算
CA=AE(KA,(IA,A,CERTA,tA,rA,DataA))(5)
其中,DataA表示第一设备需要进行加密传输的可为空的部分数据,AE是一个认证加密函数,其可以是确定的、或随机的、或带状态的,并可是带有联合信息的认证加密函数(authenticatedencryptionwithassociateddata,AEAD)并可以提供消息长度隐藏功能。若AE是带有联合信息的认证加密函数,X′和/或auxA的部分(比如第一和/或第二用户的IP地址)或全部可以作为联合信息的一部分。
本实施例中,DataA为除用户身份IA、公钥A、公钥证书CERTA以外的其他与协议执行相关的信息的一个子集或序列,其可以为空或包含重复元素。本实施例中,其它与协议执行相关的信息包括以下所列项中的任一项或几项:
用户需传输或认证的消息,全部或部分系统参数,参数{|x|,Lh,|rA|,L},参数协议初始者和响应者的标示、IP地址、协议版本,安全参数和密钥参数,协议的会话标志符,用户交换的随机数,时间戳,cookie,认识数值,以及其他协议会话需要传输的信息(例如参数X′和/或参数Y′)等。
需要指出的是,本实施例中,AE(KA,(IA,A,CERTA,X,tA,DataA)指的是先将集合{IA,A,CERTA,X,tA,DataA}中的所有元素按照预设顺序(该预设顺序可以任意,但是需要协议交换的双方均实现知晓并达成一致)连接,例如得到MA=IA||A||CERTA||X||tA||DataA;随后将MA按照预设编码规则编码成二进制,并将得到的二进制编码利用KA进行认证加密。
第一设备将{X′CA,auxA}发送给第二设备。其中,auxA表示第一设备生成的辅助信息(即第一辅助信息)。本实施例中,第一辅助信息auxA为除第一设备的身份标示、公钥以及公钥证书信息之外的其他与协议执行相关的信息的一个子集或序列。
需要指出的是,在本发明的不同实施例宗,第一辅助信息auxA既可以为空,也可以包含重复元素,本发明不限于此。当第一辅助信息auxA为空时,第一设备也就是将第一参数X′发送给第二设备。当第一辅助信息auxA不为空时,第一辅助信息auxA所包含的信息可以包括以下所列项中的任一项或几项:第一设备的IP地址、第二设备的IP地址、第一设备发送的其他随机数和会话标识符sid等。并且,auxA的一个子集或全部可以作为hd的输入一部分,和/或auxA不公开传输,而是auxA的一个子集或全部作为DataA
第二设备接收到第一设备发送来的{X′,auxA,CA}后,计算
S=X′tb(6)
若S=lG,第二设备终止方法运行;若S≠lG,第二设备计算
KA←KDF(S,X′||IB)(7)
(IA,A,CERTA,tA,rA,DataA)←DE(KA,CA)(8)
其中,DE表示对应于认证加密函数AE的解密函数。第二设备计算计算,检查tA及CERTA的有效性,计算x=hd(IA,A,IB,B,tA,rA)并检查X′=Agx∈G是否成立,若X′=Agx∈G成立则接受DataA。
本实施例中,KA∈{0,1}L表示第一设备使用的认证加密的密钥,其用于认证加密第一设备发送给第二设备的信息,其中L表示的是认证加密函数密钥的长度。KB∈{0,1}L表示第二设备使用的认证加密的密钥,其用于认证加密第二设备发送给第一设备的信息。K′∈{0,1}*是额外导出密钥。需要指出的是,根据应用场景,额外导出密钥K′可以为空。在本发明的不同实施例中,密钥KA与密钥KB既可以相同,也可以不同。需要说明的是,在本发明的不同实施例中,会话密钥和认证密钥既可以由同一个密钥导出函数在相同的输入上导出,也可以由同一密钥导出函数在不同的输入上分别导出。此外,会话密钥和认证密钥还可以由不同的密钥导出函数在相同的输入上或不同的输入上分别导出。在图1所示的实施例中,会话密钥可以由K′和auxK={X′,IA,IB,rA}导出,或 在应用中,auxK还可以包含和/或rB,其中或rB∈auxB或rB∈DataB。在图1所示的实施例中,DataA包含一个时间戳信息tA。
需要指出的是,在上述描述中,第一设备和第二设备还可以采用其他合理的方式来计算预先共享密钥S,本发明不限于此。
例如在本发明的其他实施例中,第二设备还可以采用如下表达式来计算预先共享密钥S:
S=X′b(9)
相应地,第一设备则根据如下表达式计算预先共享密钥S:
S=Ba+x(10)
需要说明的是,在该实施例中,第一设备和/或第二设备还在得到预先共享密钥S后,可不对预先共享密钥S是否为单位元进行检验的,但是此时第二设备需要在计算预先共享密钥S前检查确认X′∈G是否成立(建议第一设备也检查确认B∈G)。如果成立,则继续进行后续步骤,否则终止执行后续步骤。
同时,还需要指出的是,在本发明的其它实施例中,还可以采用其它合理方式来计算第一参数X′,本发明同样不限于此。
需要说明的是,在本实施例中,DH-指数x满足如下表达式:
|x|=[|q|/2]+1(11)
即,DH-指数x等于有限群G′的循环子群G的阶q的二进制长度的一半取整加一(在不同实施例中,可以为向上取整,也可以为向下取整)。
需要说明的是,在本发明的其他实施例中,DH-指数x和DH-指数y的二进制长度还可以为其他合理值,本发明不限于此。例如在本发明的其他实施例中,DH-指数x和DH-指数y长度还可以满足如下表达式:
|x|=[|q|/4]或|x|=|q|(12)
需要说明的是,在本实施例中,上述参数、函数、算法、用户角色标示以及会话标示符号的表示方法、密钥导出机制以及参数auxA,auxK等,均可以由协议运行双方(即第一设备和第二设备)基于预设机制协商确定。然而参数|x|和rA的长度可以有第一设备单独确定。
在现有的签密方法中,第一设备的身份和公钥信息需明文传输,或第一用户至少运行2个模指数运算,第二用户至少运行3个模指数运算。而在本发明所提供的签密方法中,第一用户的身份和公钥信息进行了隐藏;并且第一设备仅需运行2个模指数运算,而第二设备仅需运行2个模指数运算。另外,本发明方法耗费的带宽比现有签密方案更少。这不仅保护了第一设备的身份隐私,也极大地减少了各个设备的数据计算量,提高了计算和传输效率,同时更强化了安全性,并在应用上具有更为优良的灵活性。
应该理解的是,本发明所公开的实施例不限于这里所公开的特定处理步骤,而应当延伸到相关领域的普通技术人员所理解的这些特征的等同替代。还应当理解的是,在此使用的术语仅用于描述特定实施例的目的,而并不意味着限制。
说明书中提到的“一个实施例”或“实施例”意指结合实施例描述的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,说明书通篇各个地方出现的短语“一个实施例”或“实施例”并不一定均指同一个实施例。
虽然上述示例用于说明本发明在一个或多个应用中的原理,但对于本领域的技术人员来说,在不背离本发明的原理和思想的情况下,明显可以在形式上、用法及实施的细节上作各种修改而不用付出创造性劳动。因此,本发明由所附的权利要求书来限定。