SM2算法协同签名及解密方法、装置与系统与流程

文档序号:11291911阅读:727来源:国知局
SM2算法协同签名及解密方法、装置与系统与流程

本发明涉及密码学技术领域,特别是涉及一种sm2算法协同签名及解密方法、装置与系统。



背景技术:

椭圆曲线密码(简称ecc)是一种基于在有限域上定义的椭圆曲线的数学难题的公开密钥体制。sm2算法是指由国家密码管理局制定的《gm/t0003-2012sm2椭圆曲线公钥密码算法》标准中规定的椭圆曲线公钥密码算法,是ecc密码体制的一种具体算法。

为了提高云计算环境中的私钥的安全性,传统技术提出在通信双方分别存储部分私钥,两方联合才能对消息进行签名或解密等操作,通信双方均无法获取到对方私钥的任何信息,因此攻击者在入侵其中任何一方的情况下,都不能伪造签名或解密密文。

在实现过程中,发明人发现传统技术中至少存在如下问题:传统技术将待签名消息的消息摘要发送给另一通信方,不利于保护用户隐私。同时,如果恶意攻击者通过控制信道来替换消息摘要,通信双方会根据被篡改的消息摘要来产生数字签名并输出,使得攻击者可以伪造签名。



技术实现要素:

基于此,有必要针对传统技术无法保护用户隐私、抵抗恶意攻击的问题,提供一种sm2算法协同签名及解密方法、装置与系统。

为了实现上述目的,一方面,本发明实施例提供了从第一通信方角度实施的sm2算法协同签名方法,包括以下步骤:

根据预设的密码杂凑算法,生成待签名消息的消息摘要;

接收第二通信方基于第一公钥参数以及选取的随机数反馈的第一椭圆曲线群元素;根据消息摘要和第一椭圆曲线群元素,生成第一部分签名;

基于第一部分签名进行模运算,生成混淆中间结果,并将混淆中间结果传输给第二通信方;

在接收到第二通信方根据混淆中间结果反馈的中间签名时,根据中间签名和第一部分签名,生成第二部分签名;

根据第一部分签名和第二部分签名,得到完整的sm2数字签名。

另一方面,本发明实施例还提供了一种从第二通信方角度实施的sm2算法协同签名方法,包括以下步骤:

根据选取的随机数以及第一通信方的第一公钥参数,生成第一椭圆曲线群元素,并将第一椭圆曲线群元素传输给第一通信方;

接收第一通信方基于第一椭圆曲线群元素反馈的混淆中间结果,并根据第二私钥分量和混淆中间结果,生成中间签名;

将中间签名传输给第一通信方。

一方面,本发明实施例提供了一种从第二通信方角度实施的sm2算法协同解密方法,包括以下步骤:

接收第一通信方传输的根据第一私钥分量和所述第一比特串对应的椭圆曲线群元素得到的第一点乘结果;

将第二私钥分量与第一点乘结果进行乘积运算,得到第二点乘结果;

接收第一通信方根据sm2密文的第一比特串传输的第一比特串对应的椭圆曲线群元素;

根据第二点乘结果和第一比特串对应的椭圆曲线群元素,得到临时对称密钥,并提取sm2密文的第二比特串;

对临时对称密钥和第二比特串进行按位异或运算,得到解密明文;

对解密明文进行校验,并在校验成功时输出解密明文。

另一方面,本发明实施例还提供了一种从第一通信方角度实施的sm2算法协同解密方法,包括以下步骤:

获取sm2密文的第一比特串;对第一比特串进行数据类型转换,得到第一比特串对应的椭圆曲线群元素;

根据第一私钥分量和第一比特串对应的椭圆曲线群元素,得到第一点乘结果;

将第一点乘结果和第一比特串对应的椭圆曲线群元素传输给第二通信方。

一方面,本发明实施例提供了一种从第一通信方角度实施的sm2算法协同签名装置,包括:

第一通信方消息摘要生成单元,用于根据预设的密码杂凑算法生成待签名消息的消息摘要;

第一通信方消息签名生成单元,用于接收第二通信方基于第一公钥参数以及选取的随机数反馈的第一椭圆曲线群元素;根据消息摘要和第一椭圆曲线群元素,生成第一部分签名;基于第一部分签名进行模运算,生成混淆中间结果,并将混淆中间结果传输给第二通信方;在接收到第二通信方根据混淆中间结果反馈的中间签名时,根据中间签名和第一部分签名,生成第二部分签名;根据第一部分签名和第二部分签名,得到完整的sm2数字签名。

另一方面,本发明实施例还提供了一种从第二通信方角度实施的sm2算法协同签名装置,包括:

第二通信方参数生成单元,用于根据选取的随机数以及第一通信方的第一公钥参数,生成第一椭圆曲线群元素,并将第一椭圆曲线群元素传输给第一通信方;

第二通信方中间签名生成单元,用于接收第一通信方基于第一椭圆曲线群元素反馈的混淆中间结果,并根据第二私钥分量和混淆中间结果,生成中间签名;将中间签名传输给第一通信方。

一方面,本发明实施例提供了一种从第二通信方角度实施的sm2算法协同解密装置,包括:

第二通信方接收单元,用于接收第一通信方传输的根据第一私钥分量和所述第一比特串对应的椭圆曲线群元素得到的第一点乘结果;以及接收第一通信方根据sm2密文的第一比特串传输的第一比特串对应的椭圆曲线群元素;

第二通信方解密单元,用于将第二私钥分量与第一点乘结果进行乘积运算,得到第二点乘结果;根据第二点乘结果和第一比特串对应的椭圆曲线群元素,得到临时对称密钥,并提取sm2密文的第二比特串;对临时对称密钥和第二比特串进行按位异或运算,得到解密明文;对解密明文进行校验,并在校验成功时输出解密明文。

另一方面,本发明实施例还提供了一种从第一通信方角度实施的sm2算法协同解密装置,包括:

第一通信方处理单元,用于获取sm2密文的第一比特串;对第一比特串进行数据类型转换,得到第一比特串对应的椭圆曲线群元素;并根据第一私钥分量和第一比特串对应的椭圆曲线群元素,得到第一点乘结果;

第一通信方传输单元,用于将第一点乘结果和第一比特串对应的椭圆曲线群元素传输给第二通信方。

一方面,本发明实施例提供了一种sm2算法协同签名系统,包括第一通信方和第二通信方;

第二通信方根据选取的随机数以及第一通信方的第一公钥参数,生成第一椭圆曲线群元素,并将第一椭圆曲线群元素传输给第一通信方;

第一通信方根据预设的密码杂凑算法生成待签名消息的消息摘要,并根据消息摘要和第一椭圆曲线群元素,生成第一部分签名;基于第一部分签名进行模运算,生成混淆中间结果,并将混淆中间结果传输给第二通信方;第二通信方根据第二私钥分量和混淆中间结果,生成中间签名;并将中间签名传输给第一通信方;

