一种基于加法密钥分割的SM2签名方法与流程

文档序号:13534142阅读:1967来源:国知局
一种基于加法密钥分割的SM2签名方法与流程

本发明涉及密码领域,具体涉及一种基于加法密钥分割的sm2签名方法。



背景技术:

目前,基于公钥密码学的数字签名技术已经广泛应用在电子商务、身份认证等应用中,成为保证信息安全的重要工具,而私钥的安全性及使用是保证这些应用安全的基础。而随着我国移动电子商务的高速发展,基于usbkey等硬件设备的服务方式很难在移动终端领域得到大家的认可,因此在移动设备等不安全环境下进行私钥的有效保护是目前面临的一个重大问题。



技术实现要素:

本发明的目的是针对现有技术中的不足,提供一种基于加法密钥分割的sm2签名方法。

为实现上述目的,本发明公开了如下技术方案:

一种签名密钥生成方法,包括:

s1客户端a生成自身的子私钥da:客户端a产生一个位于[1,n-1]之间的随机数,将产生的随机数作为da,即有:da∈[1,n-1],其中n表示椭圆曲线的基点g的阶;

s2服务端b生成自身的子私钥db:服务端b产生一个位于[1,n-1]之间的随机数,将产生的随机数作为db;

s3客户端a和服务端b约定一个正整数m,其中m≥112;

s4客户端a产生m-1个位于[1,n-1]之间的随机数,将产生的随机数作为xi,并计算且取符号u,并令u=0;即有:xi∈[0,n-1];其中modn表示模n运算;

s5服务端b产生m-1个位于[1,n-1]之间的随机数,将产生的随机数作为yi,并计算并令且产生一个位于[1,n-1]之间的随机数,将产生的随机数作为v;

即有:yi∈[0,n-1];

v∈[1,n-1];

s6对i=1,2,......,m执行如下过程:

s601客户端a产生一个0或1的随机数,将产生的随机数记为k,并产生一个位于[1,n-1]之间的随机数,将产生的随机数记为r,且令hk=xi,将(h0,h1)发送给服务端b;

即有:k∈{0,1};

r∈[1,n-1]。

其中表示长度相等的两个比特串按比特的异或运算;

s602服务端b计算(h0+yi)v-1modn,将计算结果记为f0,计算(h1+yi)v-1modn,将计算结果记为f1;

即有:f0=(h0+yi)v-1modn;

f1=(h1+yi)v-1modn;

其中v-1modn表示使得v·y≡1(modn)成立的唯一整数y,1≤y≤n-1;

s603服务端b产生一个位于[1,n-1]之间的随机数,将产生的随机数记为x,并计算[x]g,将计算结果记为x,且将x发送给客户端a;

即有:x∈[1,n-1];

x=[x]g。

其中[x]g表示椭圆曲线上点g的x倍点,x是正整数;

s604客户端a生成一个位于[1,n-1]之间的随机数,将产生的随机数记为y,并计算[y]g,将计算结果记为f,计算h(f),将计算结果记为key;

即有:y∈[1,n-1];

f=[y]g;

key=h(f)。

其中,h为密码杂凑函数;

若k=0,则y=f,若k≠0,则y=x+f,并将y发送给服务端b;

s605服务端b计算h([x]y),将计算结果记为k0,计算h([x](y-x)),将计算结果记为k1,计算将计算结果记为c0,计算将计算结果记为c1,并将c0和c1发送给客户端a;

即有:k0=h([x]y);

k1=h([x](y-x));

s7客户端a计算将计算结果记为fk,计算u+fkmodn,将计算结果记为u;

即有:p=[v-1]([u-1]g)-g;

s8服务端b将[v-1]g发送给客户端a,客户端a计算签名公钥[u-1]([v-1]g)-g,记为p;

即有:p=[u-1]([v-1]g)-g。

本发明公开的一种基于加法密钥分割的sm2签名方法,包括:

客户端a生成待签名消息m的消息摘要e和第一部分签名q1,并将e和第一部分签名发送给服务端b;

服务端b生成第二部分签名r和第三部分签名s1,将r和s1发送给第一部分客户端a;

客户端a根据q1、r和s1生成完整签名(r,s)并输出。

在进一步的技术方案中,所述客户端a生成待签名消息m的消息摘要e和第一部分签名q1,并将e和第一部分签名q1发送给服务端b,包括:

客户端a计算h(z||m),将计算结果记为e,且生成一个位于[1,n-1]之间的随机数,将计算结果记为k1,并计算[k1](p+g),将计算结果记为q1,将e和q1发送给服务端b,其中,m为待签名的消息,z是按照sm2算法对用户标识、标识长度、椭圆曲线参数、用户签名公钥等信息使用密码杂凑函数h计算的杂凑值。

在进一步的技术方案中,所述服务端b生成第二部分签名r和第三部分签名s1,将r和s1发送给第一部分客户端a,包括:

服务端b生成一个位于[1,n-1]之间的随机数,将计算结果记为k2,计算椭圆曲线点[k2](p+g)+[k1](p+g),将计算结果记为(x1,y1),计算(e+x1)modn,将计算结果记为r,其中,若r=0则返回步骤9,否则计算k2+rdbmodn,将计算结果记为s1,并将r,s1发送给客户端a。

在进一步的技术方案中,所述客户端a根据q1、r和s1生成完整签名(r,s)并输出,包括:

客户端a计算k1+rda+s1-rmodn,将计算结果记为s,其中,若s=0或r+s=0modn,则返回至客户端a生成待签名消息m的消息摘要e和第一部分签名q1步骤进行重新计算,否则,消息m的数字签名为(r,s)。

本发明公开的一种基于加法密钥分割的sm2签名方法,具有以下

有益效果:

本方法提出将私钥拆分成两个私钥分量,一个在服务端,一个在客户端,通信双方均无法得到完整私钥,确保私钥的存储安全。进行签名运算时,需服务端和客户端共同参与,任何一方无法独立完成签名,从而确保私钥使用的安全性。

附图说明

图1为本发明的简要流程图。

图2为本发明签名密钥的生成的流程图。

图3为本发明基于sm2算法的签名方法实施例的流程图。

具体实施方式

下面将对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

见图1、图2,本发明公开的一种签名密钥生成方法,包括:

s1客户端a生成自身的子私钥da:客户端a产生一个位于[1,n-1]之间的随机数,将产生的随机数作为da,即有:da∈[1,n-1],其中n表示椭圆曲线的基点g的阶;

s2服务端b生成自身的子私钥db:服务端b产生一个位于[1,n-1]之间的随机数,将产生的随机数作为db;

s3客户端a和服务端b约定一个正整数m,其中m≥112;

s4客户端a产生m-1个位于[1,n-1]之间的随机数,将产生的随机数作为xi,并计算且取符号u,并令u=0;即有:xi∈[0,n-1];其中modn表示模n运算;

s5服务端b产生m-1个位于[1,n-1]之间的随机数,将产生的随机数作为yi,并计算并令且产生一个位于[1,n-1]之间的随机数,将产生的随机数作为v;

即有:yi∈[0,n-1];

v∈[1,n-1];

s6对i=1,2,......,m执行如下过程:

s601客户端a产生一个0或1的随机数,将产生的随机数记为k,并产生一个位于[1,n-1]之间的随机数,将产生的随机数记为r,且令hk=xi,将(h0,h1)发送给服务端b;

即有:k∈{0,1};

r∈[1,n-1]。

其中表示长度相等的两个比特串按比特的异或运算;

s602服务端b计算(h0+yi)v-1modn,将计算结果记为f0,计算(h1+yi)v-1modn,将计算结果记为f1;

即有:f0=(h0+yi)v-1modn;

f1=(h1+yi)v-1modn;

