一种基于身份的前向同态SM2协同签名方法及系统与流程
未命名
10-25
阅读:65
评论:0
一种基于身份的前向同态sm2协同签名方法及系统
技术领域
1.本发明涉及密码技术领域,更具体的说,涉及一种基于身份的前向同态sm2协同签名方法及系统。
背景技术:
2.数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。
3.数字签名的一般过程如下:在发送报文时,发送方使用哈希函数从报文文本中生成报文摘要,然后使用其私钥对该摘要进行加密。加密后的摘要与原始报文一起发送给接收方。接收方首先使用与发送方相同的哈希函数从接收到的原始报文中计算出报文摘要。然后,使用发送方的公钥对报文附加的数字签名进行解密。如果解密后的摘要与接收方计算出的摘要相同,接收方即可确认该报文是发送方的。
4.数字签名的安全性极大地依赖于私钥的保密性,然而,在当前的网络环境中,各种攻击时有发生,尤其是客户端的运行环境安全难以控制,存在私钥信息被完全泄露的风险。
5.此外,如果私钥被集中托管在服务端的系统上,就难以避免恶意内部人员对私钥的攻击。客户端也可能不愿意将数据传输到服务器进行签名,这会对签名应用的安全性产生影响。服务端缺乏对客户端必要的身份信息验证,因此,服务端易遭受恶意的攻击。
技术实现要素:
6.本发明的目的是提供一种基于身份的前向同态sm2协同签名方法及系统,解决现有技术中协同签名的私钥信息容易泄露造成安全风险的问题。
7.为了实现上述目的,本发明提供了一种基于身份的前向同态sm2协同签名方法,包括以下步骤:
8.密钥生成过程:客户端生成客户端的子私钥d1,服务端生成服务端的子私钥d2以及公钥p,用于完成协同签名;
9.协同签名过程:客户端与服务端,基于sm2算法进行协同签名;
10.客户端子私钥更新过程:在每次协同签名完成后,以协同签名请求时间、服务端协同签名响应时间和身份信息为参数,基于同态乘法算法计算生成用于下一次协同签名的客户端子私钥。
11.在一实施例中,在每次协同签名完成后,客户端子私钥更新过程,包括以下步骤:
12.服务端,获取客户端发送的身份信息id以及请求时间req-time;
13.服务端,获取当前时间作为响应时间res-time,计算当前更新安全参数λ
′i=hash(id||req-time||res-time),hash为预先规定的哈希算法函数;
14.服务端,计算下一阶段的同态协同签名安全参数λi=(λ
′i*λ
i-1-1
),i≥1,i为发起签名的次数,λ
i-1
是当前阶段的同态协同签名安全参数;
15.服务端,将下一阶段的同态协同签名安全参数λi发送至客户端;
16.客户端,根据下一阶段的同态协同签名安全参数λi重新计算生成用于下一次协同签名的客户端子私钥d1=d1*λimodn。
17.在一实施例中,所述客户端生成客户端的子私钥d1,服务端生成服务端的子私钥d2,进一步包括以下步骤:
18.客户端生成一个随机数,作为客户端的初始子私钥d1;
19.服务端生成一个随机数,作为服务端的初始子私钥d2;
20.其中,d1∈[1,n-1],d2∈[1,n-1],n为椭圆曲线的阶。
[0021]
在一实施例中,所述服务端生成公钥p,进一步包括以下步骤:
[0022]
服务端,接收客户端发送的公开秘密p1;
[0023]
计算服务端的初始子私钥d2在fq上的逆元d
2-1
modn;
[0024]
计算生成公钥p并发送至客户端,公钥p对应的表达式为p=d
2-1
[*]p1[-]g。
[0025]
其中,g为椭圆曲线上选取的基点,fq为包含q个元素的素域。
[0026]
在一实施例中,所述客户端发送的公开秘密p1,通过以下步骤获得:
[0027]
计算客户端的初始子私钥d1在fq上的逆元d
1-1
modn;
[0028]
计算生成客户端公开秘密p1=d
1-1
[*]g;
[0029]
其中,fq为包含q个元素的素域。
[0030]
在一实施例中,所述客户端生成客户端的子私钥,服务端生成服务端的子私钥以及公钥,之后还包括密钥校验过程:
[0031]
服务端,根据服务端的子私钥d2,计算凭证cred=d
2-1
[*]g并发送至客户端;
[0032]
客户端,接收服务端发送的公钥p以及凭证cred,计算检查结果d1[*](p[+]g);
[0033]
判断检查结果是否与凭证cred匹配;
[0034]
如果不匹配,客户端向服务端返回检查结果,抛弃各自的子私钥,重新执行密钥生成过程,生成新的客户端的子私钥、服务端的子私钥。
[0035]
在一实施例中,所述判断校验结果是否与校验凭证cred匹配,之后,还包括以下步骤:
[0036]
如果匹配,客户端重新更新计算客户端的子私钥d1=d1*λ0modn;
[0037]
其中,λ0为初始安全参数,通过服务端计算并发送至客户端。
[0038]
在一实施例中,所述初始安全参数λ0,通过以下步骤获得:
[0039]
服务端,接收客户端发送的身份信息id以及请求时间req-time;
[0040]
获取当前时间作为响应时间res-time;
[0041]
计算初始安全参数λ0=hash(id||req-time||res-time);
[0042]
其中,hash为预先规定的哈希算法函数。
[0043]
在一实施例中,所述客户端与服务端,基于sm2算法进行协同签名,进一步包括:
[0044]
服务端,生成第二私密安全参数k2,计算第二椭圆安全参数q2=k2[*]g,并发送至客户端;
[0045]
客户端,分别生成第一私密安全参数k1和第三私密安全参数k3,计算第一椭圆安全参数q1=k1[*]g;
[0046]
客户端,根据第三私密安全参数k3、第一椭圆安全参数q1和第二椭圆安全参数q2,计算生成椭圆曲线参数q=k3[*](q1[+]q2),q作为椭圆曲线群上的一点,对应坐标(x1,y1);
[0047]
客户端,根据信息摘要e和椭圆曲线参数q,计算得到r项签名分量,r=(x1+e)modn;
[0048]
客户端,根据第一私密安全参数k1、第三私密安全参数k3、r项签名分量以及客户端子私钥d1,计算得到第一s项签名分量s1=(k1*k3+r)*d1modn;
[0049]
客户端,根据第三私密安全参数k3以及客户端子私钥d1,计算得到第三s项签名分量s3=(k3*d1)modn;
[0050]
客户端,向服务端发送r项签名分量、第一s项签名分量s1、第三s项签名分量s3;
[0051]
服务端,根据接收到的r项签名分量、第一s项签名分量s1、第三s项签名分量s3、第二私密安全参数k2以及服务端子私钥d2,计算得到s项签名s=((s3*k2+s1)*d2*λ
i-1-1-r)modn,得到完整签名值(r,s)并发送给客户端。
[0052]
在一实施例中,所述信息摘要e,根据杂凑值za和待签名原文m计算获得,对应表达式e=hash(z||m);
[0053]
其中,hash为预先规定的哈希算法函数。
[0054]
在一实施例中,所述哈希算法函数hash为sm3算法函数。
[0055]
为了实现上述目的,本发明提供了一种基于身份的前向同态sm2协同签名系统,包括:
[0056]
存储器,用于存储可由处理器执行的指令;
[0057]
处理器,用于执行所述指令以实现如上述任一项所述的方法。
[0058]
为了实现上述目的,本发明提供了一种计算机可读介质,其上存储有计算机指令,其中当计算机指令被处理器执行时,执行如上述任一项所述的方法。
[0059]
本发明提出的基于身份的前向同态sm2协同签名方法及系统,在协同签名过程中,客户端不需要向服务端发送任何待签名信息,保护待签名数据的机密性和隐私性;在每次协同签名完成后,利用当前的客户端子私钥通过同态乘法算法计算出下一个协同签名阶段的客户端子私钥,实现每次协同签名阶段对应着不同的客户端子私钥,提高数字签名的安全性。
附图说明
[0060]
本发明上述的以及其他的特征、性质和优势将通过下面结合附图和实施例的描述而变的更加明显,在附图中相同的附图标记始终表示相同的特征,其中:
[0061]
图1揭示了根据本发明一实施例的基于身份的前向同态sm2协同签名方法流程图;
[0062]
图2揭示了根据本发明一实施例的密钥生成过程的流程图;
[0063]
图3揭示了根据本发明一实施例的协同签名过程以及客户端子私钥更新过程的流程图;
[0064]
图4揭示了根据本发明一实施例的基于身份的前向同态sm2协同签名系统原理框图。
具体实施方式
[0065]
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释发明,并不用
于限定发明。
[0066]
椭圆曲线密码(ecc,elliptic curve cryptography)是一种基于在有限域上定义的椭圆曲线算法的公开密钥体制。sm2算法是是ecc密码体制的一种具体算法。在国家标准《gb/t 32918信息安全技术sm2椭圆曲线公钥密码算法》标准中规定了一种椭圆曲线公钥密码算法,基于sm2的加密算法和解密算法符合该标准的规定。
[0067]
规定以下符号,以下符号同样参照了国家标准《gb/t 32918信息安全技术sm2椭圆曲线公钥密码算法》规定的参数:
[0068]
g,椭圆曲线的一个基点,其阶为素数。
[0069]
n,基点g的阶。
[0070]
x1,点q的x坐标;y1,点q的y坐标。
[0071]
x‖y,x与y的拼接,其中x和y是比特串或字节串。
[0072]
m,为解密的原始消息。
[0073]
[*]表示椭圆曲线点乘运算。
[0074]
[-]表示椭圆曲线点减运算。
[0075]
所有的运算都包括取模运算,mod n,模n运算。
[0076]
本发明的技术方案基于椭圆曲线密码体制(ecc,elliptic curve cryptography),涉及两个通信实体(客户端和服务端),在通信双方执行规定的协议,实现基于sm2算法的协同签名。
[0077]
同态乘法运算是一种加密技术中的重要概念,用于在加密状态下执行乘法运算而不暴露明文的内容。
[0078]
举例来说,c1=m1*k1;其中c1是密文,m1是私密数据,k1是私密安全参数。因为密码运算时需要m1参与计算,但是对外暴露m1是不安全的,所以实际应用场景中,同态乘法运算适合用于隐私保护计算、安全外包计算和安全多方计算等。
[0079]
前向安全或前向保密(英语:forward secrecy,缩写:fs),是密码学中通讯协议的安全属性,指的是长期使用的主密钥泄漏不会导致过去的会话密钥泄漏。前向安全能够保护过去进行的通讯不受密码或密钥在未来暴露的威胁。如果系统具有前向安全性,就可以保证在主密钥泄露时历史通讯的安全,即使系统遭到主动攻击也是如此。
[0080]
图1揭示了根据本发明一实施例的基于身份的前向同态sm2协同签名方法流程图,如图1所示,本发明提出的基于身份的前向同态sm2协同签名方法,包括以下步骤:
[0081]
步骤s1、密钥生成过程:客户端生成客户端的子私钥d1,服务端生成服务端的子私钥d2以及公钥p,用于完成协同签名;
[0082]
步骤s2、协同签名过程:客户端与服务端,基于sm2算法进行协同签名;
[0083]
步骤s3、客户端子私钥更新过程:在每次协同签名完成后,以协同签名请求时间、服务端协同签名响应时间和身份信息为参数,基于同态乘法算法重新计算生成用于下一次协同签名的客户端子私钥,实现不同阶段客户端子私钥是不相同的,提高数字签名的安全性。
[0084]
本发明的关键在于每次协同签名后,客户端子私钥会进行轮换变化,从而实现“一次一密”的密码技术,通过更新后的密钥参与后续的协同签名运算。
[0085]
需要注意的是,客户端和服务端的同态协同签名安全参数必须是一致的,即为“同
态”。因此,即使攻击者知道详细算法过程并窃取了当前密钥,由于攻击者在发起攻击前,客户端和服务端的安全参数可能已经发生了变化,攻击者手中的密钥可能会失去攻击效果,实现了前向安全。
[0086]
下面在通过具体的流程图分别来说明本方法中的密钥生成过程和协同签名过程。关于变量的下标规则如下,下标是奇数代表该变量是由客户端产生的,下标是偶数代表该变量是由服务端产生的。
[0087]
密钥生成过程,是客户端与服务端创建初始密钥的过程。
[0088]
图2揭示了根据本发明一实施例的密钥生成过程的流程图,下面结合图1和图2进一步说明本发明中的密钥生成过程,所述密钥生成过程,进一步包括以下步骤:
[0089]
步骤s11、客户端生成一个随机数,作为客户端的初始子私钥d1,d1∈[1,n-1],n为椭圆曲线的阶;
[0090]
计算初始子私钥d1在fq上的逆元d
1-1
modn,计算生成客户端公开秘密p1=d
1-1
[*]g,fq为包含q个元素的素域,g为椭圆曲线上选取的基点;
[0091]
步骤s12、客户端向服务端发送的身份信息id以及请求时间req-time、公开秘密p1;
[0092]
步骤s13、服务端收到请求后,生成一个随机数,作为服务端的初始子私钥d2,d2∈[1,n-1],n为椭圆曲线的阶;
[0093]
服务端通过以下步骤生成公钥p:
[0094]
计算服务端的初始子私钥d2在fq上的逆元d
2-1
modn;
[0095]
计算生成公钥p,公钥p对应的表达式为p=d
2-1
[*]p1[-]g,计算结果p作为sm2算法的非对称密钥对公钥;
[0096]
更进一步的,步骤s13还包括以下步骤:根据服务端的子私钥d2,计算校验凭证cred=d
2-1
[*]g,该校验凭证主要用于客户端进行密钥校验。
[0097]
更进一步的,步骤s13还包括以下步骤:获取当前时间作为响应时间res-time;
[0098]
计算初始安全参数λ0=hash(id||req-time||res-time),初始安全参数λ0用于对客户端密钥进行更新;
[0099]
其中,hash为预先规定的哈希算法函数;
[0100]
在本实施例中,哈希算法函数hash为sm3算法函数,初始安全参数λ0=sm3(id||req-time||res-time);
[0101]
λ0位于[1,n-1]之间,以及计算λ0在fq上的逆元λ
0-1
modn,即λ0*λ
0-1
=1modn;
[0102]
sm3算法函数是国产哈希算法,是一种单向加密函数。通过sm3算法函数计算安全参数具有如下好处:
[0103]
1)单向性:从哈希值无法推导出原始输入数据,因此无法通过逆向计算哈希值来恢复数据,所以不会暴露客户端的身份信息id;
[0104]
2)定长输出:无论输入数据的长度是多少,哈希函数始终产生固定长度的哈希值,可以避免安全参数超出有限域fq之外;
[0105]
3)碰撞概率:国产sm3算法函数当前是被论证为好的哈希函数,碰撞的概率几乎不存在,这一特点适用于安全参数的产生,保证安全参数的唯一性。
[0106]
步骤s14、服务端向客户端发送公钥p、校验凭证cred以及初始安全参数λ0;
[0107]
密钥生成过程中,客户端和服务端任何一方不完全拥有完整sm2密钥,双方各自生成子私钥,服务端和客户端双方在不公开各自子私钥的前提下,协同完成签名值的计算。
[0108]
在密钥生成之后,还包括对密钥校验过程,从而保证客户端与服务端的密钥分量匹配。该密钥校验方法由客户端和服务端协同执行。
[0109]
服务端在步骤s13生成校验凭证cred。
[0110]
服务端向客户端发送公钥p、校验凭证cred;
[0111]
客户端接收服务端发送的公钥p以及校验凭证cred,计算校验结果d1[*](p[+]g);
[0112]
判断校验结果是否与校验凭证cred匹配;
[0113]
如果不匹配,客户端向服务端返回检查结果,抛弃各自的子私钥,重新执行密钥生成过程,生成新的客户端的子私钥、服务端的子私钥;
[0114]
更进一步的,在本实施例中,如果匹配,客户端重新更新计算客户端的子私钥d1=d1*λ0modn;
[0115]
需要说明,尽管为使解释简单化将上述方法图示并描述为一系列动作,但是应理解并领会,这些方法不受动作的次序所限,因为根据一个或多个实施例,一些动作可按不同次序发生和/或与来自本文中图示和描述或本文中未图示和描述但本领域技术人员可以理解的其他动作并发地发生。
[0116]
协同签名过程中,客户端不需要向服务端发送任何待签名信息,也可完成协同签名,以保护待签名数据的机密性和隐私性。
[0117]
图3揭示了根据本发明一实施例的协同签名过程以及客户端子私钥更新过程的流程图,下面结合图1和图3进一步说明本发明中的协同签名过程,所述协同签名过程,进一步包括以下步骤:
[0118]
步骤s21、客户端向服务端发起第i次协同签名,i≥1,发送的身份信息id以及请求时间req-time给服务端;
[0119]
步骤s22、服务端,生成一个随机数,作为第二私密安全参数k2,k2∈[1,n-1],计算第二椭圆安全参数q2=k2[*]g,并发送至客户端;
[0120]
步骤s23、客户端,分别两个随机数,作为第一私密安全参数k1和第三私密安全参数k3,k1∈[1,n-1],k3∈[1,n-1],计算第一椭圆安全参数q1=k1[*]g;
[0121]
根据第三私密安全参数k3、第一椭圆安全参数q1和第二椭圆安全参数q2,计算生成椭圆曲线参数q=k3[*](q1[+]q2),q作为椭圆曲线上的一点,对应坐标(x1,y1);
[0122]
根据杂凑值za和待签名原文m计算获得信息摘要e,对应表达式e=hash(z||m);
[0123]
其中,hash为预先规定的哈希算法函数;
[0124]
在本实施例中,哈希算法函数hash为sm3算法函数,信息摘要e=sm3(z||m)。
[0125]
根据信息摘要e和椭圆曲线参数q,计算得到r项签名分量,r=(x1+e)modn;
[0126]
根据第一私密安全参数k1、第三私密安全参数k3、r项签名分量以及客户端子私钥d1,计算得到第一s项签名分量s1=(k1*k3+r)*d1modn;
[0127]
根据第三私密安全参数k3以及客户端子私钥d1,计算得到第三s项签名分量s3=(k3*d1)modn;
[0128]
客户端,向服务端发送r项签名分量、第一s项签名分量s1、第三s项签名分量s3;
[0129]
步骤s24、服务端,根据接收到的r项签名分量、第一s项签名分量s1、第三s项签名
分量s3、第二私密安全参数k2以及服务端子私钥d2,计算得到s项签名s=((s3*k2+s1)*d2*λ
i-1-1-r)modn,得到完整签名值(r,s)并发送给客户端。
[0130]
协同签名运算过程中,待签名原文的计算全部在客户端完成,不需要服务的协同参与,避免待签名数据的对外泄露风险。
[0131]
下面结合图1和图3进一步说明本发明中的客户端子私钥更新过程,每次协同签名运算完成后,通过同态协同签名安全参数λi对客户端子私钥进行更新,基于同态乘法算法重新计算生成用于下一次协同签名的客户端子私钥,具体包括以下步骤:
[0132]
服务端,获取客户端发送的身份信息id以及请求时间req-time;
[0133]
服务端,获取当前时间作为响应时间res-time,计算当前更新安全参数λ
′i=hash(id||req-time||res-time),hash为预先规定的哈希算法函数;
[0134]
在本实施例中,哈希算法函数hash为sm3算法函数,λ
′i=sm3(id||req-time||res-time);
[0135]
计算下一阶段的同态协同签名安全参数λi=(λ
′i*λ
i-1-1
),i≥1,λ
i-1
是当前阶段的同态协同签名安全参数;
[0136]
服务端,将下一阶段的同态协同签名安全参数λi与完整签名值(r,s)一起发送至客户端;
[0137]
客户端,根据下一阶段的同态协同签名安全参数λi重新计算生成用于下一次协同签名的客户端子私钥d1=d1*λimodn。
[0138]
客户端即使在不安全的运行环境中泄露了当前的客户端子私钥,由于客户端与服务端交互时,身份信息和同态协同签名安全参数λi保障了客户端与服务端的同态性,让攻击者伪造客户端窃取签名值成为更加困难的事情。
[0139]
需要说明,尽管为使解释简单化将上述方法图示并描述为一系列动作,但是应理解并领会,这些方法不受动作的次序所限,因为根据一个或多个实施例,一些动作可按不同次序发生和/或与来自本文中图示和描述或本文中未图示和描述但本领域技术人员可以理解的其他动作并发地发生。
[0140]
图4揭示了根据本发明一实施例的基于身份的前向同态sm2协同签名系统的框图。基于身份的前向同态sm2协同签名系统可包括内部通信总线401、处理器(processor)402、只读存储器(rom)403、随机存取存储器(ram)404、通信端口405、输入/输出端406以及硬盘407。内部通信总线401可以实现基于身份的前向同态sm2协同签名系统组件间的数据通信。处理器402可以进行判断和发出提示。在一些实施例中,处理器402可以由一个或多个处理器组成。
[0141]
通信端口405可以实现基于身份的前向同态sm2协同签名系统与外部的输入/输出设备之间进行数据传输与通信。在一些实施例中,基于身份的前向同态sm2协同签名系统可以通过通信端口405从网络发送和接收信息及数据。在一些实施例中,基于身份的前向同态sm2协同签名系统可以通过输入/输出端406以有线的形式与外部的输入/输出设备之间进行数据传输与通信。在一些实施例中,输入端为虚拟键盘。
[0142]
基于身份的前向同态sm2协同签名系统还可以包括不同形式的程序储存单元以及数据储存单元,例如硬盘407,只读存储器(rom)403和随机存取存储器(ram)404,能够存储计算机处理和/或通信使用的各种数据文件,以及处理器402所执行的可能的程序指令。处
理器402执行这些指令以实现方法的主要部分。处理器402处理的结果通过通信端口405传给外部的输出设备,在输出设备的用户界面上显示。
[0143]
举例来说,上述的基于身份的前向同态sm2协同签名方法的实施过程文件可以为计算机程序,保存在硬盘407中,并可记载到处理器402中执行,以实施本技术的方法。
[0144]
需要指出的是,术语“计算机”应该做广义的理解,可以包括但不限于云计算服务器,智能移动终端,物联网设备,计算机电脑等。对于移动端,秘密分量/分解分量可以储存在本地介质中,对于服务端,秘密分量/分解分量可以选择储存在数据库、hsm内部。
[0145]
基于身份的前向同态sm2协同签名方法的实施过程文件为计算机程序时,也可以存储在计算机或移动设备的可读存储介质中作为制品。例如,计算机可读存储介质可以包括但不限于磁存储设备(例如,硬盘、软盘、磁条)、光盘(例如,压缩盘(cd)、数字多功能盘(dvd))、智能卡和闪存设备(例如,电可擦除可编程只读存储器(eprom)、卡、棒、键驱动)。此外,本文描述的各种存储介质能代表用于存储信息的一个或多个设备和/或其它机器可读介质。术语“机器可读介质”可以包括但不限于能存储、包含和/或承载代码和/或指令和/或数据的无线信道和各种其它介质(和/或存储介质)。
[0146]
考虑客户端的运行环境不可靠性,本发明提出的基于身份的前向同态sm2协同签名方法及系统,设计一种安全数字签名方案,客户端和服务端双方完成一次协同签名后更换客户端的子私钥,利用当前的客户端子私钥通过同态乘法算法计算出下一个协同签名阶段的客户端子私钥,实现每次协同签名阶段对应着不同的客户端子私钥,即使攻击者窃取了当前的客户端子私钥,由于客户端与服务端交互的随机性,导致攻击者无法伪造下一次协同签名阶段的客户端子私钥,提高数字签名的安全性。
[0147]
如本技术和权利要求书中所示,除非上下文明确提示例外情形,“一”、“一个”、“一种”和/或“该”等词并非特指单数,也可包括复数。一般说来,术语“包括”与“包含”仅提示包括已明确标识的步骤和元素,而这些步骤和元素不构成一个排它性的罗列,方法或者设备也可能包含其他的步骤或元素。
[0148]
本领域技术人员将可理解,信息、信号和数据可使用各种不同技术和技艺中的任何技术和技艺来表示。例如,以上描述通篇引述的数据、指令、命令、信息、信号、位(比特)、码元、和码片可由电压、电流、电磁波、磁场或磁粒子、光场或光学粒子、或其任何组合来表示。
[0149]
本领域技术人员将进一步领会,结合本文中所公开的实施例来描述的各种解说性逻辑板块、模块、电路、和算法步骤可实现为电子硬件、计算机软件、或这两者的组合。为清楚地解说硬件与软件的这一可互换性,各种解说性组件、框、模块、电路、和步骤在上面是以其功能性的形式作一般化描述的。此类功能性是被实现为硬件还是软件取决于具体应用和施加于整体系统的设计约束。技术人员对于每种特定应用可用不同的方式来实现所描述的功能性,但这样的实现决策不应被解读成导致脱离了本发明的范围。
[0150]
结合本文所公开的实施例描述的各种解说性逻辑模块、和电路可用通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或其它可编程逻辑器件、分立的门或晶体管逻辑、分立的硬件组件、或其设计成执行本文所描述功能的任何组合来实现或执行。通用处理器可以是微处理器,但在替换方案中,该处理器可以是任何常规的处理器、控制器、微控制器、或状态机。处理器还可以被实现为计算设备的组合,例如dsp
与微处理器的组合、多个微处理器、与dsp核心协作的一个或多个微处理器、或任何其他此类配置。
[0151]
结合本文中公开的实施例描述的方法或算法的步骤可直接在硬件中、在由处理器执行的软件模块中、或在这两者的组合中体现。软件模块可驻留在ram存储器、闪存、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、可移动盘、cd-rom、或本领域中所知的任何其他形式的存储介质中。示例性存储介质耦合到处理器以使得该处理器能从/向该存储介质读取和写入信息。在替换方案中,存储介质可以被整合到处理器。处理器和存储介质可驻留在asic中。asic可驻留在用户终端中。在替换方案中,处理器和存储介质可作为分立组件驻留在用户终端中。
[0152]
在一个或多个示例性实施例中,所描述的功能可在硬件、软件、固件或其任何组合中实现。如果在软件中实现为计算机程序产品,则各功能可以作为一条或更多条指令或代码存储在计算机可读介质上或藉其进行传送。计算机可读介质包括计算机存储介质和通信介质两者,其包括促成计算机程序从一地向另一地转移的任何介质。存储介质可以是能被计算机访问的任何可用介质。作为示例而非限定,这样的计算机可读介质可包括ram、rom、eeprom、cd-rom或其它光盘存储、磁盘存储或其它磁存储设备、或能被用来携带或存储指令或数据结构形式的合意程序代码且能被计算机访问的任何其它介质。任何连接也被正当地称为计算机可读介质。例如,如果软件是使用同轴电缆、光纤电缆、双绞线、数字订户线(dsl)、或诸如红外、无线电、以及微波之类的无线技术从web网站、服务器、或其它远程源传送而来,则该同轴电缆、光纤电缆、双绞线、dsl、或诸如红外、无线电、以及微波之类的无线技术就被包括在介质的定义之中。如本文中所使用的盘(disk)和碟(disc)包括压缩碟(cd)、激光碟、光碟、数字多用碟(dvd)、软盘和蓝光碟,其中盘(disk)往往以磁的方式再现数据,而碟(disc)用激光以光学方式再现数据。上述的组合也应被包括在计算机可读介质的范围内。
[0153]
上述实施例是提供给熟悉本领域内的人员来实现或使用本发明的,熟悉本领域的人员可在不脱离本发明的发明思想的情况下,对上述实施例做出种种修改或变化,因而本发明的保护范围并不被上述实施例所限,而应该是符合权利要求书提到的创新性特征的最大范围。
技术特征:
1.一种基于身份的前向同态sm2协同签名方法,其特征在于,包括以下步骤:密钥生成过程:客户端生成客户端的子私钥d1,服务端生成服务端的子私钥d2以及公钥p,用于完成协同签名;协同签名过程:客户端与服务端,基于sm2算法进行协同签名;客户端子私钥更新过程:在每次协同签名完成后,以协同签名请求时间、服务端协同签名响应时间和身份信息为参数,基于同态乘法算法计算生成用于下一次协同签名的客户端子私钥。2.根据权利要求1所述的基于身份的前向同态sm2协同签名方法,其特征在于,所述客户端子私钥更新过程,包括以下步骤:服务端,获取客户端发送的身份信息id以及请求时间req-time;服务端,获取当前时间作为响应时间res-time,计算当前更新安全参数λ
′
i
=hash(id||req-time||res-time),hash为预先规定的哈希算法函数;服务端,计算下一阶段的同态协同签名安全参数λ
i
=(λ
′
i
*λ
i-1-1
),i为发起签名的次数,λ
i-1
是当前阶段的同态协同签名安全参数;服务端,将下一阶段的同态协同签名安全参数λ
i
发送至客户端;客户端,根据下一阶段的同态协同签名安全参数λ
i
,计算生成用于下一次协同签名的客户端子私钥d1=d1*λ
i
modn。3.根据权利要求1所述的基于身份的前向同态sm2协同签名方法,其特征在于,所述客户端生成客户端的子私钥d1,服务端生成服务端的子私钥d2,进一步包括以下步骤:客户端生成一个随机数,作为客户端的初始子私钥d1;服务端生成一个随机数,作为服务端的初始子私钥d2;其中,d1∈[1,n-1,d2∈[1,n-1,n为椭圆曲线的阶。4.根据权利要求3所述的基于身份的前向同态sm2协同签名方法,其特征在于,所述服务端生成公钥p,进一步包括以下步骤:服务端,接收客户端发送的公开秘密p1;计算服务端的初始子私钥d2在f
q
上的逆元d
2-1
modn;计算生成公钥p并发送至客户端,公钥p对应的表达式为p=d
2-1
[*]p1[-]g;其中,g为椭圆曲线上选取的基点,f
q
为包含q个元素的素域。5.根据权利要求4所述的基于身份的前向同态sm2协同签名方法,其特征在于,所述客户端发送的公开秘密p1,通过以下步骤获得:计算客户端的初始子私钥d1在f
q
上的逆元d
1-1
modn;计算生成客户端公开秘密p1=d
1-1
[*]g;其中,f
q
为包含q个元素的素域。6.根据权利要求1所述的基于身份的前向同态sm2协同签名方法,其特征在于,所述客户端生成客户端的子私钥,服务端生成服务端的子私钥以及公钥,之后还包括密钥校验过程:服务端,根据服务端的子私钥d2,计算校验凭证cred=d
2-1
[*]g并发送至客户端,g为椭圆曲线上选取的基点;客户端,接收服务端发送的公钥p以及校验凭证cred,计算校验结果d1[*](p[+]g);
判断校验结果是否与校验凭证cred匹配;如果不匹配,客户端向服务端返回检查结果,抛弃各自的子私钥,重新执行密钥生成过程,生成新的客户端的子私钥、服务端的子私钥。7.根据权利要求6所述的基于身份的前向同态sm2协同签名方法,其特征在于,所述判断校验结果是否与校验凭证cred匹配,之后,还包括以下步骤:如果匹配,客户端重新更新计算客户端的子私钥d1=d1*λ0modn;其中,λ0为初始安全参数,通过服务端计算并发送至客户端。8.根据权利要求7所述的基于身份的前向同态sm2协同签名方法,其特征在于,所述初始安全参数λ0,通过以下步骤获得:服务端,接收客户端发送的身份信息id以及请求时间req-time;获取当前时间作为响应时间res-time;计算初始安全参数λ0=hash(id||req-time||res-time);其中,hash为预先规定的哈希算法函数。9.根据权利要求2所述的基于身份的前向同态sm2协同签名方法,其特征在于,所述客户端与服务端,基于sm2算法进行协同签名,进一步包括:服务端,生成一个随机数,作为第二私密安全参数k2,计算第二椭圆安全参数q2=k2[*]g,并发送至客户端;客户端,分别两个随机数,作为第一私密安全参数k1和第三私密安全参数k3,计算第一椭圆安全参数q1=k1[*]g;客户端,根据第三私密安全参数k3、第一椭圆安全参数q1和第二椭圆安全参数q2,计算生成椭圆曲线参数q=k3[*](q1[+]q2),q作为椭圆曲线群上的一点,对应坐标(x1,y1);客户端,根据信息摘要e和椭圆曲线参数q,计算得到r项签名分量,r=(x1+e)modn;客户端,根据第一私密安全参数k1、第三私密安全参数k3、r项签名分量以及客户端子私钥d1,计算得到第一s项签名分量s1=(k1*k3+r)*d1modn;客户端,根据第三私密安全参数k3以及客户端子私钥d1,计算得到第三s项签名分量s3=(k3*d1)modn;客户端,向服务端发送r项签名分量、第一s项签名分量s1、第三s项签名分量s3;服务端,根据接收到的r项签名分量、第一s项签名分量s1、第三s项签名分量s3以及第二私密安全参数k2以及服务端子私钥d2,计算得到s项签名s=((s3*k2+s1)*d2*λ
i-1-1-r)modn,得到完整签名值(r,s)并发送给客户端。10.根据权利要求9所述的于身份的前向同态sm2协同签名方法,其特征在于,所述信息摘要e,根据杂凑值z
a
和待签名原文m计算获得,对应表达式e=hash(z||m);其中,hash为预先规定的哈希算法函数。11.根据权利要求2、权利要求8和权利要求10中任一项所述的基于身份的前向同态sm2协同签名方法,其特征在于,所述哈希算法函数hash为sm3算法函数。12.一种基于身份的前向同态sm2协同签名系统,其特征在于,包括:存储器,用于存储可由处理器执行的指令;处理器,用于执行所述指令以实现如权利要求1-11任一项所述的方法。13.一种计算机可读介质,其上存储有计算机指令,其中当计算机指令被处理器执行
时,执行如权利要求1-11任一项所述的方法。
技术总结
本发明涉及密码技术领域,更具体的说,涉及一种基于身份的前向同态SM2协同签名方法及系统。本方法,包括以下步骤:密钥生成过程:客户端生成客户端的子私钥D1,服务端生成服务端的子私钥D2以及公钥P,用于完成协同签名;协同签名过程:客户端与服务端,基于SM2算法进行协同签名;在每次协同签名完成后,客户端以协同签名请求时间、服务端协同签名响应时间和身份信息为参数,重新计算生成用于下一次协同签名的客户端子私钥。本发明在客户端和服务端双方完成一次协同签名后更换客户端的子私钥,既能保护待签名数据的机密性和隐私性,同时能实现每次协同签名阶段对应着不同的客户端子私钥,提高数字签名的安全性。提高数字签名的安全性。提高数字签名的安全性。
技术研发人员:王玉林 徐祺 骆江海 汤霄 郑宁
受保护的技术使用者:上海市数字证书认证中心有限公司
技术研发日:2023.08.25
技术公布日:2023/10/20
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
航空商城 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/