第一通信方根据中间签名和第一部分签名,生成第二部分签名;并根据第一部分签名和第二部分签名,得到完整的sm2数字签名。

一方面,本发明实施例还提供了一种sm2算法协同解密系统,包括第一通信方和第二通信方;

第一通信方获取sm2密文的第一比特串;对第一比特串进行数据类型转换,得到第一比特串对应的椭圆曲线群元素;并根据第一私钥分量和第一比特串对应的椭圆曲线群元素,得到第一点乘结果;将第一点乘结果和第一比特串对应的椭圆曲线群元素传输给第二通信方;

第二通信方将第二私钥分量与第一点乘结果进行乘积运算,得到第二点乘结果;根据第二点乘结果和第一比特串对应的椭圆曲线群元素,得到临时对称密钥,并提取sm2密文的第二比特串;对临时对称密钥和第二比特串进行按位异或运算,得到解密明文;对解密明文进行校验,并在校验成功时输出解密明文。

本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述从第一通信方角度实施例的sm2算法协同签名方法中的步骤。

本发明实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现上述从第一通信方角度实施例的sm2算法协同签名方法中的步骤。

本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述从第二通信方角度实施例的sm2算法协同签名方法中的步骤。

本发明实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现上述从第二通信方角度实施例的sm2算法协同签名方法中的步骤。

本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述从第二通信方角度实施例的sm2算法协同解密方法中的步骤。

本发明实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现上述从第二通信方角度实施例的sm2算法协同解密方法中的步骤。

本发明实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述从第一通信方角度实施例的sm2算法协同解密方法中的步骤。

本发明实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现上述从第一通信方角度实施例的sm2算法协同解密方法中的步骤。

本发明具有如下优点和有益效果:

本发明sm2算法协同签名及解密方法、装置与系统,第一通信方计算消息摘要和部分签名结果,并输出签名结果,因此在产生数字签名的过程中不会泄漏用户隐私。与部分签名结果相关的中间结果,无法泄漏部分签名结果,使得第一通信方在第二通信方的帮助下完成数字签名,但是第二通信方并不知晓第一通信方签署了什么消息,达到盲签名的效果。第一通信方、第二通信方协同产生签名,攻击者劫持其中一方的条件下无法获得完整的私钥,也无法实现私钥脱机使用,在私钥托管的应用场合中,可以避免提供私钥托管的服务提供方非授权使用用户私钥来伪造数字签名。本发明签名过程和解密过程中,通信双方通过较少的交互即可完成签名和解密,从而能够满足云计算环境中低延迟、少交互的应用需求。本发明能够保护用户隐私并抵抗恶意攻击。

附图说明

图1为本发明从第一通信方角度实施的sm2算法协同签名方法实施例1的流程示意图;

图2为本发明从第二通信方角度实施的sm2算法协同签名方法实施例1的流程示意图;

图3为本发明从第二通信方角度实施的sm2算法协同解密方法实施例1的流程示意图;

图4为本发明从第一通信方角度实施的sm2算法协同解密方法实施例1的流程示意图;

图5为本发明从第一通信方角度实施的sm2算法协同签名装置实施例1的结构示意图;

图6为本发明从第二通信方角度实施的sm2算法协同签名装置实施例1的结构示意图;

图7为本发明从第二通信方角度实施的sm2算法协同解密装置实施例1的结构示意图;

图8为本发明从第一通信方角度实施的sm2算法协同解密装置实施例1的结构示意图。

具体实施方式

为了便于理解本发明,下面将参照相关附图对本发明进行更全面的描述。附图中给出了本发明的首选实施例。但是,本发明可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使对本发明的公开内容更加透彻全面。

除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。

本发明sm2算法协同签名及解密方法、装置与系统的具体应用场景说明:

椭圆曲线系统参数的选取参照《gm/t0003.5-2012sm2椭圆曲线公钥密码算法第5部分:参数定义》规范。相关参数包括有限域fq的规模q,定义椭圆曲线e(fq)的两个元素a,b∈fq,e(fq)上的基点g=(xg,yg)(g≠o),其中xg和yg是fq中的两个元素;g的阶n及其他可选项(如n的余因子h等),n为素数。

作为签名者的用户a具有长度为entlena比特的可辨别标识ida,记entla是由整数entlena转换而成的两个字节,使用消息摘要长度为v比特的密码杂凑函数hv求得用户a的杂凑值za=h256(entla||ida||a||b||xg||yg||xa||ya);其中,xa、ya为用户a的公钥pa的坐标;

sm2数字签名的生成算法如下:

设待签名消息为m,为了获取消息m的数字签名(r,s),作为签名者的用户a实现以下运算步骤:

a)置其中包含待签名消息m和杂凑值za;

b)计算按gm/t0003.1-2012标准的4.2.3和4.2.4给出的方法将e的数据类型转换为整数;

c)用随机数发生器产生随机数k∈[1,…,n-1];

d)客户端计算椭圆曲线群元素(x1,y1)=[k]g,按按gm/t0003.1-2012标准的4.2.8给出的方法将x1的数据类型转换为整数;

e)计算r=e+x1(modn),若r=0或r+k=n则返回步骤c);

f)计算s=(1+da)-1(k-r·da)(modn),若s=0则返回步骤c);

g)按gm/t0003.1-2012标准4.2.2给出的细节将r、s的数据类型转换为字节串,然后输出消息m的数字签名结果(r,s)。

为了提高云计算环境中的私钥的安全性,传统技术提出在通信双方分别存储部分私钥,两方联合才能对消息进行签名或解密等操作,通信双方均无法获取到对方私钥的任何信息,因此攻击者在入侵其中任何一方的情况下,都不能伪造签名或解密密文。其中,传统技术将消息摘要e发送给第二通信方,第二通信方根据e生成部分签名r。而消息摘要e属于用户隐私信息,部分签名r是最终输出数字签名(r,s)的一部分,因此传统技术不利于保护用户隐私。

此外,如果恶意攻击者通过控制信道来替换消息摘要e,双方会根据被篡改的消息摘要e来产生数字签名并输出,使得攻击者可能达到伪造签名的目标。可以通过在输出数字签名之前增加一个步骤,执行一次签名验证的流程来抵抗这样的恶意攻击,然而sm2密码体制的特性决定了签名验证的过程比产生数字签名消耗更多的资源,这样的改进将会降低系统的效率。

本发明从第一通信方角度实施的sm2算法协同签名方法实施例1:

为了解决传统技术无法保护用户隐私、抵抗恶意攻击的问题,本发明提供了一种从第一通信方角度实施的sm2算法协同签名方法实施例1;图1为本发明从第一通信方角度实施的sm2算法协同签名方法实施例1的流程示意图;如图1所示,可以包括以下步骤:

步骤s110:根据预设的密码杂凑算法,生成待签名消息的消息摘要;

步骤s120:接收第二通信方基于第一公钥参数以及选取的随机数反馈的第一椭圆曲线群元素;根据消息摘要和第一椭圆曲线群元素,生成第一部分签名;

步骤s130:基于第一部分签名进行模运算,生成混淆中间结果,并将混淆中间结果传输给第二通信方;

步骤s140:在接收到第二通信方根据混淆中间结果反馈的中间签名时,根据中间签名和第一部分签名,生成第二部分签名;

步骤s150:根据第一部分签名和第二部分签名,得到完整的sm2数字签名;

具体而言,本发明sm2算法协同签名方法可以包括两个参与方:第一通信方和第二通信方。双方按照sm2标准算法确定预设的密码杂凑函数hv,椭圆曲线e,椭圆曲线群生成元g和加群的阶n。其中,第一通信方作为签名者,具有sm2规定的za参数。优选的,预设的密码杂凑算法可以为sm3摘要算法;

基于本发明,使得第一通信方计算消息摘要和部分签名结果,并输出签名结果,因此在产生数字签名的过程中不会泄漏用户隐私。与第一部分签名相关的混淆中间结果,使得第一通信方在第二通信方的帮助下完成数字签名,但是第二通信方并不知晓第一通信方签署了什么消息,无法泄漏部分签名结果,达到盲签名的效果。本发明能够保护用户隐私并抵抗恶意攻击。

在一个具体的实施例中,在根据预设的密码杂凑算法,生成待签名消息的消息摘要的步骤之前还包括步骤:

基于以下公式生成第一私钥分量:

d1∈[1,…,n-1]

其中,d1为第一私钥分量;

根据第一私钥分量,基于以下公式获取第一公钥参数:

p1=[d1]g

其中,p1为第一公钥参数;

具体而言,第一通信方随机选择私钥分量d1∈[1,…,n-1];而第一通信方生成第一私钥分量的过程简单,计算量较小。第一通信方根据自己持有的第一私钥分量来产生签名,即使攻击者劫持第一私钥分量,也无法获得完整的私钥,无法实现私钥脱机使用。在私钥托管的应用场合中,可以避免提供私钥托管的服务提供方非授权使用用户私钥来伪造数字签名。

进一步的,第一通信方计算公钥参数p1=[d1]g,并发送公钥参数p1给第二通信方。

优选的,在将第一公钥参数传输给第二通信方的步骤之后,还包括步骤:

接收第二通信方传输的根据第一公钥参数生成的共同公钥。

具体而言,第一通信方接收第二通信方根据公钥参数p1和私钥参数d2,生成的双方共同公钥pa=[d2]p1-g=[d1d2-1]g。

需要说明的是,计算共同公钥pa分别需要第一通信方和第二通信方各自的私钥分量参与计算才能获得。其中,共同公钥pa可以由任何一方计算得出,取决于哪一方先发起计算过程。

此外,将第一通信方和第二通信方的共同私钥记为da,则pa=[da]g=[d1d2-1]g,因此有da=(d1d2-1),上述公式揭示了私钥分量与共同私钥之间的数学关系,也揭示了私钥分量与公钥之间的数学关系,在后文中签名正确性的证明过程中将会使用到这些数学关系。

在一个具体的实施例中,第一椭圆曲线群元素包括椭圆曲线群元素r1和椭圆曲线群元素r2;

根据消息摘要和第一椭圆曲线群元素,生成第一部分签名的步骤包括:

分别选取随机数k3、随机数k4,基于以下公式生成第二椭圆曲线群元素(x1,y1):

(x1,y1)=[k3]r1+r2+[k4]g

其中,k3∈[1,…,n-1];k4∈[1,…,n-1];g为椭圆曲线e(fq)上的基点;n为椭圆曲线e(fq)上基点g的阶;x1为第二椭圆曲线群元素(x1,y1)的x轴坐标,y1为第二椭圆曲线群元素(x1,y1)的y轴坐标;

根据第二椭圆曲线群元素(x1,y1)和消息摘要,基于以下公式生成第一部分签名:

r=e+x1(modn)

其中,e为消息摘要;r为第一部分签名;modn为模n运算。

在一个具体的实施例中,基于第一部分签名进行模运算,生成混淆中间结果的步骤包括:

根据随机数k4和第一部分签名r,基于以下公式生成混淆中间结果:

r′=r+k4(modn)

其中,r′为混淆中间结果。

在一个具体的实施例中,中间签名包括第一中间签名s1和第二中间签名s2;

根据中间签名和第一部分签名,生成第二部分签名的步骤中,基于以下公式生成第二部分签名:

其中,s为第二部分签名;d1为第一私钥分量。

具体而言,第一通信方接收第二通信方传输的椭圆曲线群元素r1、椭圆曲线群元素r2;第一通信方选择随机数k3∈[1,…,n-1],随机数k4∈[1,…,n-1],计算椭圆曲线群元素(x1,y1)=[k3]r1+r2+[k4]g,其中x1是椭圆曲线群元素(x1,y1)的x轴坐标;

进一步的,第一通信方生成待签名消息的消息摘要的步骤包括:将za和m拼接形成并计算将所述计算结果作为消息摘要;其中,m为所述待签名消息;za为根据用户a的可辨别标识ida计算的杂凑值;为za||m;hv为密码杂凑函数;

即第一通信方计算消息摘要e=hv(za||m),计算部分签名结果r=e+x1(modn),其中za是根据用户a的可辨别标识ida计算的杂凑值,m是输入的待签名原文;并使用随机数k4和部分签名结果r计算混淆中间结果r′=r+k4(mon),然后将r′发送给第二通信方。

需要说明的是,用户a拥有私钥的所有权;而第一通信方和第二通信方是参与执行协议的两个通信方,可以是客户端、服务端。本发明将用户的私钥分割为两个部分,分别存放在客户端、服务端,即通信双方分别产生随机数作为私钥分量,本发明产生私钥和计算公钥的过程比较简单,计算量较小。本发明中通信两方分别持有私钥分量来协同产生签名,攻击者劫持其中一方的条件下无法获得完整的私钥,也无法实现私钥脱机使用。同时通信两方分别持有私钥分量来协同产生签名,在私钥托管的应用场合中,可以避免提供私钥托管的服务提供方非授权使用用户私钥来伪造数字签名。

第一通信方接收第二通信方反馈的中间签名s1和s2;使用私钥参数d1,随机数k3,部分签名结果r,接收的中间签名s1和s2,计算部分签名结果

