隐藏私钥的交互式SM2签名方法、系统和终端与流程

文档序号:16198380发布日期:2018-12-08 06:22阅读:179来源:国知局
隐藏私钥的交互式SM2签名方法、系统和终端与流程

本发明涉及安全技术领域,具体涉及一种隐藏私钥的交互式sm2算法的签名方法、系统和终端。

背景技术

目前,基于公钥密码学的数字签名和加解密技术已经广泛应用在电子商务、身份认证等应用中,成为保证信息安全的重要工具,而私钥的安全性及使用是保证这些应用安全的基础。

一般情况下,运行密码算法时需要调用完整的密钥信息,所以需要密钥直接存储在内存中。而在防护能力较弱的终端上,这会增加密钥丢失的风险。例如手机丢失、算法运算过程被窃听等都会导致密钥的丢失。为了提高私钥的安全性,现有技术中提出了一种称为门限密码学的算法,即将私钥进行拆分并分布在不同的物理设备中,以避免全部私钥信息的直接存储和使用。比如,一个(t,n)的门限签名方案中,私钥可分布在n个成员中,t个或t个以上成员可以合作完成签名,而小于t个成员时则无法完成签名。

cn104243456b中公开了一种适用于云计算的基于sm2算法的签名及解密方法和系统。其主要方法是:第一通信方和第二通信方通过密钥协商来生成私钥,最终两方仅掌握与私钥相关的部分信息,而且双方均不掌握具体的私钥值。在需要签名或解密时,双方可通过交互实现。

但是,在上述技术方案中,第一通信方和第二通信方掌握等量的信息,私钥是双方协商产生的,私钥的责任方并不完全拥有私钥,在电子签名中,没有体现出私钥责任方对私钥的主权性。在实际中,通信的双方对私钥所附带的责任并不对等。因此需要对核心数据进行不对等的划分,让一方掌握较多的核心数据,而让另一方掌握较少的核心数据。因此,需要一种签名方法或系统或终端,使得私钥责任方拥有对私钥的主动权,让参与签名的双方能够不对等地掌握核心数据。



技术实现要素:

有鉴于此,本发明提供一种隐藏私钥的交互式sm2签名方法,所述sm2使用的椭圆曲线具有基点g和阶数n,所述方法包括:

第一通信方:

生成私钥da;

基于所述私钥da生成子私钥d0、子私钥d1、子私钥d2、子私钥d3;

基于基点g生成子基点g0和子基点g1;

将子私钥d2、子私钥d3和子基点g1发送至第二通信方;

第二通信方:

接收并存储第一通信方发送的子私钥d2、子私钥d3和子基点g1;

第一通信方:

删除私钥da、子私钥d2、子私钥d3和子基点g1;

存储子私钥d0、子私钥d1和子基点g0;

第一通信方:

获取待签名消息m;

生成待签名消息m的消息摘要e;

根据子基点g0生成第一部分签名q1;

将消息摘要e和第一部分签名q1发送给第二通信方;

第二通信方:

接收第一通信方发送的消息摘要e和第一部分签名q1;

根据第一部分签名q1、消息摘要e还有子基点g1生成第二部分签名r,根据子私钥d2生成第三部分签名s1,根据子私钥d3生成第四部分签名s2;

将第二部分签名r、第三部分签名s1和第四部分签名s2发送给第一通信方;

第一通信方:

接收第二通信方发送的第二部分签名r、第三部分签名s1和第四部分签名s2;

根据子私钥d0、子私钥d1、第二部分签名r、第三部分签名s1和第四部分签名s2生成完整签名(r,s)。

进一步地,所述第一通信方生成私钥da包括:产生一个随机数,将产生的随机数作为私钥da。

进一步地,所诉第一通信方基于所述私钥da生成子私钥d0、子私钥d1、子私钥d2、子私钥d3包括:

生成随机数a0和随机数a1,其中a0,a1∈[1,n-1];

计算d0=a1/(1+da);

d1=-(da/a1+a0);

d2=a0/a1;

d3=a0×a1/(1+da)。

进一步地,所述第一通信方基于基点g,生成子基点g0和子基点g1包括:

计算g0=[a0]g;

g1=[a1]g0。

进一步地,所述第一通信方根据子基点g0生成待签名消息m的消息摘要e和第一部分签名q1包括:

第一通信方将z和m拼接形成m′,并计算e=hash(m′),其中,z表示第一通信方和第二通信方共同的身份标识,hash()表示预定的密码杂凑函数;

第一通信方生成随机数k0,其中k0∈[1,n-1];

计算q1=[k0]g0。