其中v-1modn表示使得v·y≡1(modn)成立的唯一整数y,1≤y≤n-1;

s603服务端b产生一个位于[1,n-1]之间的随机数,将产生的随机数记为x,并计算[x]g,将计算结果记为x,且将x发送给客户端a;

即有:x∈[1,n-1];

x=[x]g。

其中[x]g表示椭圆曲线上点g的x倍点,x是正整数;

s604客户端a生成一个位于[1,n-1]之间的随机数,将产生的随机数记为y,并计算[y]g,将计算结果记为f,计算h(f),将计算结果记为key;

即有:y∈[1,n-1];

f=[y]g;

key=h(f)。

其中,h为密码杂凑函数;

若k=0,则y=f,若k≠0,则y=x+f,并将y发送给服务端b;

s605服务端b计算h([x]y),将计算结果记为k0,计算h([x](y-x)),将计算结果记为k1,计算将计算结果记为c0,计算将计算结果记为c1,并将c0和c1发送给客户端a;

即有:k0=h([x]y);

k1=h([x](y-x));

s7客户端a计算将计算结果记为fk,计算u+fkmodn,将计算结果记为u;

即有:p=[v-1]([u-1]g)-g;

s8服务端b将[v-1]g发送给客户端a,客户端a计算签名公钥[u-1]([v-1]g)-g,记为p;

即有:p=[u-1]([v-1]g)-g。

sm2算法是一种标准的商用密码算法,在密码产品中被广泛的支持和使用。见图3,本发明公开的一种基于加法密钥分割的sm2签名方法,包括:

客户端a生成待签名消息m的消息摘要e和第一部分签名q1,并将e和第一部分签名发送给服务端b;

服务端b生成第二部分签名r和第三部分签名s1,将r和s1发送给第一部分客户端a;

客户端a根据q1、r和s1生成完整签名(r,s)并输出。

在本发明的一种实施例中,所述客户端a生成待签名消息m的消息摘要e和第一部分签名q1,并将e和第一部分签名q1发送给服务端b,包括:

客户端a计算h(z||m),将计算结果记为e,且生成一个位于[1,n-1]之间的随机数,将计算结果记为k1,并计算[k1](p+g),将计算结果记为q1,将e和q1发送给服务端b,其中,m为待签名的消息,z是按照sm2算法对用户标识、标识长度、椭圆曲线参数、用户签名公钥等信息使用密码杂凑函数h计算的杂凑值。

在本发明的一种实施例中,所述服务端b生成第二部分签名r和第三部分签名s1,将r和s1发送给第一部分客户端a,包括:

服务端b生成一个位于[1,n-1]之间的随机数,将计算结果记为k2,计算椭圆曲线点[k2](p+g)+[k1](p+g),将计算结果记为(x1,y1),计算(e+x1)modn,将计算结果记为r,其中,若r=0则返回步骤9,否则计算k2+rdbmodn,将计算结果记为s1,并将r,s1发送给客户端a。

在本发明的一种实施例中,所述客户端a根据q1、r和s1生成完整签名(r,s)并输出,包括:

客户端a计算k1+rda+s1-rmodn,将计算结果记为s,其中,若s=0或r+s=0modn,则返回至客户端a生成待签名消息m的消息摘要e和第一部分签名q1步骤进行重新计算,否则,消息m的数字签名为(r,s)。

相比背景技术中介绍的内容,本方法提出将私钥拆分成两个私钥分量,一个在服务端,一个在客户端,通信双方均无法得到完整私钥,确保私钥的存储安全。进行签名运算时,需服务端和客户端共同参与,任何一方无法独立完成签名,从而确保私钥使用的安全性。

以上所述仅是本发明的优选实施方式,而非对其限制;应当指出,尽管参照上述各实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,其依然可以对上述各实施例所记载的技术方案进行修改,或对其中部分或者全部技术特征进行等同替换;而这些修改和替换,并不使相应的技术方案的本质脱离本发明各实施例技术方案的范围。

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