第一通信方输出符合sm2签名格式要求的数字签名(r,s),使用共同公钥pa可以验证该签名结果。

优选的,在根据消息摘要和第一椭圆曲线群元素,生成第一部分签名的步骤之前还包括步骤:

根据第一椭圆曲线群元素r1,基于以下公式得到点乘结果s1:

s1=[h]r1

其中,h为n的余因子;

在检测到点乘结果s1为椭圆曲线e(fq)的无穷远点时,接收第二通信方根据第一公钥参数以及再次选取的随机数重新反馈的第一椭圆曲线群元素;

根据第一椭圆曲线群元素r2,基于以下公式得到点乘结果s2:

s2=[h]r2

其中,h为n的余因子;

在检测到点乘结果s2为椭圆曲线e(fq)的无穷远点时,接收第二通信方根据第一公钥参数以及再次选取的随机数重新反馈的第一椭圆曲线群元素。

具体而言,为了安全性,在第一通信方接收到椭圆曲线群元素r1、r2之后,计算s1=[h]r1,s2=[h]r2,其中h是n的余因子。若s1或者s2是无穷远点,则返回步骤s120,即通知第二通信方重新执行根据第一公钥参数生成的椭圆曲线群元素的步骤。返回上述步骤重新计算,目的是要重新产生随机数,避免输出不具有随机性的中间结果。

在一个具体的实施例中,在根据消息摘要和第一椭圆曲线群元素,生成第一部分签名的步骤之后还包括步骤:

检测第一部分签名r的值,在第一部分签名r的值为0时,接收第二通信方根据第一公钥参数以及再次选取的随机数重新反馈的第一椭圆曲线群元素;

根据第二椭圆曲线群元素(x1,y1),基于以下公式进行计算,得到计算结果s0:

s0=[r]g+(x1,y1)

在检测到计算结果s0为椭圆曲线e(fq)的无穷远点时,接收第二通信方根据第一公钥参数以及再次选取的随机数重新反馈的第一椭圆曲线群元素。

具体而言,在ecc密码体制中,签名是基于一个线性方程来计算r和s,多个线性方程可以构成一个方程组,然后通过解方程组来计算出用户私钥。为了避免这种攻击,ecc签名采用了一次一密的加密原理,在每一次签名中都引入一个随机数k,用来隐藏用户私钥。由于0是一个固定值,而不是随机结果,所有计算结果出现0值就代表一种非平凡的签名,意味着可以将签名方程进行简化,从而可以计算出用户私钥。返回步骤s120,目的是重新产生随机数,避免输出不具有随机性的中间结果。

进一步的,sm2签名方程中s=(1+da)-1(k-r·da)(modn),若r=0,则k-r·da=k,即这个部分与私钥da没有关系,会削弱安全性。