进一步地,所述第二通信方根据第一部分签名q1、消息摘要e还有子基点g1生成第二部分签名r,并根据子私钥d2生成第三部分签名s1,根据子私钥d3生成第四部分签名s2包括:

生成随机数k1、随机数k2,其中k1,k2∈[1,n-1];

计算(x,y)=[k1]q1+[k2]g1;

r=(x+e)modn;

s1=k1×d2modn;

s2=(r+k2)×d3modn。

进一步地,所述第一通信方根据子私钥d0、子私钥d1、第二部分签名r、第三部分签名s1和第四部分签名s2生成完整签名并输出包括:

计算s=(d0×k0×s1+d0×d1×r+s2)modn;

若s不等于0且不等于n-r,则第一通信方将(r,s)作为完整签名输出。

相应地,本发明还提供一种隐藏私钥的交互式sm2签名系统,所述sm2使用的椭圆曲线具有基点g和阶数n,所述系统包括:第一通信方和第二通信方,其中,

所述第一通信方,用于生成私钥da;基于所述私钥da生成子私钥d0、子私钥d1、子私钥d2、子私钥d3;基于基点g生成子基点g0和子基点g1;将子私钥d2、子私钥d3和子基点g1发送至第二通信方;删除私钥da、子私钥d2、子私钥d3和子基点g1;存储子私钥d0、子私钥d1和子基点g0;获取待签名消息m;生成待签名消息m的消息摘要e;根据子基点g0生成第一部分签名q1;将消息摘要e和第一部分签名q1发送给第二通信方;接收第二通信方发送的第二部分签名r、第三部分签名s1和第四部分签名s2;根据子私钥d0、子私钥d1、第二部分签名r、第三部分签名s1和第四部分签名s2生成完整签名;

所述第二通信方,接收并存储第一通信方发送的子私钥d2、子私钥d3和子基点g1;接收第一通信方发送的消息摘要e和第一部分签名q1;根据第一部分签名q1、消息摘要e还有子基点g1生成第二部分签名r,根据子私钥d2生成第三部分签名s1,根据子私钥d3生成第四部分签名s2;将第二部分签名r、第三部分签名s1和第四部分签名s2发送给第一通信方。

相应地,本发明还提供一种支持sm2签名的终端,所述sm2使用的椭圆曲线具有基点g和阶数n,包括:第一生成模块、第一发送模块、删除模块、第一存储模块、获取模块、第二生成模块、第二发送模块、第一接收模块和完整签名生成模块,其中,

所述第一生成模块,用于生成私钥da,基于所述私钥da生成子私钥d0、子私钥d1、子私钥d2、子私钥d3,基于基点g生成子基点g0和子基点g1;

所述第一发送模块,用于发送子私钥d2、子私钥d3和子基点g1;

所述删除模块,用于删除私钥da、子私钥d2、子私钥d3和子基点g1;

所述第一存储模块,用于存储子私钥d0、子私钥d1和子基点g0;

所述获取模块,用于获取待签名消息m;

所述第二生成模块,用于生成待签名消息m的消息摘要e,根据子基点g0生成第一部分签名q1;

所述第二发送模块,用于发送消息摘要e和第一部分签名q1;

所述第一接收模块,用于接收第二部分签名r、第三部分签名s1和第四部分签名s2;

所述完整签名生成模块,用于根据子私钥d0、子私钥d1、第二部分签名r、第三部分签名s1和第四部分签名s2生成完整签名。

相应地,本发明还提供一种终端,包括:第二接收模块、第二存储模块、第三接收模块、部分签名生成模块和第三发送模块;其中,

所述第二接收模块,用于接收子私钥d2、子私钥d3和子基点g1;

所述第二存储模块,用于存储子私钥d2、子私钥d3和子基点g1;

所述第三接收模块,用于接收消息摘要e和第一部分签名q1;

所述部分签名生成模块,用于根据第一部分签名q1、消息摘要e和子基点g1生成第二部分签名r,根据子私钥d2生成第三部分签名s1,根据子私钥d3生成第四部分签名s2;

所述第三发送模块,用于发送第二部分签名r、第三部分签名s1和第四部分签名s2。

与现有技术相比,本发明技术方案使核心数据私钥da仅由第一通信方掌握,私钥责任方主动分割私钥给另一方,从而实现参与签名的双方能够不对等地掌握核心数据的有益效果。

附图说明

图1为本发明一种隐藏私钥的交互式sm2签名方法的流程图;

图2为本发明一种隐藏私钥的交互式sm2签名方法的初始化部分的流程图;

图3为本发明一种隐藏私钥的交互式sm2签名方法的主体部分的流程图。

具体实施方式

为了使本领域的技术人员更好地理解本发明的技术方案,下面结合附图和具体实施例对本发明作进一步的详细说明。

