一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于模归约的国密算法SM2的快速实现方法及系统与流程

2022-04-13 23:32:15 来源:中国专利 TAG:

基于模归约的国密算法sm2的快速实现方法及系统
技术领域
1.本发明涉及计算机安全技术领域,特别是涉及基于模归约的国密算法sm2的快速实现方法及系统。


背景技术:

2.本部分的陈述仅仅是提到了与本发明相关的背景技术,并不必然构成现有技术。
3.国密算法sm2,包括:数字签名算法、密钥交换协议和公钥加密算法;国密算法sm2目前所使用的椭圆曲线参数是256位椭圆曲线参数,定义在素域上的sm2算法是在模运算的基础上实现的,其中模乘算法为核心算法,决定着sm2的运行效率,模乘运算的快慢直接决定了国密算法sm2的快慢,目前在开源算法库中对sm2的模乘运算主要使用montgomery算法以及基于预计算的comb算法。
4.sm2标准推荐了一条256比特素域上的椭圆曲线,该素数具有稀疏性质,经过核算,256比特具有同样稀疏性质的素数只有两个,另一个是nist标准。
5.目前各主要的sm2开源算法库在实现中对大数运算库的依赖性较强,以及与nist标准的实现方法相似度较高,因此自主创新的实现方法对于sm2的研究具有重要的意义。
6.在实现本发明的过程中,发明人发现现有技术中存在以下技术问题:现有sm2算法在计算过程中,数字签名算法在实现签名和验签时效率较低。浪费了大量的计算资源,特别是服务器需要进行大量的签名和验签运算的时候,现有的sm2计算方式,提高了时间复杂度,在芯片上运行时,对芯片的功耗较大,国密sm2算法运算速度慢,影响用户的使用体验。


技术实现要素:

7.为了解决现有技术的不足,本发明提供了基于模归约的国密算法sm2的快速实现方法及系统;第一方面,本发明提供了基于模归约的国密算法sm2的快速实现方法;基于模归约的国密算法sm2的快速实现方法,包括:获取待运算的国密算法sm2;所述待运算的国密算法sm2,包括:数字签名算法;所述数字签名算法,用于对用户的原始数据进行签名,得到对应的数字签名结果;根据待运算国密算法sm2当前的计算过程,选择对应的运算模块,实现国密算法sm2的快速运算;当计算过程中遇到模加计算过程时,选择模加运算模块;当计算过程中遇到模减计算过程时,选择模减运算模块;当计算过程中遇到素域模乘计算过程时,选择素域模乘运算模块;当计算过程中遇到阶模乘计算过程时,选择阶模乘运算模块;
当计算过程中遇到模逆计算过程时,选择模逆运算模块。
8.第二方面,本发明提供了基于模归约的国密算法sm2的快速实现系统;基于模归约的国密算法sm2的快速实现系统,包括:获取模块,其被配置为:获取待运算的国密算法sm2;所述待运算的国密算法sm2,包括:数字签名算法;所述数字签名算法,用于对用户的原始数据进行签名,得到对应的数字签名结果;快速运算模块,其被配置为:根据待运算国密算法sm2当前的计算过程,选择对应的运算模块,实现国密算法sm2的快速运算;当计算过程中遇到模加计算过程时,选择模加运算模块;当计算过程中遇到模减计算过程时,选择模减运算模块;当计算过程中遇到素域模乘计算过程时,选择素域模乘运算模块;当计算过程中遇到阶模乘计算过程时,选择阶模乘运算模块;当计算过程中遇到模逆计算过程时,选择模逆运算模块。
9.与现有技术相比,本发明的有益效果是:通过对国密算法sm2的数字签名算法、密钥交换协议或公钥加密算法运行过程中遇到的模加、模减、模乘和模逆过程,采用本发明设计的运算模块进行计算,大大降低了数字签名、密钥交换或公钥加密过程的时间复杂度,能够提升数字签名的速度、密钥交换的速度和公钥加密的速度,在芯片上运行时,对芯片的功耗降低,使得系统性能提升。
10.本发明针对sm2算法中素域特征的稀疏性质,提出了基于模归约的一种新的模运算实现方法,包括模加运算、模减运算、模乘运算、模逆运算,该算法有利于纯软件实现,也利于汇编及硬件实现,算法的运行效率优于当前已知的开源算法库,同时也为sm2的研究提供了新的方法。
11.本发明用golang语言进行编程验证,所有代码均为自主开发,未调用任何开源及大数运算库,通过验证,在同类编程语言下,sm2签名运行效率优于已知开源算法库约一倍以上,验签效率大于。
附图说明
12.构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
13.图1为实施例一的算法3:高256位归约算法(模p);图2为实施例一的算法5:模乘算法(阶n)。
具体实施方式
14.应该指出,以下详细说明都是示例性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
15.需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式
也意图包括复数形式,此外,还应当理解的是,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
16.在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
17.本实施例所有数据的获取都在符合法律法规和用户同意的基础上,对数据的合法应用。
18.实施例一本实施例提供了基于模归约的国密算法sm2的快速实现方法;基于模归约的国密算法sm2的快速实现方法,包括:s101:获取待运算的国密算法sm2;所述待运算的国密算法sm2,包括:数字签名算法、密钥交换协议或公钥加密算法;s102:根据待运算国密算法sm2当前的计算过程,选择对应的运算模块,实现国密算法sm2的快速运算;当计算过程中遇到模加计算过程时,选择模加运算模块;当计算过程中遇到模减计算过程时,选择模减运算模块;当计算过程中遇到素域模乘计算过程时,选择素域模乘运算模块;当计算过程中遇到阶模乘计算过程时,选择阶模乘运算模块;当计算过程中遇到模逆计算过程时,选择模逆运算模块。
19.应理解地,所述数字签名算法,用于对用户的原始数据进行签名,得到对应的数字签名结果;所述数字签名算法用于数字签名和验证,满足多种密码应用中的身份认证和数据完整性、真实性的安全需求;所述密钥交换协议,用于满足通信双方经过两次或可选三次信息传递过程,计算获取一个由双方共同决定的共享秘密密钥(会话密钥)。
20.所述公钥加密算法,用于消息加解密,消息发送者可以利用接收者的公钥对消息进行加密,接收者用对应的私钥进行解密,获取消息。
21.进一步地,所述数字签名算法,具体过程包括:第1步:置;第2步:计算;第3步:产生随机数;第4步:计算椭圆曲线点;第5步:计算;判断或;是否成立,如果是就返回第3步;如果否,就进入第6步;第6步:计算;判断是否成立,如果是就返回第3步;如果否就进入第7步;第7步:确定数字签名;输出消息m及其数字签名。
22.进一步地,所述当计算过程中遇到模加计算过程时,选择模加运算模块;具体包括:s102a1:输入素数,整数;;;s102a2:对待执行加法运算的加数执行加法运算,表示加数的数量;加法运算结果用进制表示,对应表示的系数:;s102a3:令;s102a4:计算;s102a5:判断是否有溢出,如果有进位溢出则;如果没有溢出,则保持不变;s102a6:判断是否成立,如果成立,则;如果不成立,则保持不变;s102a7:输出。
23.进一步地,所述当计算过程中遇到模减计算过程时,选择模减运算模块;具体包括:s102b1:输入素数,整数,;s102b2:对待执行减法运算的被减数和减数,执行减法运算,减法运算结果用进制表示,对应表示的系数:;s102b3:令:;s102b4:计算;s102b5:判断是否有借位溢出,如果有借位溢出,则;如果没有借位溢出,则保持的值不变;s102b6:判断是否成立,如果成立,则;如果不成立,则保持的值不变;s102b7:输出。
24.进一步地,所述当计算过程中遇到素域模乘计算过程时,选择素域模乘运算
模块;具体包括:s102c1:输入素数,整数,其中,;s102c2:计算:;s102c3:计算高256位的归约值;s102c4计算:;s102c5:对溢出值进行归约;s102c6:计算:;s102c7:输出。
25.进一步地,所述s102c3:计算高256位的归约值;具体包括:s102c31:输入:;表示在进制下与乘法结果的高8位;s102c32:;;;;;、、、和均为中间参数;中间参数用于保存对应加法的结果;s102c33:;s102c34:;s102c35:
;s102c36:;s102c37:;s102c38:;其中,表示乘法运算结果的高8位归约完之后的进制对应的系数。
26.进一步地,所述当计算过程中遇到阶模乘计算过程时,选择阶模乘运算模块;具体包括:s102d1:输入素数,整数;预计算值;素数n表示sm2曲线素数p对应的阶;表示进制下n的相反数;s102d2:计算:;表示进制下的结果的对应系数;s102d3:;表示的结果在进制下的高8位;s102d4:初始值为7,按照、、、、、、和的顺序,对、、、、、、和中的每一个都执行s102d41,全部执行完毕后,输出;s102d41:;;和。
27.进一步地,所述当计算过程中遇到模逆计算过程时,选择模逆运算模块;具体包括:s102e1:输入素数,整数;;s102e2:计算;
s102e3:赋初始值:;s102e4:判断是否成立,如果成立,则进入s102e41;如果不成立,则进入s102e5;s102e41:判断是否是偶数,当是偶数,则执行,,;执行完毕后,再次判断是否是偶数,如果依旧是偶数,则再次执行,,;重复上述过程直至不是偶数;如果不是偶数,就进入s102e42;s102e42:判断是否是偶数,当是偶数,则执行,,;执行完毕后,再次判断是否是偶数,如果依旧是偶数,则再次执行,,;重复上述过程直至不是偶数;如果不是偶数,就进入s102e43;s102e43:判断是否成立,如果成立,则执行,,,;如果不成立,则执行,,,;返回s102e4;s102e5:如果,则;s102e6:计算,,;s102e7:输出。
28.sm2曲线定义在素域上,其中素数的定义为:;该素数具有稀疏性质,本发明针对这一稀疏性质提出了基于模新的归约算法,目的是更加高效的进行模运算。该算法的核心是利用17次64比特加法完成乘法后高256位数据的归约计算。
29.基于素域的sm2算法所涉及的大数运算长度为256比特,其中包括模加、模减、模乘运算。所有数据定义为数组,数组长度与cpu的工作环境相关,假设cpu工作的环境为比特,一般为32或者64,那么数组长度为。大数可以表示为比特的维
数组:,这里每个都是比特字,的值一般为8或者4。
30.数学上这个表示对应于整数的进制表示:在本发明中,无特殊强调则值为32,的值为8。
31.对于,分别表示为进制形式,则的进制表示为:;,这里的表示低位向高位的进位值,且。模加的一般方法为在大数加法的基础上,判断是否有溢出(即是否为0),如果有溢出则进行减操作。本发明我们以加操作代替减操作,这是因为在sm2算法中的值为,从而在多个数的连续相加中,可以先进行多次加法,再利用一次模运算完成归约计算,如算法1所示:算法1:模加算法;输入:素数,整数,;输出:;1.;2.令;计算;为预计算值;3.如果有进位溢出则;4.如果,则;5. 输出。
32.说明:1.在sm2中,根据的值,第2步的乘法可以用对的移位及加减法完成,并不需要乘法操作;即:;显然加法的次数限定在,则有,第2步的乘法的结果小于。
33.2.多个值相加的归约算法可以用于椭圆曲线点加和倍点的运算中,并有效减小计算复杂度,例如坐标下点的倍点运算中第1步
;该算法也是后面模乘运算的重要组成部分。
34.模减算法与模加算法类似,执行减法时需要判断是否借位,并进行加操作,令:;;这里的表示低位向高位的借位值,且有。与模加类似在进行多个值的模减时,可以先进行多次减法,再利用一次模运算完成归约计算,如算法2所示:算法2:模减算法;输入:素数,整数,;输出:;1. ;2.令;计算;3.如果有借位溢出则;4.如果,则;5.输出。
35.注:多个值的模减运算对于减小椭圆曲线点加及倍点运算的复杂度有重要作用,例如点加运算中计算输出点的坐标时,就有连续对3个值的减法操作。
36.对于;;;乘法(平方)算法是计算的进制结果。在乘法(平方)运算中,计算结果的比特长度是的长度的两倍,因此需要归约算法来计算。本发明通过研究sm2曲线域的稀疏性,提出了新的模的归约算法,这也是本发明的核心算法。
37.在sm2的设计中;素数;式中2的指数的最大公约数为32,所以选择来表示256比特数。即元素,其32进制表示为:;
对于域中元素,计算,需要首先计算出的512比特表达式:;令,考虑根据素域的表达式有:;结合上述公式,可以得到约减算法:;将的次数降到7,这里的的值为:;基于以上公式,本发明提出了新颖的高256位归约算法,核心是利用17次加法完成的计算,如算法3所示:算法3:高256位归约算法(模);输入:,,,,,,,;输出:,,,,,,,;1.;;;;;2.;;;3. ;
;4.;;5.;;6.;;7.。
38.附图1详细描述了该归约过程。基于以上算法,我们可以给出模乘运算,如算法4所示:算法4:模乘运算(模);输入:素数,整数;输出:;1.计算:;2. 调用算法3计算高256位的归约值;3. 计算:;4. 调用算法1对溢出值进行归约;5. 计算:。
39.注:这里第3步的运算利用移位相加(减)的操作方式进行计算。
40.在sm2算法中,点群的阶为素数:在sm2协议中,需要多次调用模的乘法运算,由于的值与不同,不能直接调用算法4,当前在开源库中一般都是调用大数运算库。
41.hasse定理表明,但我们可以计算更精确的关系,我们进一步观察到的值为:
其中最高32比特的值为1,因此我们可以利用算法1的思想给出模的快速实现方法,如算法5所示:算法5:模乘运算(模);输入:素数,整数,预计算值;输出:;1.计算:;2.;3.3.1;3.2;3.3;4.输出。
42.说明:1.第2步为初始化的值,即取乘法结果的高256位值。
43.2.第3.1步对的乘法即将256比特值左移32比特,高32位赋值为,最低的32位用的低256位相应值填充。
44.3.第3.2步乘法计算中只需要计算与的低128位乘法,与的高128位乘法为1次移位运算;;由于的值为32比特,因此乘法结果为256比特,不会产生溢出,附图2详细描述了该计算过程。
45.模逆运算一般使用扩展欧几里得算法或者费马定理,但由于本发明已经实现了高效的模乘算法,因此结合“部分蒙哥马利求逆算法”(partial montgomery inversion),我们实现了更加高效的模逆运算,如算法6所示:算法6:基于蒙哥马利方法的模逆运算;输入:素数,整数;输出:;1.计算;2.;
3. while do3.1 whileis even,do ;3.2 while is even,do ;3.3 if,then;else;4.if;//2-4步为partial montgomery 算法,此时:,且;5.计算:;6.输出。
46.说明:1.相比标准二元求逆法,部分蒙哥马利算法中,3.3步中计算与的值,由减法更换为加法,且在计算中不需要模操作,因此实现速度较快,但是在计算结果中多出了一项。
47.2.第4步结束时:;因此需要第5步消去项。
48.3.第1步和第5步的模乘计算,可在移位后调用算法4中的第2-5步进行归约计算,复杂度与整体算法相比可以忽略。但如果没有高效的模乘运算,则该算法并不适用。
49.4.通过编程测试,与标准的二元求逆法相比,该算法复杂度减少约以上(包括模与模)。
50.模加、模减、模乘、模逆构成椭圆曲线运算的基础,在sm2的点的基本运算中,我们调用以上基础模运算模块,按照sm2椭圆曲线算法标准完成点加与倍点运算。为了与各开源算法库进行同等条件下的比较,按照当前各开源库通用的椭圆曲线标量乘法实现方法,在点乘运算中,对于基点的标量乘法按照窗口为7的预计算点值的方法进行实现;对于非固定点的标量乘法按照窗口为5的方法进行实现。
51.sm2协议实现按照sm2标准算法实现。由于本发明只针对sm2基础模运算,椭圆曲线点的运算及sm2协议实现不属于本发明的内容,因此不再赘述。
52.基于模归约方法的sm2实现方法对sm2的实现效率进行了有效提升,我们以golang语言,结合汇编算法进行验证。
53.验证条件:以签名验签速度为参照,基点标量乘法预计算点值窗口为7(即预计算
37*64个点值),非固定点标量乘法方法下窗口为5,无公钥的预计算点值,测试环境为intelcore i5-10210u cpu,1.60ghz,ubuntu单线程运行。
54.验证结果:通过测试当前开源代码库,各主要编程语言下sm2签名最快的运算速度为每秒5万次,验签速度为每秒1.3万次。
55.我们在新的方法下签名运算速度大于每秒12万次,速度增加以上;验签速度大于每秒1.8万次,速度增加以上。
56.实施例二本实施例提供了基于模归约的国密算法sm2的快速实现系统;基于模归约的国密算法sm2的快速实现系统,包括:获取模块,其被配置为:获取待运算的国密算法sm2;所述待运算的国密算法sm2,包括:数字签名算法;所述数字签名算法,用于对用户的原始数据进行签名,得到对应的数字签名结果;快速运算模块,其被配置为:根据待运算国密算法sm2当前的计算过程,选择对应的运算模块,实现国密算法sm2的快速运算;当计算过程中遇到模加计算过程时,选择模加运算模块;当计算过程中遇到模减计算过程时,选择模减运算模块;当计算过程中遇到素域模乘计算过程时,选择素域模乘运算模块;当计算过程中遇到阶模乘计算过程时,选择阶模乘运算模块;当计算过程中遇到模逆计算过程时,选择模逆运算模块。
57.此处需要说明的是,上述获取模块和快速运算模块对应于实施例一中的步骤s101至s102,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。
58.需要说明的是,上述模块作为系统的一部分可以在诸如一组计算机可执行指令的计算机系统中执行。
59.以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献