如果r+k=n,意味着k=n-r,而n和r均为公开的结果,这样就等于可以计算出k,k就不是一个随机数,此时根据签名方程s=(1+da)-1(k-r·da(modn)就可以直接计算出私钥d。

优选的,根据中间签名和第一部分签名,生成第二部分签名的步骤之前还包括步骤:

检测第一中间签名s1的值;在检测到第一中间签名s1的值为0时,接收第二通信方根据第一公钥参数以及再次选取的随机数重新反馈的第一椭圆曲线群元素;

检测第二中间签名s2的值;在检测到第二中间签名s2的值为0时,接收第二通信方根据第一公钥参数以及再次选取的随机数重新反馈的第一椭圆曲线群元素。

具体而言,为了安全性,在第一通信方接收中间结果s1和s2之后,若检查发现s1=0或者s2=0,通知第二通信方重新执行根据第一公钥参数生成的椭圆曲线群元素。

在一个具体的实施例中,根据中间签名、第一部分签名和第一私钥分量,基于以下公式生成第二部分签名的步骤之后还包括步骤:

检测第二部分签名s的值;在检测到第一部分签名s的值为0或n-r时,接收第二通信方根据第一公钥参数以及再次选取的随机数重新反馈的第一椭圆曲线群元素。

具体而言,如果s=0,通知第二通信方重新执行根据第一公钥参数生成的椭圆曲线群元素的步骤;同时可以计算r+s,若满足r+s=n,通知第二通信方重新执行根据第一公钥参数生成的椭圆曲线群元素的步骤。

本发明从第一通信方角度实施的sm2算法协同签名方法,使得第一通信方计算消息摘要和部分签名结果,并输出签名结果,数字签名可以被第一通信方和第二通信方的共同公钥pa验证。通过随机数隐藏部分签名结果r,并且混淆中间结果r′与部分签名结果r相关,但是并不会泄漏部分签名结果r,因此使得第一通信方在第二通信方的帮助下完成了数字签名,但是第二通信方并不知道第一通信方签署了什么消息,一方面避免了泄漏部分签名结果r,另一方面具有类似盲签名的特征。

本发明从第二通信方角度实施的sm2算法协同签名方法实施例1:

基于以上从第一通信方角度实施的sm2算法协同签名方法的技术方案,同时为了解决传统技术无法保护用户隐私、抵抗恶意攻击的问题,本发明提供了一种从第二通信方角度实施的sm2算法协同签名方法实施例1;图2为本发明从第二通信方角度实施的sm2算法协同签名方法实施例1的流程示意图;如图2所示,可以包括以下步骤:

步骤s210:根据选取的随机数以及第一通信方的第一公钥参数,生成第一椭圆曲线群元素,并将第一椭圆曲线群元素传输给第一通信方;

步骤s220:接收第一通信方基于第一椭圆曲线群元素反馈的混淆中间结果,并根据第二私钥分量和混淆中间结果,生成中间签名;

步骤s230:将中间签名传输给第一通信方。

具体而言,在第二通信方的协同下,使得第一通信方计算消息摘要和部分签名结果,并输出签名结果,因此在产生数字签名的过程中不会泄漏用户隐私。与第一部分签名相关的混淆中间结果,使得第一通信方在第二通信方的帮助下完成数字签名,但是第二通信方无法第一通信方签署了什么消息,不会泄漏部分签名结果,达到盲签名的效果。

第二通信方生成第二私钥分量的过程简单,计算量较小。第一通信方根据自己持有的第二私钥分量来产生签名,即使攻击者劫持第二私钥分量,也无法获得完整的私钥,无法实现私钥脱机使用。在私钥托管的应用场合中,可以避免提供私钥托管的服务提供方非授权使用用户私钥来伪造数字签名。本发明能够保护用户隐私并抵抗恶意攻击。

在一个具体的实施例中,生成第二私钥分量的步骤包括:

基于以下公式生成第二私钥分量:

d2∈[1,…,n-1]

其中,d2为第二私钥分量;n为椭圆曲线e(fq)上基点g的阶;

根据选取的随机数以及第一通信方的第一公钥参数,生成第一椭圆曲线群元素的步骤之前还包括步骤:

接收第一通信方传输的第一公钥参数p1;

根据第一公钥参数和第二私钥分量,基于以下公式生成共同公钥:

pa=[d2]p1-g

其中,pa为共同公钥;

公开所述共同公钥pa。

具体而言,第二通信方随机选择私钥分量d2∈[1,…,n-1],根据接收的公钥参数p1和私钥参数d2,生成双方的共同公钥pa=[d2]p1-g=[d1d2-1]g,并公开共同公钥pa。

其中,公开共同公钥pa的同时,还可以将共同公钥pa发送给ca机构用于为订户签发数字证书。

优选的,在产生公钥pa之后,按gm/t0003.1-2012标准6.2给出的方法验证公钥pa是否有效。而此处的验证是为了本发明技术方案的完备性,如果不加验证就直接使用公钥,可能存在安全性问题,会导致私钥泄漏。

在一个具体的实施例中,椭圆曲线群元素包括椭圆曲线群元素r1和椭圆曲线群元素r2;

根据选取的随机数以及第一通信方的第一公钥参数,生成第一椭圆曲线群元素的步骤包括:

分别选取随机数k1、随机数k2,基于以下公式生成椭圆曲线群元素r1和椭圆曲线群元素r2:

r1=[k1]p1

r2=[k2]g

其中,k1∈[1,…,n-1];k2∈[1,…,n-1]。

具体而言,第二通信方选择随机数k1∈[1,…,n-1],随机数k2∈[1,…,n-1],计算椭圆曲线群元素r1=[k1]p1=[k1d1]g,椭圆曲线群元素r2=[k2]g,然后将椭圆曲线群元素r1、椭圆曲线群元素r2发送给第一通信方。

在一个具体的实施例中,中间签名包括第一中间签名s1和第二中间签名s2;

根据第二私钥分量和混淆中间结果,生成中间签名的步骤包括:

根据第二私钥分量d2和随机数k1,基于以下公式生成第一中间签名s1:

根据第二私钥分量d2、随机数k2和混淆中间结果,基于以下公式生成第二中间签名s2:

其中,r′为混淆中间结果。

具体而言,第二通信方选择随机数k1∈[1,…,n-1],随机数k2∈[1,…,n-1],计算椭圆曲线群元素r1=[k1]p1=[k1d1]g,椭圆曲线群元素r2=[k2]g,然后将椭圆曲线群元素r1和椭圆曲线群元素r2发送给第一通信方。

具体而言,第二通信方使用私钥参数d2,随机数k1,随机数k2和接收的中间结果r′,计算中间结果然后将s1和s2发送给第一通信方。

在一个具体的实施例中,在根据第二私钥分量和混淆中间结果,生成中间签名的步骤之前还包括步骤:

检测混淆中间结果r′的值;在检测到混淆中间结果r′的值为0时,根据第一公钥参数以及再次选取的随机数,重新生成第一椭圆曲线群元素。

具体而言,为了安全性,第二通信方检查接收的中间结果r′,若r′=0,则重新执行根据第一公钥参数以及第二私钥分量,生成椭圆曲线群元素的步骤。

本发明从第二通信方角度实施的sm2算法协同签名方法,使得第二通信方可以协助第一通信方生成数字签名,数字签名可以被第一通信方和第二通信方的共同公钥pa验证。通过随机数隐藏部分签名结果r,并不会泄漏部分签名结果r,因此使得第二通信方协助第一通信方完成数字签名,但是第二通信方并不知道第一通信方签署了什么消息,一方面避免了泄漏部分签名结果r,另一方面具有类似盲签名的特征。

本发明从第二通信方角度实施的sm2算法协同解密方法实施例1:

为了解决传统技术无法保护用户隐私、抵抗恶意攻击的问题,本发明还提供了一种从第二通信方角度实施的sm2算法协同解密方法实施例1;图3为本发明从第二通信方角度实施的sm2算法协同解密方法实施例1的流程示意图;如图3所示,可以包括以下步骤:

步骤s310:接收第一通信方根据sm2密文的第一比特串传输的第一比特串对应的椭圆曲线群元素;接收第一通信方传输的根据第一私钥分量和第一比特串对应的椭圆曲线群元素得到的第一点乘结果;

步骤s320:将第二私钥分量与第一点乘结果进行乘积运算,得到第二点乘结果;

步骤s330:根据第二点乘结果和第一比特串对应的椭圆曲线群元素,得到临时对称密钥,并提取sm2密文的第二比特串;

步骤s340:对临时对称密钥和第二比特串进行按位异或运算,得到解密明文;对解密明文进行校验,并在校验成功时输出解密明文。

具体而言,基于上述协同签名方法的技术方案,本发明协同解密方法的解密过程,通信双方仅需要进行很少的交互,从而能够满足云计算环境中低延迟、少交互的应用需求。

在一个具体的实施例中,根据第二点乘结果和第一比特串对应的椭圆曲线群元素,得到临时对称密钥的步骤包括:

基于以下公式得到椭圆曲线群元素(x2,y2):

(x2,y2)=t2-c1*

其中,t2为第二点乘结果;c1*为第一比特串对应的椭圆曲线群元素;

根据椭圆曲线群元素(x2,y2),基于以下公式生成临时对称密钥:

t=kdf(x2||y2,klen)

其中,t为临时对称密钥;||表示拼接;kdf(*)为预先定义的密钥派生函数;klen表述输出的比特串长度;

对解密明文进行校验,并在校验成功时输出解密明文的步骤包括:

基于以下公式得到校验码:

u=hash(x2||m′||y2),

其中,u为校验码;m′为解密明文;hash表示预设的密码杂凑算法;

提取sm2密文中的第三比特串c3,在u=c3时,确认校验成功,输出解密明文m′。

具体而言,第二通信方使用自身的私钥分量d2计算第二点乘结果t2=[d2]t1,其中,t1表示第一点乘结果;然后计算椭圆曲线群元素(x2,y2)=t2-c1*=[d1d2-1]c1*=[da]c1*

需要说明的是,上述解密过程中第一通信方和第二通信方的角色可以互换,即由第二通信方先计算[d2]c1*发送给第一通信方,然后第一通信方完成后续解密过程并输出明文m′。

进一步的,第二通信方计算临时对称密钥t=kdf(x2||y2,klen),其中||表示拼接,kdf(*)为预先定义的密钥派生函数,klen表述输出的比特串长度。其中,若t为全0比特串,则报错并退出。采用固定的密钥来加密是没有意义的,加密结果也是固定值。

第二通信方从密文c中提取比特串c2,并计算其中表示按位异或运算。并计算校验码u=hash(x2||m′||y2),然后从密文c中提取比特串c3,若u≠c3,代表密文c被篡改,报错并退出。第二通信方输出明文m′。

本发明从第一通信方角度实施的sm2算法协同解密方法实施例1:

为了解决传统技术无法保护用户隐私、抵抗恶意攻击的问题,基于以上从第二通信方角度实施的sm2算法协同解密方法的技术方案,本发明提供了一种从第二通信方角度实施的sm2算法协同解密方法实施例1;图4为本发明从第一通信方角度实施的sm2算法协同解密方法实施例1的流程示意图;如图4所示,可以包括以下步骤:

步骤s410:获取sm2密文的第一比特串;对第一比特串进行数据类型转换,得到第一比特串对应的椭圆曲线群元素;

步骤s420:根据第一私钥分量和第一比特串对应的椭圆曲线群元素,得到第一点乘结果;

步骤s430:将第一点乘结果和第一比特串对应的椭圆曲线群元素传输给第二通信方。

具体而言,第一通信方获取sm2密文:c=c1||c3||c2,从密文c中提取比特串c1;对第一比特串c1进行数据类型转换,得到第一比特串对应的椭圆曲线群元素c1*;第一通信方使用私钥分量d1(即第一通信方为上述第一通信方的情况下)计算得到第一点乘结果t1=[d1]c1*,并将t1发送给第二通信方。

在一个具体的实施例中,在根据第一私钥分量和第一比特串对应的椭圆曲线群元素,得到第一点乘结果的步骤之前还包括步骤:

对第一比特串对应的椭圆曲线群元素进行验证,在验证出第一比特串对应的椭圆曲线群元素是椭圆曲线的无穷远点时,报错并退出解密;

以及

根据第一比特串,基于以下公式计算点乘结果s:

s=[h]c1*

其中,h为椭圆曲线上基点的阶n的余因子;c1*为第一比特串对应的椭圆曲线群元素;

在检测到点乘结果s为椭圆曲线的无穷远点时,报错并退出解密。

具体而言,第一通信方可以按gm/t0003.1-2012标准4.2.4和4.2.10给出的方法将第一比特串c1的数据类型转换为椭圆曲线群元素c1*,然后验证c1*是否为椭圆曲线e(fq)的无穷远点,若是则提示错误并退出解密流程。

优选的,验证的方法是将椭圆曲线群元素c1*的坐标x和y代入椭圆曲线方程y=f(x),看看等式是否成立。如果不验证元素是否属于椭圆曲线,一方面后续的点乘运算将会错误,另一方面可能存在特殊输入的攻击,导致安全性问题。

而如果[h]c1*为无穷远点,代表在执行数据加密阶段,并没有使用椭圆曲线的生成元g来计算点乘,这样可能导致恶意攻击,会泄漏用户私钥。

本发明从第一通信方角度实施的sm2算法协同签名装置实施例1:

为了解决传统技术无法保护用户隐私、抵抗恶意攻击的问题,本发明提供了一种从第一通信方角度实施的sm2算法协同签名装置实施例1;图5为本发明从第一通信方角度实施的sm2算法协同签名装置实施例1的结构示意图;如图5所示,可以包括:

第一通信方消息摘要生成单元510,用于根据预设的密码杂凑算法生成待签名消息的消息摘要;

第一通信方消息签名生成单元520,用于接收第二通信方基于第一公钥参数以及选取的随机数反馈的第一椭圆曲线群元素;根据消息摘要和第一椭圆曲线群元素,生成第一部分签名;基于第一部分签名进行模运算,生成混淆中间结果,并将混淆中间结果传输给第二通信方;在接收到第二通信方根据混淆中间结果反馈的中间签名时,根据中间签名和第一部分签名,生成第二部分签名;根据第一部分签名和第二部分签名,得到完整的sm2数字签名。

需要说明的是,本发明从第一通信方角度实施的sm2算法协同签名装置中的各单元模块,能够对应实现上述从第一通信方角度实施的sm2算法协同签名方法中的各流程步骤,此处不再重复赘述。

本发明从第二通信方角度实施的sm2算法协同签名装置实施例1:

为了解决传统技术无法保护用户隐私、抵抗恶意攻击的问题,本发明提供了一种从第二通信方角度实施的sm2算法协同签名装置实施例1;图6为本发明从第二通信方角度实施的sm2算法协同签名装置实施例1的结构示意图;如图6所示,可以包括:

第二通信方参数生成单元610,用于根据选取的随机数以及第一通信方的第一公钥参数,生成第一椭圆曲线群元素,并将第一椭圆曲线群元素传输给第一通信方;

第二通信方中间签名生成单元620,用于接收第一通信方基于第一椭圆曲线群元素反馈的混淆中间结果,并根据第二私钥分量和混淆中间结果,生成中间签名;将中间签名传输给第一通信方。

需要说明的是,本发明从第二通信方角度实施的sm2算法协同签名装置中的各单元模块,能够对应实现上述从第二通信方角度实施的sm2算法协同签名方法中的各流程步骤,此处不再重复赘述。

本发明从第二通信方角度实施的sm2算法协同解密装置实施例1:

为了解决传统技术无法保护用户隐私、抵抗恶意攻击的问题,本发明提供了一种从第二通信方角度实施的sm2算法协同解密装置实施例1;图7为本发明从第二通信方角度实施的sm2算法协同解密装置实施例1的结构示意图;如图7所示,可以包括:

第二通信方接收单元710,用于接收第一通信方传输的根据第一私钥分量和所述第一比特串对应的椭圆曲线群元素得到的第一点乘结果;以及接收第一通信方根据sm2密文的第一比特串传输的第一比特串对应的椭圆曲线群元素;

第二通信方解密单元720,用于将第二私钥分量与第一点乘结果进行乘积运算,得到第二点乘结果;根据第二点乘结果和第一比特串对应的椭圆曲线群元素,得到临时对称密钥,并提取sm2密文的第二比特串;对临时对称密钥和第二比特串进行按位异或运算,得到解密明文;对解密明文进行校验,并在校验成功时输出解密明文。

需要说明的是,本发明从第二通信方角度实施的sm2算法协同解密装置中的各单元模块,能够对应实现上述从第二通信方角度实施的sm2算法协同解密方法中的各流程步骤,此处不再重复赘述。

本发明从第一通信方角度实施的sm2算法协同解密装置实施例1:

为了解决传统技术无法保护用户隐私、抵抗恶意攻击的问题,本发明提供了一种从第一通信方角度实施的sm2算法协同解密装置实施例1;图8为本发明从第一通信方角度实施的sm2算法协同解密装置实施例1的结构示意图;如图8所示,可以包括:

第一通信方处理单元810,用于获取sm2密文的第一比特串;根据第一私钥分量和第一比特串对应的椭圆曲线群元素,得到第一点乘结果;对第一比特串进行数据类型转换,得到第一比特串对应的椭圆曲线群元素;

第一通信方传输单元820,用于将第一点乘结果和第一比特串对应的椭圆曲线群元素传输给第二通信方。

需要说明的是,本发明从第一通信方传角度实施的sm2算法协同解密装置中的各单元模块,能够对应实现上述从第一通信方传角度实施的sm2算法协同解密方法中的各流程步骤,此处不再重复赘述。

本发明sm2算法协同签名系统实施例1:

为了解决传统技术无法保护用户隐私、抵抗恶意攻击的问题,本发明提供了一种sm2算法协同签名系统实施例1,可以包括第一通信方和第二通信方;

第二通信方根据选取的随机数以及第一通信方的第一公钥参数,生成第一椭圆曲线群元素,并将第一椭圆曲线群元素传输给第一通信方;

第一通信方根据预设的密码杂凑算法生成待签名消息的消息摘要,并根据消息摘要和第一椭圆曲线群元素,生成第一部分签名;基于第一部分签名进行模运算,生成混淆中间结果,并将混淆中间结果传输给第二通信方;第二通信方根据第二私钥分量和混淆中间结果,生成中间签名;并将中间签名传输给第一通信方;

第一通信方根据中间签名和第一部分签名,生成第二部分签名;并根据第一部分签名和第二部分签名,得到完整的sm2数字签名。

具体而言,为了详细说明本发明sm2算法协同签名系统的技术方案,特以实际应用中的实现流程为例说明:

sm2算法协同签名系统可以包括两个参与方第一通信方和第二通信方。双方按照sm2标准算法确定哈希函数hv,椭圆曲线e,椭圆曲线群生成元g,和加群的阶n。第一通信方作为签名者,具有sm2规定的za参数。具体实现流程包括:

1、生成密钥对的协议

1)第一通信方随机选择私钥分量d1∈[1,…,n-1],计算公钥参数p1=[d1]g,并发送公钥参数p1给第二通信方。