本发明提供一种隐藏私钥的交互式sm2签名方法,在一个实施方式中,sm2使用的椭圆曲线具有基点g和阶数n。参照图1,本发明的签名方法具体步骤包括初始化部分和主体部分,其中,

所述sm2签名方法的初始化部分为:

第一通信方:

步骤101:生成私钥da;优选地以密文形式存储;

步骤102:基于所述私钥da生成子私钥d0、子私钥d1、子私钥d2、子私钥d3;

步骤103:基于基点g生成子基点g0和子基点g1;

步骤104:将子私钥d2、子私钥d3和子基点g1发送至第二通信方;

第二通信方:

步骤205:接收第一通信方发送的子私钥d2、子私钥d3和子基点g1;

步骤206:存储子私钥d2、子私钥d3和子基点g1;

第一通信方:

步骤107:删除私钥da、子私钥d2、子私钥d3和子基点g1;

步骤108:存储子私钥d0、子私钥d1和子基点g0。

所述sm2签名方法的主体部分为:

第一通信方:

步骤109:获取待签名消息m;

步骤110:生成待签名消息m的消息摘要e;

步骤111:根据子基点g0生成第一部分签名q1;

步骤112:将消息摘要e和第一部分签名q1发送给第二通信方;

第二通信方:

步骤213:接收第一通信方发送的消息摘要e和第一部分签名q1;

步骤214:根据第一部分签名q1、消息摘要e还有子基点g1生成第二部分签名r,根据子私钥d2生成第三部分签名s1,根据子私钥d3生成第四部分签名s2;

步骤215:将第二部分签名r、第三部分签名s1和第四部分签名s2发送给第一通信方;

第一通信方:

步骤116:接收第二通信方发送的第二部分签名r、第三部分签名s1和第四部分签名s2;

步骤117:根据子私钥d0、子私钥d1、第二部分签名r、第三部分签名s1和第四部分签名s2生成完整签名(r,s)。

优选地,第一通信方在步骤117之后还包括:

步骤118:输出待签名消息m和生成的完整签名(r,s)。

验签的过程与标准算法sm2的验签过程一致。

在该实施方式中,第二通信方使用的是处理后的子私钥,而非与加密过程对应的真正私钥。私钥是sm2算法的核心参数,一旦泄露,影响重大。本发明通过这样的设置,可以防止第二通信方直接获得核心数据。这一方面使得攻击者通过攻击第二通信方无法获取核心数据,另一方面可以避免第二通信方有意主动泄露核心数据。综上,本发明技术方案使核心数据私钥da仅由第一通信方掌握,从而实现参与签名的双方能够不对等地掌握核心数据的有益效果。

此外,在该实施方式中,第一通信方在将子私钥发送给第二通信方之后就删除了。使得密钥的保护由全使用周期的防护缩短到初始化过程中一段很短时间。即仅需要在初始化过程中保护密钥的信息,一旦初始化结束,私钥的明文信息就不会出现在内存和运算中。

此外,在该实施方式中,第二通信方接收第一通信方发来子私钥,而第二通信方自己不生成子私钥。在cn104243456b公开的现有技术中,第一通信方和第二通信方都是通过自己生成随机数来作为自己的子私钥。在现有技术的这种情况下,私钥是协商的,私钥附带的责任双方承担。而本申请第二通信方使用的子私钥不是第二通信方自己生成的,而是第一通信方指定给第二通信方的,私钥附带的责任是私钥责任方承担。相比于前述前有技术,本发明更符合电子签名的要求。

此外,在该实施方式中,第一通信方和第二通信方各自持有两个子私钥,攻击者需要将两个子私钥都窃取才能够伪装成第二通信方。因此,相比于各方只持有一个子私钥的前述现有技术,本发明可以进一步提高第二通信方的安全性。

综上,本发明的技术方案可以有效保证交互式sm2签名的安全性。

下面具体介绍上述隐藏私钥的交互式sm2签名方法的实现方法:

首先,参照图2所示,图2详细介绍了初始化部分的实现步骤。

步骤101包括:产生一个随机数,将产生的随机数作为私钥da。

步骤102包括:生成随机数a0和随机数a1,其中a0,a1∈[1,n-1];

计算d0=a1/(1+da);

d1=-(da/a1+a0);

d2=a0/a1;d3=a0×a1/(1+da)。

步骤103包括:计算g0=[a0]g;

g1=[a1]g0。

其中运算‘[a]g’表示椭圆曲线上的倍点运算。

相应地,步骤107包括:删除私钥da、子私钥d2、子私钥d3、子基点g1、随机数a0和随机数a1。所述删除包括从第一通信方的任何存储介质例如内存、缓存、硬盘中删除数据。

