向两方协作式用户部件签发隐式数字证书的计算方法和系统与流程

文档序号:29028329发布日期:2022-02-24 10:44阅读:187来源:国知局
向两方协作式用户部件签发隐式数字证书的计算方法和系统与流程

1.本发明涉及密码应用领域,特别涉及隐式数字证书系统和椭圆曲线密码算法的两方协作式计算方案。


背景技术:

2.基于公钥密码学的x.509标准数字证书,广泛应用于信息安全。根据公钥密码学原理,ca(certification authority、简称ca,本发明又称为“证书签发部件”)和用户分别生成自己的公私密钥对,ca利用自己的私钥、对用户的数字证书执行数字签名操作。在x.509数字证书中,包含了用户身份标识、公钥、其它的数字证书辅助信息、以及ca的数字签名。数字证书的使用者,预先安装有ca的公钥。当数字证书使用者接收到用户的x.509数字证书,就利用ca公钥验证数字签名的有效性,验证通过之后,就可以获得该用户的公钥、进而在此基础上执行各种公钥密码学的计算操作(例如,公钥加密、数字签名验证等)、实现信息安全功能。在x.509标准数字证书中,ca的数字签名保证了用户的数字证书源自于可信的ca、不会在传输过程中被恶意篡改;对数字证书的任何微小改动,都会导致ca数字签名验证不通过。
3.隐式数字证书(implicit certificate)是不同于x.509标准的另一种标准格式的数字证书。在隐式数字证书中,并没有ca的数字签名,仅包含了用户身份标识、公钥、其它的数字证书辅助信息。相比x.509标准的数字证书,隐式数字证书的数据量更小,更适用于通信带宽资源有限的场景。隐式数字证书通过如下的特殊使用过程,保证隐式数字证书源自于可信的ca、不会在传输过程中被恶意篡改:数字证书使用者并不是直接地使用隐式数字证书所包含的公钥,而是将该公钥与ca公钥进行计算、得到用户的公钥;也就是,用户的公钥与ca公钥具有一定的内在关系;相应地,用户的私钥也与ca私钥有一定的内在关系;所以,如果用户能够持有相应的私钥、则表明用户已经从ca获得了“用户私钥贡献值”、通过了ca的验证。用户私钥贡献值,由ca利用自己的私钥计算得到,然后发送给用户。具体的隐式数字证书签发和使用过程见下文详述。对用户的隐式数字证书的任何微小改动,都会导致用户的公私密钥对不匹配。
4.隐式数字证书适用于椭圆曲线密码算法,用户的公私密钥对是满足椭圆曲线密码算法要求的公私密钥对。椭圆曲线密码算法的两方协作式计算方案,能够有效提高椭圆曲线密码算法在应用中的安全性:将用户的私钥以拆分的形式存储在两个独立的用户部件中(每一个用户部件掌握的部分私钥数据,称为子私钥)。每一次用户私钥的数字签名操作或者解密操作,都需要两个用户部件协作、两份子私钥参加计算;而且,在协作计算过程中,每一个用户部件都无法获取到另一用户部件所掌握的子私钥的任何信息、也无法获取到用户私钥整体的任何信息。
5.根据国际标准sec 4: elliptic curve qu-vanstone implicit certificate scheme (ecqv),隐式数字证书的各种操作描述如下。我们先定义本发明使用的标号如下:1.g,表示椭圆曲线的基点;
2.[k]g,表示椭圆曲线的基点g的k倍点运算;3.[k]p,表示椭圆曲线点p的k倍点运算;4.n,表示椭圆曲线的阶;5.mod n,表示模n运算;6.d-1 mod n,表示d模n的逆元,有d*d-1 = 1 mod n;7.+,表示整数加法运算或者椭圆曲线点加法运算,在使用中,根据操作数的类型选择相应的运算;8.*,表示整数乘法运算;9.hash(),表示杂凑函数;10.cert,表示用户的隐式数字证书,cert包含用户身份标识u、椭圆曲线点坐标p和其它的数字证书辅助信息m,有cert = encode(u, p, m)、其中encode表示按照标准格式进行编码;11.r,表示用户私钥贡献值。
[0006]
ca的公私密钥对是:私钥q;公钥q = [q]g,其中[q]g表示椭圆曲线的基点g的q倍点。
[0007]
用户的公私密钥对是:私钥w;公钥w = [w]g,其中[w]g表示椭圆曲线的基点g的w倍点。注意:w并不是隐式数字证书包含的公钥p。
[0008]
隐式数字证书的申请和签发操作如下:1.用户生成位于(1, n-1)之间的随机数k,计算r = [k]g;2.用户给ca发送隐式数字证书申请消息,申请消息包含用户身份标识u和椭圆曲线点坐标r;3.ca验证用户的申请消息正确,然后生成(1, n-1)之间的随机数k’,计算p = r + [k’]g;4.ca生成cert = encode(p, u, m)和计算e = hash(cert),其中encode表示按照隐式数字证书标准格式进行编码、m是其它的数字证书辅助信息、hash()是杂凑函数;5. ca计算r = e*k
’ꢀ
+ q mod n,然后发送cert和r给用户;r称为用户私钥贡献值;6.用户接收cert和r,然后计算e = hash(cert)、计算w = e*k + r mod n作为自己的私钥;7.对于隐式数字证书的使用者,当接收到隐式数字证书cert = encode(p, u, m),计算e = hash(cert)、然后计算w = [e]p + q作为用户的公钥,其中q是ca的公钥。
[0009]
按照上述步骤,可以验证w = [e]p + q = [e]r + [e*k’]g + [q]g = [e*k]g + [e*k’]g + [q]g = [e*k + e*k
’ꢀ
+ q]g = [e*k + r]g = [w]g,所以用户的公私密钥对关系成立。
[0010]
隐式数字证书适用于各种椭圆曲线密码算法的公私密钥对,包括美国国家标准ecdsa算法(见美国国家标准fips 186-4 digital signature standard)和中国国家标准sm2算法(见《gb/t 32918-2016 信息安全技术 sm2椭圆曲线公钥密码算法》)。其中,计算e
所使用的hash()函数,可以是美国国家标准sha算法(见美国国家标准fips 202 sha-3 standard)和中国国家标准sm3算法(见《gb/t 32905-2016 信息安全技术 sm3密码杂凑算法》),或者是其它的hash函数。
[0011]
关于隐式数字证书的更多技术内容,可以进一步参考国际标准sec 4: elliptic curve qu-vanstone implicit certificate scheme (ecqv)。
[0012]
根据已有的椭圆曲线密码算法的两方协作式计算方案,用户私钥拆分为两方子私钥、由两个用户部件分别存储。根据中国发明专利“适用于云计算的基于sm2算法的签名及解密方法和系统”(专利号zl201410437599.5),sm2算法的两份子私钥可分别记为w1和w2,与私钥w之间满足关系:w1*w2 = (1+w)-1 mod n。或者,根据crypto 2017国际会议的论文“fast secure two-party ecdsa signing”,ecdsa算法的两份子私钥可分别记为w1和w2,与私钥w之间满足关系:w1*w2 = w mod n。两方利用两份子私钥进行协作式的sm2算法密码计算和ecdsa算法密码计算的详细过程,可以进一步参考上述专利和论文。