2)第一通信方随机选择私钥分量d2∈[1,…,n-1],根据接收的公钥参数p1和私钥参数d2,生成双方的共同公钥pa=[d2]p1-g=[d1d2-1]g,并公开共同公钥pa。

其中,共同公钥pa是第一通信方和第二通信方使用各自的私钥分量生成。将第一通信方和第二通信方的共同私钥记为da,则pa=[da]g=[d1d2-1]g,因此有da=(d1d2-1),

需要说明的是计算p1需要使用d1,在p1的基础上计算pa。这里也可以由第二通信方先计算p1,然后第一通信方在p1基础上计算pa,因为计算结果是对称的。

优选的:第二通信方在产生公钥pa之后,按gm/t0003.1-2012标准6.2给出的方法验证公钥pa是否有效。

在一个具体的实施例中,椭圆曲线群元素包括第一椭圆曲线群元素r1和第一椭圆曲线群元素r2;

第二通信方分别选取随机数k1、随机数k2,基于以下公式生成第一椭圆曲线群元素r1和第一椭圆曲线群元素r2:

r1=[k1]p1

r2=[k2]g

其中,k1∈[1,…,n-1];k2∈[1,…,n-1];g为椭圆曲线e(fq)上的基点;n为椭圆曲线e(fq)上基点g的阶;

