一种SM9协同数字签名方法和***
技术领域
本发明涉及信息安全技术领域,尤其涉及一种SM9协同数字签名方法和***。
背景技术
SM9密码算法在我国信息安全***中的应用越来越多,但该算法涉及的数学计算较为复杂,运算性能较低,制约着该密码算法的推广使用。如何有效提高其计算性能是近年来学界的研究热点。目前SM9数字签名的实现方式主要分为两种,软件实现数字签名和硬件实现数字签名,具体地:
1)软件实现数字签名:一般是利用高性能CPU或GPU(图形处理器,GraphicsProcessing Unit,缩写:GPU,又称显示核心、视觉处理器、显示芯片)来实现,通过大数量的CPU/GPU的多核或众核计算优势,可以达到每秒数十万次签名级别的性能;
2)硬件实现数字签名:一般是采用FPGA(Field Programmable Gate Array的缩写,是在PAL、GAL等可编程器件的基础上进一步发展的产物)/ASIC密码芯片/PCI-E密码卡/智能IC卡/USB智能密码钥匙/密码机等来实现,最终以硬件方式即通过密码卡来提供数字签名服务,受限于硬件资源或工艺水平,硬件实现的数字签名性能比较低,大概只能够到每秒签名几十次~几千次级别的性能;
其中,软件实现数字签名虽然性能较高,但由于用户的签名密钥会出现在内存中,可能造成签名密钥的泄露,带来安全隐患。硬件实现数字签名的安全强度高,有完善的密钥保护机制。在进行数字签名运算时,用户的私钥只存在于硬件载体中,使用户的签名密钥不存在泄露的风险,但是性能比较低,可能无法应付某些高并发、高性能场景的需求。
如何在给用户提供高性能SM9数字签名的同时,保证用户的签名密钥的安全性是当下急需解决的问题。
发明内容
本发明所要解决的技术问题是针对现有技术的不足,提供了一种SM9协同数字签名方法和***。
本发明的一种SM9协同数字签名方法的技术方案如下:
CPU或GPU生成临时签名信息(rc,gc),并将待签名消息M和所述临时签名信息(rc,gc)进行打包,并将打包后的签名消息包(M,(rc,gc))发送至密码卡;
所述密码卡根据所述签名消息包(M,(rc,gc))、预存的签名辅助信息(rs,gs)和预存的签名密钥得到所述待签名消息M对应的数字签名值(h,S);
其中,rc为第一随机数,根据所述第一随机数rc得到第一数值gc,rs为第二随机数,根据所述第二随机数rs得到第二数值gs,且所述第一数值gc和所述第二数值gs均为国密SM9标准定义的第三循环群GT中的元素,所述国密SM9标准定义第一循环群G1、第二循环群G2和所述第三循环群GT,且G1×G2双线性映射至所述第三循环群GT。
本发明的一种SM9协同数字签名方法的有益效果如下:
实现SM9数字签名并不单独由CPU或GPU完成,也不单独由密码卡,而是通过两个实体即密码卡和CPU或GPU共同完成数字签名,CPU或GPU具有高性能运算能力,且密码卡的运算比较简单,保证SM9数字签名的效率,而且,签名密钥预存在密码卡中,使用户的签名密钥不存在泄露的风险,具有高安全性和高可靠性,也就是说,本申请的一种SM9协同数字签名方法给用户提供高性能SM9数字签名的同时,也能保证用户的签名密钥的安全性。
在上述方案的基础上,本发明的一种SM9协同数字签名方法还可以做如下改进。
进一步,所述根据所述第一随机数rc得到第一数值gc,包括:
通过第一公式计算签名双线性对g,且所述签名双线性对g为所述第三循环群GT中的元素,所述第一公式为:g=e(P1,Ppub-s);
通过第二公式计算所述得到所述第一数值g
c,所述第二公式为:
其中,P1表示所述第一循环群G1的生成元,e(P1,Ppub-s)表示G1×G2到所述第三循环群GT的双线性对,Ppub-s表示签名的主公钥,且Ppub-s为所述第二循环群G2中的元素。
进一步,所述密码卡得到数字签名值(h,S)的过程,包括:
根据第三公式得到第一签名值h,所述第三公式为:h=H2(M||w,N);
根据第四公式得到第二签名值S,所述第四公式为:S=[l]dsA;
将所述第一签名值h和所述第二签名值S打包后得到所述数字签名值(h,S);
其中,w=g
c*g
s,
l=(r-h)mod N,r=(r
c+r
s)mod N,ds
A表示所述签名密钥,H
2(M||w,N)表示密码杂凑函数SM3所派生的密码函数,[k]P表示椭圆曲线上的点P的k倍点,P是第一循环群G
1中的元素,N为所述第一循环群G
1、所述第二循环群G
2或所述第三循环群G
T的阶。
进一步,还包括:当生成打包后的签名消息包(M,(rc,gc))时,删除所述临时签名信息(rc,gc)。
采用上述进一步方案的有益效果是:当生成打包后的签名消息包(M,(rc,gc))时,删除所述临时签名信息(rc,gc),以保证CPU或GPU的高性能运算能力。
本发明的一种SM9协同数字签名***的技术方案如下:
包括处理器和密码卡,所述处理器用于生成临时签名信息(rc,gc),并将待签名消息M和所述临时签名信息(rc,gc)进行打包,并将打包后的签名消息包(M,(rc,gc))发送至密码卡;
所述密码卡用于根据所述签名消息包(M,(rc,gc))、预存的签名辅助信息(rs,gs)和预存的签名密钥得到所述待签名消息M对应的数字签名值(h,S);
其中,rc为第一随机数,根据所述第一随机数rc得到第一数值gc,rs为第二随机数,根据所述第二随机数rs得到第二数值gs,且所述第一数值gc和所述第二数值gs均为国密SM9标准定义的第三循环群GT中的元素,所述国密SM9标准定义第一循环群G1、第二循环群G2和所述第三循环群GT,且G1×G2双线性映射至所述第三循环群GT。
本发明的一种SM9协同数字签***的有益效果如下:
实现SM9数字签名并不单独由CPU或GPU完成,也不单独由密码卡,而是通过两个实体即密码卡和CPU或GPU共同完成数字签名,CPU或GPU具有高性能运算能力,且密码卡的运算比较简单,保证SM9数字签名的效率,而且,签名密钥预存在密码卡中,使用户的签名密钥不存在泄露的风险,具有高安全性和高可靠性,也就是说,本申请的一种SM9协同数字签名***给用户提供高性能SM9数字签名的同时,也能保证用户的签名密钥的安全性。
在上述方案的基础上,本发明的一种SM9协同数字签***还可以做如下改进。
进一步,所述处理器具体用于通过第一公式计算签名双线性对g,且所述签名双线性对g为所述第三循环群GT中的元素,所述第一公式为:g=e(P1,Ppub-s);
通过第二公式计算所述得到所述第一数值g
c,所述第二公式为:
其中,P1表示所述第一循环群G1的生成元,e(P1,Ppub-s)表示G1×G2到所述第三循环群GT的双线性对,Ppub-s表示签名的主公钥,且Ppub-s为所述第二循环群G2中的元素。进一步,所述密码卡具体用于:
根据第三公式得到第一签名值h,所述第三公式为:h=H2(M||w,N);
根据第四公式得到第二签名值S,所述第四公式为:S=[l]dsA;
将所述第一签名值h和所述第二签名值S打包后得到所述数字签名值(h,S);
其中,w=g
c*g
s,
l=(r-h)mod N,r=(r
c+r
s)mod N,ds
A表示所述签名密钥,H
2(M||w,N)表示密码杂凑函数SM3所派生的密码函数,[k]P表示椭圆曲线上的点P的k倍点,P是第一循环群G
1中的元素,N为所述第一循环群G
1、所述第二循环群G
2或所述第三循环群G
T的阶。
进一步,所述处理器还用于当生成打包后的签名消息包(M,(rc,gc))时,删除所述临时签名信息(rc,gc)。
采用上述进一步方案的有益效果是:当生成打包后的签名消息包(M,(rc,gc))时,删除所述临时签名信息(rc,gc),以保证处理器的高性能运算能力。
进一步,所述处理器为CPU或GPU。
附图说明
图1为本发明实施例的一种SM9协同数字签名方法的流程示意图;
图2为本发明实施例的一种SM9协同数字签名***的结构示意图;
具体实施方式
如图1所示,本发明实施例的一种SM9协同数字签名方法,包括如下步骤:
S1、CPU或GPU生成临时签名信息(rc,gc),并将待签名消息M和所述临时签名信息(rc,gc)进行打包,并将打包后的签名消息包(M,(rc,gc))发送至密码卡;
S2、所述密码卡根据所述签名消息包(M,(rc,gc))、预存的签名辅助信息(rs,gs)和预存的签名密钥得到所述待签名消息M对应的数字签名值(h,S);
其中,rc为第一随机数,根据所述第一随机数rc得到第一数值gc,rs为第二随机数,根据所述第二随机数rs得到第二数值gs,且所述第一数值gc和所述第二数值gs均为国密SM9标准定义的第三循环群GT中的元素,所述国密SM9标准定义第一循环群G1、第二循环群G2和所述第三循环群GT,且G1×G2双线性映射至所述第三循环群GT。
实现SM9数字签名并不单独由CPU或GPU完成,也不单独由密码卡,而是通过两个实体即密码卡和CPU或GPU共同完成数字签名,CPU或GPU具有高性能运算能力,且密码卡的运算比较简单,保证SM9数字签名的效率,而且,签名密钥预存在密码卡中,使用户的签名密钥不存在泄露的风险,具有高安全性和高可靠性,也就是说,本申请的一种SM9协同数字签名方法给用户提供高性能SM9数字签名的同时,也能保证用户的签名密钥的安全性。
可以理解的是,S1中安全性要求不高的运算由高性能的第一实体即CPU或GPU来完成,且密码卡的运算比较简单,保证SM9数字签名的效率。,签名密钥预存在第二实体即密码卡中,使用户的签名密钥不存在泄露的风险,具有高安全性和高可靠性,其中,第一实体和第二实体只需要一次交互就能完成完整的数字签名,简单方便,且第一实体和第二实体之间的4.协议简单方便。
较优地,在上述技术方案中,所述根据所述第一随机数rc得到第一数值gc,包括:
通过第一公式计算签名双线性对g,且所述签名双线性对g为所述第三循环群GT中的元素,所述第一公式为:g=e(P1,Ppub-s);
通过第二公式计算所述得到所述第一数值g
c,所述第二公式为:
其中,P1表示所述第一循环群G1的生成元,e(P1,Ppub-s)表示G1×G2到所述第三循环群GT的双线性对,Ppub-s表示签名的主公钥,且Ppub-s为所述第二循环群G2中的元素。由于P1为第一循环群G1的生成元,那么P1一定为所述第一循环群G1中的元素。
其中,可用e(Q1,Q2)表示G1×G2到所述第三循环群GT的双线性对,Q1为所述第一循环群G1中的生成元,Q2为所述第二循环群G2中的元素,那么:将e(Q1,Q2)中的Q1替换为P1,将e(Q1,Q2)的Q2替换为Ppub-s,即得到e(P1,Ppub-s),也就是说,e(P1,Ppub-s)是e(Q1,Q2)的一种具体实施方式。较优地,在上述技术方案中,所述密码卡得到数字签名值(h,S)的过程,包括:
根据第三公式得到第一签名值h,所述第三公式为:h=H2(M||w,N);
根据第四公式得到第二签名值S,所述第四公式为:S=[l]dsA;
将所述第一签名值h和所述第二签名值S打包后得到所述数字签名值(h,S);
其中,w=g
c*g
s,
l=(r-h)mod N,r=(r
c+r
s)mod N,ds
A表示所述签名密钥,H
2(M||w,N)表示密码杂凑函数SM3所派生的密码函数,[k]P表示椭圆曲线上的点P的k倍点,P是第一循环群G
1中的元素,N为所述第一循环群G
1、所述第二循环群G
2或所述第三循环群G
T的阶。
其中,可用H2(Q3)表示密码杂凑函数SM3所派生的密码函数,将Q3替换为“M||w,N”,即得到H2(M||w,N),也就是说,H2(M||w,N)是H2(Q3)的一种具体实施形式。
其中,用十六进制进行表示阶的值,阶的值为B6400000、02A3A6F1、D603AB4F、F58EC744、49F2934B、18EA8BEE、E56EE19或D69ECF25等
较优地,在上述技术方案中,还包括:当生成打包后的签名消息包(M,(rc,gc))时,删除所述临时签名信息(rc,gc)。
当生成打包后的签名消息包(M,(rc,gc))时,删除所述临时签名信息(rc,gc),以保证CPU或GPU的高性能运算能力。
在上述各实施例中,虽然对步骤进行进行了编号S1、S2等,但只是本申请给出的具体实施例,本领域的技术人员可根据实际情况对调整S1、S2等的执行顺序,此也在本发明的保护范围内。
如图2所示,本发明实施例的一种SM9协同数字签名***200,包括处理器210和密码卡220,所述处理器210用于生成临时签名信息(rc,gc),并将待签名消息M和所述临时签名信息(rc,gc)进行打包,并将打包后的签名消息包(M,(rc,gc))发送至密码卡220;
所述密码卡220用于根据所述签名消息包(M,(rc,gc))、预存的签名辅助信息(rs,gs)和预存的签名密钥得到所述待签名消息M对应的数字签名值(h,S);
其中,rc为第一随机数,根据所述第一随机数rc得到第一数值gc,rs为第二随机数,根据所述第二随机数rs得到第二数值gs,且所述第一数值gc和所述第二数值gs均为国密SM9标准定义的第三循环群GT中的元素,所述国密SM9标准定义第一循环群G1、第二循环群G2和所述第三循环群GT,且G1×G2双线性映射至所述第三循环群GT。
实现SM9数字签名并不单独由CPU或GPU完成,也不单独由密码卡220,而是通过两个实体即密码卡220和CPU或GPU共同完成数字签名,CPU或GPU具有高性能运算能力,且密码卡220的运算比较简单,保证SM9数字签名的效率,而且,签名密钥预存在密码卡220中,使用户的签名密钥不存在泄露的风险,具有高安全性和高可靠性,也就是说,本申请的一种SM9协同数字签名***200给用户提供高性能SM9数字签名的同时,也能保证用户的签名密钥的安全性。
较优地,在上述技术方案中,所述处理器210具体用于通过第一公式计算签名双线性对g,且所述签名双线性对g为所述第三循环群GT中的元素,所述第一公式为:g=e(P1,Ppub-s);
通过第二公式计算所述得到所述第一数值g
c,所述第二公式为:
其中,P1表示所述第一循环群G1的生成元,e(P1,Ppub-s)表示G1×G2到所述第三循环群GT的双线性对,Ppub-s表示签名的主公钥,且Ppub-s为所述第二循环群G2中的元素。
较优地,在上述技术方案中,所述密码卡220具体用于:
根据第三公式得到第一签名值h,所述第三公式为:h=H2(M||w,N);
根据第四公式得到第二签名值S,所述第四公式为:S=[l]dsA;
将所述第一签名值h和所述第二签名值S打包后得到所述数字签名值(h,S);
其中,w=g
c*g
s,
l=(r-h)mod N,r=(r
c+r
s)mod N,ds
A表示所述签名密钥,H
2(M||w,N)表示密码杂凑函数SM3所派生的密码函数,[k]P表示椭圆曲线上的点P的k倍点,P是第一循环群G
1中的元素,N为所述第一循环群G
1、所述第二循环群G
2或所述第三循环群G
T的阶。
较优地,在上述技术方案中,所述处理器210还用于当生成打包后的签名消息包(M,(rc,gc))时,删除所述临时签名信息(rc,gc)。
当生成打包后的签名消息包(M,(rc,gc))时,删除所述临时签名信息(rc,gc),以保证处理器210的高性能运算能力。
较优地,在上述技术方案中,所述处理器210为CPU或GPU。
上述关于本发明的一种SM9协同数字签名***200中的各参数和各个单元模块实现相应功能的步骤,可参考上文中关于一种SM9协同数字签名方法的实施例中的各参数和步骤,在此不做赘述。
在本发明中,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。