技术实现要素:

[0013]
有鉴于此,本发明提供了一种用于向两方协作式用户部件签发隐式数字证书的计算方法和系统。在证书签发部件向用户签发隐式数字证书、生成用户私钥贡献值的过程中,证书签发部件与用户相互配合、将用户私钥分发到两个用户部件;在上述过程中,用户私钥不会整体出现、且任意一方不能计算获得到用户私钥,而且两份子私钥之间的关系满足已有的、椭圆曲线密码算法的两方协作式计算方案的要求。
[0014]
如果不采取本发明的技术方案,ca生成用户私钥贡献值、发送给用户;用户计算出自己的私钥,然后再将已经整体出现的私钥拆分为两份子私钥、发送给两个用户部件,使得两个用户部件可以进行协作式椭圆曲线密码计算。由于在上述过程中,用户私钥会整体出现,攻击者就有机会在这个过程中窃取用户私钥、导致系统安全性降低。
[0015]
为了达到上述目的,本发明的技术方案如下。
[0016]
一种用于向两方协作式用户部件签发隐式数字证书的计算方法,包括:第一用户部件和第二用户部件协作生成随机数k和协作计算r = [k]g;第一用户部件向证书签发部件发送r和用户身份标识u;证书签发部件计算隐式数字证书cert和用户私钥贡献值r,然后发送cert和r给第一用户部件;第一用户部件根据r来计算r’,发送r’给第二用户部件;第一用户部件计算自己的子私钥w1;第二用户部件计算自己的子私钥w2。
[0017]
一种用于向两方协作式用户部件签发隐式数字证书的系统,包括:第一用户部件,用于与第二用户部件协作生成随机数k和协作计算r = [k]g,向证书签发部件发送r和用户身份标识u,根据r来计算r’、发送r’给第二用户部件,计算自己的子私钥w1;第二用户部件,用于与第二用户部件协作生成随机数k和协作计算r = [k]g,接收第一用户部件发送的r’,计算自己的子私钥w2;证书签发部件,用于接收第一用户部件发送的r和用户身份标识u,按照隐式数字证书
的签发过程、计算隐式数字证书cert和用户私钥贡献值r、然后发送cert和r给第一用户部件。
[0018]
在已有的隐式数字证书的签发过程中,ca将用户私钥贡献值发送给用户、然后用户计算获得到整体形式的私钥。在已有的椭圆曲线密码算法的两方协作式计算方案中,是由两个用户部件合作生成用户私钥,并没有涉及隐式数字证书的签发过程。
[0019]
本发明的技术方案,使得隐式数字证书系统能够结合椭圆曲线密码算法的两方协作式计算方案,而且保证用户私钥的安全性。采取本发明技术方案,ca签发了隐式数字证书、发送了用户私钥贡献值,两个用户部件分别获得了两份子私钥,且上述过程中用户私钥不会整体出现。
附图说明
[0020]
图1为本发明的用于向两方协作式用户部件签发隐式数字证书的计算方法实施例的流程图,如图1所示,包括以下步骤11~16。
[0021]
步骤11:第一用户部件和第二用户部件协作生成随机数k和协作计算r = [k]g。
[0022]
为了便于表述,分别使用第一用户部件与第二用户部件来表示获得用户子私钥的通信双方。
[0023]
步骤12:第一用户部件向证书签发部件发送r和用户身份标识u。
[0024]
步骤13:证书签发部件计算隐式数字证书cert和用户私钥贡献值r,然后发送cert和r给第一用户部件。
[0025]
步骤14:第一用户部件根据r来计算r’,发送r’给第二用户部件。
[0026]
步骤15,第一用户部件计算自己的子私钥w1。
[0027]
步骤16,第二用户部件计算自己的子私钥w2。
[0028]
需要说明的是,上述步骤11~16的表示方法仅为举例说明,并不用于限制各步骤的执行顺序,在实际应用中,可根据实际需要设定各步骤的执行顺序,只要最终能够得到所需要的结果即可。后续说明涉及的各流程步骤同样如此,不再赘述。
[0029]
图2为本发明的证书签发部件与两个部件协作签发隐式数字证书和计算用户ecdsa算法子私钥的过程示意图,如图2所示,包括以下步骤21~27。
[0030]
步骤21:第一用户部件生成位于(1, n-1)之间的随机数k1,计算r
’ꢀ
= [k1]g,然后发送r’给第二用户部件。
[0031]
步骤22:第二用户部件生成位于(1, n-1)之间的随机数k2,计算r
’’ꢀ
= [k2]r’,然后发送r
’’
给第一用户部件。
[0032]
步骤23:第一用户部件生成位于(1, n-1)之间的随机数k3,计算r = [k3]g + r
’’
,然后发送r和用户身份标识u给证书签发部件。相当于,在隐式数字证书签发过程中,用户产生的随机数k是k1*k2 + k3 mod n。
[0033]
步骤24:证书签发部件按照隐式数字证书签发过程,计算隐式数字证书cert和用户私钥贡献值r,然后发送cert和r给第一用户部件。
[0034]
步骤25:第一用户部件计算e = hash(cert)和r
’ꢀ
= k1-1
*(e*k3 + r) mod n,然后发送r’给第二用户部件。
[0035]
步骤26:第一用户部件将k1作为自己的子私钥w1。
[0036]
步骤27:第二用户部件计算e*k2 + r
’ꢀ
mod n,将计算结果作为自己的子私钥w2。
[0037]
根据隐式数字证书的签发过程,用户私钥w = e*k + r mod n,结合步骤23,也就是w = e*(k1*k2 + k3) + r mod n。
[0038]
根据以上步骤,有w1*w2 = k1*(e*k2 + r’) = k1*(e*k2 + k1-1
*(e*k3 + r)) = e*(k1*k2 + k3) + r mod n,所以w1和w2满足ecdsa算法的两方协作式计算方案的要求,即w1*w2 = w mod n,w1和w2可以直接用于已有的、ecdsa算法的两方协作式计算方案。
[0039]
根据步骤21、22和23,有k = k1*k2 + k3 mod n,第一用户部件和第二用户部件都不能获得到有关k的任何信息,因为对于第一用户部件或者第二用户部件、k与自己未知的变量有关系。根据椭圆曲线离散对数难题,第一用户部件不能从r
’’ꢀ
= [k2]r’获得到有关k2的任何信息、第二用户部件不能从r
’ꢀ
= [k1]g和r = [k3]g + r
’’
获得到有关k1和k3的任何信息。
[0040]
根据步骤24的隐式数字证书签发过程,任何人不能从r获得到有关k的任何信息。
[0041]
根据步骤25,对于证书签发部件和第二用户部件而言,因为k1和k3是两个未知数、不能从r’和r的关系来求解得到k1和k3;也就是,一个等式不能用来求解两个未知数。
[0042]
图3为本发明的证书签发部件与两个部件协作签发隐式数字证书和计算用户sm2算法子私钥的过程示意图,如图3所示,包括以下步骤31~37。
[0043]
步骤31:第一用户部件生成位于(1, n-1)之间的随机数k1,计算r
’ꢀ
= [k1]g,然后发送r’给第二用户部件。
[0044]
步骤32:第二用户部件生成位于(1, n-1)之间的随机数k2,计算r
’’ꢀ
= [k2]r’,然后发送r
’’
给第一用户部件。
[0045]
步骤33:第一用户部件生成位于(1, n-1)之间的随机数k3,计算r = [k3]g + r
’’
,然后发送r和用户身份标识u给证书签发部件。相当于,在隐式数字证书签发过程中,用户产生的随机数k是k1*k2 + k3 mod n。
[0046]
步骤34:证书签发部件按照隐式数字证书签发过程,计算隐式数字证书cert和用户私钥贡献值r,然后发送cert和r给第一用户部件。
[0047]
步骤35:第一用户部件计算e = hash(cert)和r
’ꢀ
= k1-1
*(e*k3 + r + 1) mod n,然后发送r’给第二用户部件。
[0048]
步骤36:第一用户部件计算k1-1 mod n,将计算结果作为自己的子私钥w1。
[0049]
步骤37:第二用户部件计算(e*k2 + r’)-1 mod n,将计算结果作为自己的子私钥w2。
[0050]
根据隐式数字证书的签发过程,用户私钥w = e*k + r mod n,结合步骤33,也就是w = e*(k1*k2 + k3) + r mod n。
[0051]
根据以上步骤,有(w1*w2)-1 = k1*(e*k2 + r’) = k1*(e*k2 + k1-1
*(e*k3 + r + 1)) = e*(k1*k2 + k3) + r + 1 = w + 1 mod n,所以w1和w2满足sm2算法的两方协作式计算方案的要求,即w1*w2 = (1+w)-1 mod n,w1和w2可以直接用于已有的、sm2算法的两方协作式计算方案。
[0052]
根据步骤31、32和33,k = k1*k2 + k3 mod n,第一用户部件和第二用户部件都不能获得到有关k的任何信息,因为对于第一用户部件或者第二用户部件、k与自己未知的变量有关系。同时根据椭圆曲线离散对数难题,第一用户部件不能从r
’’ꢀ
= [k2]r’获得到有
关k2的任何信息、第二用户部件不能从r
’ꢀ
= [k1]g和r = [k3]g + r
’’
获得到有关k1和k3的任何信息。
[0053]
根据步骤34的隐式数字证书签发过程,任何人不能从r获得到有关k的任何信息。
[0054]
根据步骤35,对于证书签发部件和第二用户部件而言,因为k1和k3是两个未知数、不能从r’和r的关系来求解得到k1和k3;也就是,一个等式不能用来求解两个未知数。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1