第一通信方分别选取随机数k3、随机数k4,基于以下公式生成椭圆曲线群元素(x1,y1):

(x1,y1)=[k3]r1+r2+[k4]g

其中,k3∈[1,…,n-1];k4∈[1,…,n-1];x1为椭圆曲线群元素(x1,y1)的x轴坐标,y1为椭圆曲线群元素(x1,y1)的y轴坐标;

根据椭圆曲线群元素(x1,y1)和消息摘要,基于以下公式生成第一部分签名:

r=e+x1(modn)

其中,e为消息摘要;r为第一部分签名;modn为模n运算。

2、协同产生数字签名的协议

1)第二通信方选择随机数k1∈[1,…,n-1],随机数k2∈[1,…,n-1],计算椭圆曲线群元素r1=[k1]p1=[k1d1]g,椭圆曲线群元素r2=[k2]g,然后将椭圆曲线群元素r1和椭圆曲线群元素r2发送给第一通信方。

2)第一通信方接收椭圆曲线群元素r1,椭圆曲线群元素r2;第一通信方选择随机数k3∈[1,…,n-1],随机数k4∈[1,…,n-1],计算椭圆曲线群元素(x1,y1)=[k3]r1+r2+[k4]g,其中x1是椭圆曲线群元素(x1,y1)的x轴坐标;第一通信方计算消息摘要e=h(za||m),计算部分签名结果r=e+x1(modn),其中za是根据用户a的可辨别标识ida计算的杂凑值,m是输入的待签名原文;如果r=0则返回步骤1)重新执行;第一通信方使用随机数k4和部分签名结果r计算混淆中间结果r′=r+k4(modn),然后将r′发送给第二通信方。

3)第二通信方使用私钥参数d2,随机数k1,随机数k2和接收的中间结果r′,计算中间结果然后将s1和s2发送给第一通信方。

4)第一通信方接收中间结果s1和s2;第一通信方使用私钥参数d1,随机数k3,部分签名结果r,接收的中间结果s1和s2,计算部分签名结果如果s=0则返回步骤1)重新执行。

第一通信方输出符合sm2签名格式要求的数字签名(r,s),使用共同公钥pa可以验证该签名结果。

必须指出,在本协议步骤1)中第二通信方需要获得第一通信方的私钥分量d1对应的公钥参数p1=[d1]g,这可以通过增加一个前置步骤由第一通信方发送给第二通信方,也可以由第二通信方预先存储该参数并直接用于计算。

在一个具体的实施例中,随机数k1、随机数k2、随机数k3以及随机数k4满足以下条件:

随机数k1、随机数k2、随机数k3以及随机数k4中部分随机数由第二通信方选取得到,剩余部分随机数由第一通信方选取得到;

用于生成sm2数字签名的随机数等式包含随机数k1、随机数k2、随机数k3和随机数k4。

在一个具体的实施例中,随机数k1、随机数k2、随机数k3以及随机数k4满足以下随机数等式:

k=k1k3d1+k2+k4(modn)

其中,k为随机数且k∈[1,…,n-1];d1为第一私钥。

具体而言,签名结果正确性证明:

记k=k1k3d1+k2+k4(modn),则(x1,y1)=[k]g;

(x1,y1)=[k1k3d1+k2+k4]g

r=h(za||m)+x1(modn)