其次,参照图3所示,图3详细介绍了主体部分的实现步骤。

步骤110包括:将z和m拼接形成m′,并计算e=hash(m′);或记为e=hash(z||m)。其中,z表示第一通信方和第二通信方共同的身份标识,hash()表示预定的密码杂凑函数。

步骤111包括:生成随机数k0,其中k0∈[1,n-1];计算q1=[k0]g0。

步骤214包括:生成随机数k1、随机数k2,其中k1,k2∈[1,n-1]

计算(x,y)=[k1]q1+[k2]g1;

r=(x+e)modn;

若r=0,则

重新生成随机数k1、k2,并重新计算(x,y)和r,直到r≠0,

若r≠0,则

计算s1=k1×d2modn;

s2=(r+k2)×d3modn。

步骤117包括:计算s=(d0×k0×s1+d0×d1×r+s2)modn;

若s=0或s=r,则重新执行与此相关的步骤,直到s≠0且s≠r。

若s≠0且s≠r,则第一通信方将(r,s)作为完整签名。

相应地,本发明还提供一种隐藏私钥的交互式sm2签名系统,所述sm2使用的椭圆曲线具有基点g和阶数n,所述系统包括:第一通信方和第二通信方,其中,

所述第一通信方,用于生成私钥da;基于所述私钥da生成子私钥d0、子私钥d1、子私钥d2、子私钥d3;基于基点g生成子基点g0和子基点g1;将子私钥d2、子私钥d3和子基点g1发送至第二通信方;删除私钥da、子私钥d2、子私钥d3和子基点g1;存储子私钥d0、子私钥d1和子基点g0;获取待签名消息m;生成待签名消息m的消息摘要e;根据子基点g0生成第一部分签名q1;将消息摘要e和第一部分签名q1发送给第二通信方;接收第二通信方发送的第二部分签名r、第三部分签名s1和第四部分签名s2;根据子私钥d0、子私钥d1、第二部分签名r、第三部分签名s1和第四部分签名s2生成完整签名;

所述第二通信方,接收并存储第一通信方发送的子私钥d2、子私钥d3和子基点g1;接收第一通信方发送的消息摘要e和第一部分签名q1;根据第一部分签名q1、消息摘要e还有子基点g1生成第二部分签名r,根据子私钥d2生成第三部分签名s1,根据子私钥d3生成第四部分签名s2;将第二部分签名r、第三部分签名s1和第四部分签名s2发送给第一通信方。

相应地,本发明还提供一种支持sm2签名的终端,所述sm2使用的椭圆曲线具有基点g和阶数n,包括:第一生成模块、第一发送模块、删除模块、第一存储模块、获取模块、第二生成模块、第二发送模块、第一接收模块和完整签名生成模块,其中,

所述第一生成模块,用于生成私钥da,基于所述私钥da生成子私钥d0、子私钥d1、子私钥d2、子私钥d3,基于基点g生成子基点g0和子基点g1;

所述第一发送模块,用于发送子私钥d2、子私钥d3和子基点g1;

所述删除模块,用于删除私钥da、子私钥d2、子私钥d3和子基点g1;

所述第一存储模块,用于存储子私钥d0、子私钥d1和子基点g0;

所述获取模块,用于获取待签名消息m;

所述第二生成模块,用于生成待签名消息m的消息摘要e,根据子基点g0生成第一部分签名q1;

所述第二发送模块,用于发送消息摘要e和第一部分签名q1;

所述第一接收模块,用于接收第二部分签名r、第三部分签名s1和第四部分签名s2;

所述完整签名生成模块,用于根据子私钥d0、子私钥d1、第二部分签名r、第三部分签名s1和第四部分签名s2生成完整签名。

相应地,本发明还提供一种终端,包括:第二接收模块、第二存储模块、第三接收模块、部分签名生成模块和第三发送模块;其中,

所述第二接收模块,用于接收子私钥d2、子私钥d3和子基点g1;

所述第二存储模块,用于存储子私钥d2、子私钥d3和子基点g1;

所述第三接收模块,用于接收消息摘要e和第一部分签名q1;

所述部分签名生成模块,用于根据第一部分签名q1、消息摘要e和子基点g1生成第二部分签名r,根据子私钥d2生成第三部分签名s1,根据子私钥d3生成第四部分签名s2;

所述第三发送模块,用于发送第二部分签名r、第三部分签名s1和第四部分签名s2。

以上仅是本发明的优选实施方式,应当指出的是,上述优选实施方式不应视为对本发明的限制,本发明的保护范围应当以权利要求所限定的范围为准。对于本技术领域的普通技术人员来说,在不脱离本发明的精神和范围内,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

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