可见,部分签名结果r和s的形式与标准的sm2签名结果相同,仅仅是使用了一种特定方式来产生随机数k,由于k1、k2、k3、k4均为随机选择,仍然满足一次一密的要求。由于4个随机数由第一通信方和第二通信方分别贡献,这保证了任何一方无法控制最终输出签名结果中的随机数k,换言之任何一方不能根据已知的随机数k来推导出私钥da。

具体而言,本发明中的随机数k并非只有一种构造,可能存在多种,基本要求是:(1)随机数k1、随机数k2、随机数k3以及随机数k4必须由通信双方分别贡献,不应由其中一方产生;(2)最终计算结果必须能够变换为k-rd的形式,即可以把所有k[i]变换整理到一个统一的项。

本协同产生数字签名的协议使得第一通信方能够生成数字签名,数字签名可以被一个第一通信方和第二通信方的共同公钥pa验证。

本协同产生数字签名的协议中中间结果r′与部分签名结果r相关,但是并不会泄漏部分签名结果r,因此使得第一通信方在第二通信方的帮助下完成了一个数字签名,但是第二通信方并不知道第一通信方签署了什么消息,一方面避免了泄漏部分签名结果r,另一方面具有类似盲签名的特征。

优选的,在本协议步骤2)中,除了判断r=0之外,还需要计算[r]g+(x1,y1),然后检查计算结果与o是否相等,若相等则应返回本协议步骤1)重新选择随机数。其中,o是椭圆曲线加法群的单位元,称为无穷远点或零点。

优选的,在本协议在步骤2)中第一通信方接收椭圆曲线群元素r1、r2之后,计算s1=[h]r1,s2=[h]r2,其中h是n的余因子。若s1或者s2是无穷远点,则返回本协议步骤1)重新执行。

优选的,在本协议步骤2)中第二通信方检查接收的中间结果r′,若r′=0则返回步骤1)重新执行。

优选的,在本协议步骤4)中第一通信方接收中间结果s1和s2之后,若检查发现s1=0或者s2=0,则返回步骤1)重新执行。

优选的,在本协议步骤4)之后增加一个步骤,计算r+s,若满足r+s=n则返回步骤1)重新执行。

需要说明的是,本发明中的第一通信方和第二通信方可以代表客户端、服务端其中一个角色,如果第一通信方是客户端则第二通信方是服务端。一般地,优先选择服务端执行第二通信方的步骤,因为客户端执行第一通信方的步骤,则客户端计算明文摘要和输出签名结果,这样有利于保护用户隐私。

本发明sm2算法协同解密系统实施例1:

为了解决传统技术无法保护用户隐私、抵抗恶意攻击的问题,本发明还提供了一种sm2算法协同解密系统实施例1,可以包括第一通信方和第二通信方;

第一通信方获取sm2密文的第一比特串;根据第一私钥分量和第一比特串对应的椭圆曲线群元素,得到第一点乘结果;对第一比特串进行数据类型转换,得到第一比特串对应的椭圆曲线群元素;将第一点乘结果和第一比特串对应的椭圆曲线群元素传输给第二通信方;

第二通信方将第二私钥分量与第一点乘结果进行乘积运算,得到第二点乘结果;根据第二点乘结果和第一比特串对应的椭圆曲线群元素,得到临时对称密钥,并提取sm2密文的第二比特串;对临时对称密钥和第二比特串进行按位异或运算,得到解密明文;对解密明文进行校验,并在校验成功时输出解密明文。

具体而言,本发明sm2算法协同解密系统的实现流程可以包括以下步骤:

3、协同解密密文c的协议

1)第一通信方获取sm2密文:c=c1||c3||c2,从密文c中提取比特串c1,按gm/t0003.1-2012标准4.2.4和4.2.10给出的方法将的数据类型转换为椭圆曲线群元素c1,然后验证c1是否为椭圆曲线f(fq)的无穷远点,若是则提示错误并退出解密流程。

2)第一通信方使用私钥分量d1计算t1=[d1]c1,并将t1发送给第二通信方。

3)第二通信方使用私钥分量d2计算t2=[d2]t1,然后计算(x2,y2)=t2-c1=[d1d2-1]c1=[da]c1。

4)第二通信方计算t=kdf(x2||y2,klen),其中||表示拼接,kdf(*)为预先定义的密钥派生函数,klen表述输出的比特串长度。若t为全0比特串,则报错并退出。

5)第二通信方从密文c中提取比特串c2,并计算其中表示按位异或运算。

6)第二通信方计算u=hash(x2||m′||y2),然后从密文c中提取比特串c3,若u≠c3则报错并退出。

7)第二通信方输出明文m′。

需要说明的而是,上面的计算过程中第一通信方和第二通信方的角色可以互换,即由第二通信方先计算[d2]c1发送给第一通信方,然后第一通信方完成后续解密过程并输出明文m′。

优选的,在解密流程的步骤2)前面增加一个步骤,第一通信方计算s=[h]c1,其中h是n的余因子。若s是无穷远点,则报错并退出。

本发明sm2算法协同签名及解密方法、装置与系统具有如下优点:

1)消息摘要e和部分签名结果r均由第一通信方计算,最后也由第一通信方输出签名结果,因此在产生数字签名的过程中不会泄漏用户隐私。

2)中间结果r′与部分签名结果r相关,但是并不会泄漏部分签名结果r,因此使得第一通信方在第二通信方的帮助下完成了一个数字签名,但是第二通信方并不知道第一通信方签署了什么消息,具有类似盲签名的特征。

3)通信双方分别产生随机数作为私钥分量,产生私钥和计算公钥的过程比较简单,计算量较小。

4)通信两方分别持有私钥分量来协同产生签名,攻击者劫持其中一方的条件下无法获得完整的私钥,也无法实现私钥脱机使用。

5)通信两方分别持有私钥分量来协同产生签名,在私钥托管的应用场合中,可以避免提供私钥托管的服务提供方非授权使用用户私钥来伪造数字签名。

6)签名过程和解密过程中,通信双方仅需要进行很少的交互,从而能够满足云计算环境中低延迟、少交互的应用需求。

本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述从第一通信方角度实施例的sm2算法协同签名方法中的步骤。

本发明提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现上述从第一通信方角度实施例的sm2算法协同签名方法中的步骤。

本发明提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述从第二通信方角度实施例的sm2算法协同签名方法中的步骤。

本发明提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现上述从第二通信方角度实施例的sm2算法协同签名方法中的步骤。

本发明提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述从第二通信方角度实施例的sm2算法协同解密方法中的步骤。

本发明提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现上述从第二通信方角度实施例的sm2算法协同解密方法中的步骤。

本发明提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述从第一通信方角度实施例的sm2算法协同解密方法中的步骤。

本发明提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现上述从第一通信方角度实施例的sm2算法协同解密方法中的步骤。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,包括以上方法所述的步骤,所述的存储介质,如:rom/ram、磁碟、光盘等。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1