CN114338049A - 基于模归约的国密算法sm2的快速实现方法及系统 - Google Patents

基于模归约的国密算法sm2的快速实现方法及系统 Download PDF

Info

Publication number
CN114338049A
CN114338049A CN202210243778.XA CN202210243778A CN114338049A CN 114338049 A CN114338049 A CN 114338049A CN 202210243778 A CN202210243778 A CN 202210243778A CN 114338049 A CN114338049 A CN 114338049A
Authority
CN
China
Prior art keywords
calculation process
modular
operation module
encountered
reduction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202210243778.XA
Other languages
English (en)
Other versions
CN114338049B (zh
Inventor
李雷波
许光午
张国艳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shandong Blockchain Research Institute
Original Assignee
Shandong Blockchain Research Institute
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shandong Blockchain Research Institute filed Critical Shandong Blockchain Research Institute
Priority to CN202210243778.XA priority Critical patent/CN114338049B/zh
Publication of CN114338049A publication Critical patent/CN114338049A/zh
Application granted granted Critical
Publication of CN114338049B publication Critical patent/CN114338049B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/50Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate

Landscapes

  • Complex Calculations (AREA)

Abstract

本发明涉及计算机安全技术领域,本发明公开了基于模归约的国密算法SM2的快速实现方法及系统,包括:获取待运算的国密算法SM2;根据待运算国密算法SM2当前的计算过程,选择对应的运算模块,实现国密算法SM2的快速运算;当计算过程中遇到模加计算过程时,选择模加运算模块;当计算过程中遇到模减计算过程时,选择模减运算模块;当计算过程中遇到素域
Figure 788658DEST_PATH_IMAGE001
模乘计算过程时,选择素域
Figure 482945DEST_PATH_IMAGE002
模乘运算模块;当计算过程中遇到阶
Figure 134506DEST_PATH_IMAGE003
模乘计算过程时,选择阶
Figure 773298DEST_PATH_IMAGE003
模乘运算模块;当计算过程中遇到模逆计算过程时,选择模逆运算模块。降低了时间复杂度,在芯片上运行时,对芯片的功耗降低,使得系统性能提升。

Description

基于模归约的国密算法SM2的快速实现方法及系统
技术领域
本发明涉及计算机安全技术领域,特别是涉及基于模归约的国密算法SM2的快速实现方法及系统。
背景技术
本部分的陈述仅仅是提到了与本发明相关的背景技术,并不必然构成现有技术。
国密算法SM2,包括:数字签名算法、密钥交换协议和公钥加密算法;国密算法SM2目前所使用的椭圆曲线参数是256位椭圆曲线参数,定义在素域上的SM2算法是在模运算的基础上实现的,其中模乘算法为核心算法,决定着SM2的运行效率,模乘运算的快慢直接决定了国密算法SM2的快慢,目前在开源算法库中对SM2的模乘运算主要使用Montgomery算法以及基于预计算的Comb算法。
SM2标准推荐了一条256比特素域上的椭圆曲线,该素数具有稀疏性质,经过核算,256比特具有同样稀疏性质的素数只有两个,另一个是NIST标准
Figure 489995DEST_PATH_IMAGE001
目前各主要的SM2开源算法库在实现中对大数运算库的依赖性较强,以及与NIST标准
Figure 73423DEST_PATH_IMAGE001
的实现方法相似度较高,因此自主创新的实现方法对于SM2的研究具有重要的意义。
在实现本发明的过程中,发明人发现现有技术中存在以下技术问题:
现有SM2算法在计算过程中,数字签名算法在实现签名和验签时效率较低。浪费了大量的计算资源,特别是服务器需要进行大量的签名和验签运算的时候,现有的SM2计算方式,提高了时间复杂度,在芯片上运行时,对芯片的功耗较大,国密SM2算法运算速度慢,影响用户的使用体验。
发明内容
为了解决现有技术的不足,本发明提供了基于模归约的国密算法SM2的快速实现方法及系统;
第一方面,本发明提供了基于模归约的国密算法SM2的快速实现方法;
基于模归约的国密算法SM2的快速实现方法,包括:
获取待运算的国密算法SM2;所述待运算的国密算法SM2,包括:数字签名算法;所述数字签名算法,用于对用户的原始数据进行签名,得到对应的数字签名结果;
根据待运算国密算法SM2当前的计算过程,选择对应的运算模块,实现国密算法SM2的快速运算;
当计算过程中遇到模加计算过程时,选择模加运算模块;
当计算过程中遇到模减计算过程时,选择模减运算模块;
当计算过程中遇到素域
Figure 588718DEST_PATH_IMAGE002
模乘计算过程时,选择素域
Figure 338106DEST_PATH_IMAGE002
模乘运算模块;
当计算过程中遇到阶
Figure 647864DEST_PATH_IMAGE003
模乘计算过程时,选择阶
Figure 718589DEST_PATH_IMAGE003
模乘运算模块;
当计算过程中遇到模逆计算过程时,选择模逆运算模块。
第二方面,本发明提供了基于模归约的国密算法SM2的快速实现系统;
基于模归约的国密算法SM2的快速实现系统,包括:
获取模块,其被配置为:获取待运算的国密算法SM2;所述待运算的国密算法SM2,包括:数字签名算法;所述数字签名算法,用于对用户的原始数据进行签名,得到对应的数字签名结果;
快速运算模块,其被配置为:根据待运算国密算法SM2当前的计算过程,选择对应的运算模块,实现国密算法SM2的快速运算;
当计算过程中遇到模加计算过程时,选择模加运算模块;
当计算过程中遇到模减计算过程时,选择模减运算模块;
当计算过程中遇到素域
Figure 303154DEST_PATH_IMAGE002
模乘计算过程时,选择素域
Figure 142934DEST_PATH_IMAGE002
模乘运算模块;
当计算过程中遇到阶
Figure 623594DEST_PATH_IMAGE003
模乘计算过程时,选择阶
Figure 712772DEST_PATH_IMAGE003
模乘运算模块;
当计算过程中遇到模逆计算过程时,选择模逆运算模块。
与现有技术相比,本发明的有益效果是:
通过对国密算法SM2的数字签名算法、密钥交换协议或公钥加密算法运行过程中遇到的模加、模减、模乘和模逆过程,采用本发明设计的运算模块进行计算,大大降低了数字签名、密钥交换或公钥加密过程的时间复杂度,能够提升数字签名的速度、密钥交换的速度和公钥加密的速度,在芯片上运行时,对芯片的功耗降低,使得系统性能提升。
本发明针对SM2算法中素域特征的稀疏性质,提出了基于模归约的一种新的模运算实现方法,包括模加运算、模减运算、模乘运算、模逆运算,该算法有利于纯软件实现,也利于汇编及硬件实现,算法的运行效率优于当前已知的开源算法库,同时也为SM2的研究提供了新的方法。
本发明用Golang语言进行编程验证,所有代码均为自主开发,未调用任何开源及大数运算库,通过验证,在同类编程语言下,SM2签名运行效率优于已知开源算法库约一倍以上,验签效率大于
Figure 304291DEST_PATH_IMAGE004
附图说明
构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
图1为实施例一的算法3:高256位归约算法(模p);
图2为实施例一的算法5:模乘算法(阶N)。
具体实施方式
应该指出,以下详细说明都是示例性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
本实施例所有数据的获取都在符合法律法规和用户同意的基础上,对数据的合法应用。
实施例一
本实施例提供了基于模归约的国密算法SM2的快速实现方法;
基于模归约的国密算法SM2的快速实现方法,包括:
S101:获取待运算的国密算法SM2;所述待运算的国密算法SM2,包括:数字签名算法、密钥交换协议或公钥加密算法;
S102:根据待运算国密算法SM2当前的计算过程,选择对应的运算模块,实现国密算法SM2的快速运算;
当计算过程中遇到模加计算过程时,选择模加运算模块;
当计算过程中遇到模减计算过程时,选择模减运算模块;
当计算过程中遇到素域
Figure 998577DEST_PATH_IMAGE002
模乘计算过程时,选择素域
Figure 446876DEST_PATH_IMAGE002
模乘运算模块;
当计算过程中遇到阶
Figure 226613DEST_PATH_IMAGE003
模乘计算过程时,选择阶
Figure 621823DEST_PATH_IMAGE003
模乘运算模块;
当计算过程中遇到模逆计算过程时,选择模逆运算模块。
应理解地,所述数字签名算法,用于对用户的原始数据进行签名,得到对应的数字签名结果;所述数字签名算法用于数字签名和验证,满足多种密码应用中的身份认证和数据完整性、真实性的安全需求;
所述密钥交换协议,用于满足通信双方经过两次或可选三次信息传递过程,计算获取一个由双方共同决定的共享秘密密钥(会话密钥)。
所述公钥加密算法,用于消息加解密,消息发送者可以利用接收者的公钥对消息进行加密,接收者用对应的私钥进行解密,获取消息。
进一步地,所述数字签名算法,具体过程包括:
第1步:置
Figure 967353DEST_PATH_IMAGE005
第2步:计算
Figure 789816DEST_PATH_IMAGE006
第3步:产生随机数
Figure 56849DEST_PATH_IMAGE007
第4步:计算椭圆曲线点
Figure 786908DEST_PATH_IMAGE008
第5步:计算
Figure 455786DEST_PATH_IMAGE009
;判断
Figure 449150DEST_PATH_IMAGE010
Figure 734638DEST_PATH_IMAGE011
;是否成立,如果是就返回第3步;如果否,就进入第6步;
第6步:计算
Figure 471650DEST_PATH_IMAGE012
判断
Figure 995035DEST_PATH_IMAGE013
是否成立,如果是就返回第3步;如果否就进入第7步;
第7步:确定数字签名
Figure 956038DEST_PATH_IMAGE014
;输出消息M及其数字签名
Figure 197663DEST_PATH_IMAGE014
进一步地,所述当计算过程中遇到模加计算过程时,选择模加运算模块;具体包括:
S102a1:输入素数
Figure 472787DEST_PATH_IMAGE002
,整数
Figure 148881DEST_PATH_IMAGE015
Figure 484048DEST_PATH_IMAGE016
Figure 212969DEST_PATH_IMAGE017
S102a2:对待执行加法运算的加数
Figure 822942DEST_PATH_IMAGE018
执行加法运算,
Figure 320919DEST_PATH_IMAGE019
表示加数的数量;加法运算结果用
Figure 92566DEST_PATH_IMAGE020
进制表示,
Figure 574363DEST_PATH_IMAGE021
对应表示
Figure 456869DEST_PATH_IMAGE022
的系数:
Figure 340511DEST_PATH_IMAGE023
S102a3:令
Figure 283059DEST_PATH_IMAGE024
S102a4:计算
Figure 720994DEST_PATH_IMAGE025
S102a5:判断是否有溢出,如果有进位溢出则
Figure 672769DEST_PATH_IMAGE026
;如果没有溢出,则
Figure 145339DEST_PATH_IMAGE027
保持不变;
S102a6:判断
Figure 258788DEST_PATH_IMAGE028
是否成立,如果成立,则
Figure 715178DEST_PATH_IMAGE029
;如果不成立,则
Figure 939486DEST_PATH_IMAGE030
保持不变;
S102a7:输出
Figure 982DEST_PATH_IMAGE030
进一步地,所述当计算过程中遇到模减计算过程时,选择模减运算模块;具体包括:
S102b1:输入素数
Figure 816492DEST_PATH_IMAGE031
,整数
Figure 229019DEST_PATH_IMAGE032
Figure 257017DEST_PATH_IMAGE033
S102b2:对待执行减法运算的被减数
Figure 969758DEST_PATH_IMAGE034
和减数,
Figure 159431DEST_PATH_IMAGE035
执行减法运算,减法运算结果用
Figure 59254DEST_PATH_IMAGE036
进制表示,
Figure 655058DEST_PATH_IMAGE037
对应表示
Figure 956727DEST_PATH_IMAGE038
的系数:
Figure 317301DEST_PATH_IMAGE039
S102b3:令:
Figure 235578DEST_PATH_IMAGE040
S102b4:计算
Figure 605380DEST_PATH_IMAGE041
;S102b5:判断是否有借位溢出,如果有借位溢出,则
Figure 495975DEST_PATH_IMAGE042
;如果没有借位溢出,则保持
Figure 824189DEST_PATH_IMAGE043
的值不变;
S102b6:判断
Figure 433024DEST_PATH_IMAGE044
是否成立,如果成立,则
Figure 137675DEST_PATH_IMAGE045
;如果不成立,则保持
Figure 148357DEST_PATH_IMAGE046
的值不变;
S102b7:输出
Figure 116313DEST_PATH_IMAGE046
进一步地,所述当计算过程中遇到素域
Figure 743603DEST_PATH_IMAGE002
模乘计算过程时,选择素域
Figure 455207DEST_PATH_IMAGE002
模乘运算模块;具体包括:
S102c1:输入素数
Figure 320395DEST_PATH_IMAGE002
,整数
Figure 990411DEST_PATH_IMAGE047
,其中,
Figure 573839DEST_PATH_IMAGE048
S102c2:计算:
Figure 823555DEST_PATH_IMAGE049
S102c3:计算高256位的归约值
Figure 339987DEST_PATH_IMAGE050
S102c4计算:
Figure 649745DEST_PATH_IMAGE051
S102c5:对
Figure 720469DEST_PATH_IMAGE052
溢出值
Figure 305034DEST_PATH_IMAGE053
进行归约;
S102c6:计算:
Figure 144814DEST_PATH_IMAGE054
S102c7:输出
Figure 625474DEST_PATH_IMAGE055
进一步地,所述S102c3:计算高256位的归约值
Figure 950539DEST_PATH_IMAGE056
;具体包括:
S102c31:输入:
Figure 807636DEST_PATH_IMAGE057
Figure 501923DEST_PATH_IMAGE058
表示在
Figure 684642DEST_PATH_IMAGE059
进制下
Figure 729959DEST_PATH_IMAGE060
Figure 125168DEST_PATH_IMAGE061
乘法结果的高8位;
S102c32:
Figure 205120DEST_PATH_IMAGE062
Figure 293161DEST_PATH_IMAGE063
Figure 560195DEST_PATH_IMAGE064
Figure 290253DEST_PATH_IMAGE065
Figure 693553DEST_PATH_IMAGE066
Figure 952496DEST_PATH_IMAGE067
Figure 237984DEST_PATH_IMAGE068
Figure 974995DEST_PATH_IMAGE069
Figure 498381DEST_PATH_IMAGE070
Figure 459383DEST_PATH_IMAGE071
均为中间参数;中间参数用于保存对应加法的结果;
S102c33:
Figure 435430DEST_PATH_IMAGE072
S102c34:
Figure 976132DEST_PATH_IMAGE073
S102c35:
Figure 150762DEST_PATH_IMAGE074
S102c36:
Figure 485928DEST_PATH_IMAGE075
S102c37:
Figure 214850DEST_PATH_IMAGE076
S102c38:
Figure 824823DEST_PATH_IMAGE077
其中,
Figure 322800DEST_PATH_IMAGE078
表示乘法运算结果的高8位归约完之后的
Figure 828868DEST_PATH_IMAGE079
进制对应的系数。
进一步地,所述当计算过程中遇到阶
Figure 86498DEST_PATH_IMAGE080
模乘计算过程时,选择阶
Figure 969003DEST_PATH_IMAGE081
模乘运算模块;具体包括:
S102d1:输入素数
Figure 321487DEST_PATH_IMAGE080
,整数
Figure 795194DEST_PATH_IMAGE082
预计算值
Figure 233128DEST_PATH_IMAGE083
;素数N表示SM2曲线素数P对应的阶;
Figure 184904DEST_PATH_IMAGE084
表示
Figure 657474DEST_PATH_IMAGE085
进制下N的相反数;
S102d2:计算:
Figure 505344DEST_PATH_IMAGE086
Figure 961733DEST_PATH_IMAGE087
表示
Figure 186041DEST_PATH_IMAGE088
进制下
Figure 513117DEST_PATH_IMAGE089
的结果的对应系数;
S102d3:
Figure 328626DEST_PATH_IMAGE090
Figure 741153DEST_PATH_IMAGE091
表示
Figure 503573DEST_PATH_IMAGE092
的结果在
Figure 216314DEST_PATH_IMAGE093
进制下的高8位;
S102d4:
Figure 671566DEST_PATH_IMAGE094
初始值为7,按照
Figure 571389DEST_PATH_IMAGE095
Figure 668658DEST_PATH_IMAGE096
Figure 704747DEST_PATH_IMAGE097
Figure 330900DEST_PATH_IMAGE098
Figure 249178DEST_PATH_IMAGE099
Figure 353400DEST_PATH_IMAGE100
Figure 509575DEST_PATH_IMAGE101
Figure 339253DEST_PATH_IMAGE102
的顺序,对
Figure 948089DEST_PATH_IMAGE095
Figure 121581DEST_PATH_IMAGE096
Figure 663421DEST_PATH_IMAGE097
Figure 631377DEST_PATH_IMAGE098
Figure 727509DEST_PATH_IMAGE099
Figure 704692DEST_PATH_IMAGE100
Figure 835459DEST_PATH_IMAGE103
Figure 974316DEST_PATH_IMAGE102
中的每一个都执行S102d41,全部执行完毕后,输出
Figure 88903DEST_PATH_IMAGE104
S102d41:
Figure 338619DEST_PATH_IMAGE105
Figure 855051DEST_PATH_IMAGE106
Figure 164809DEST_PATH_IMAGE107
进一步地,所述当计算过程中遇到模逆计算过程时,选择模逆运算模块;具体包括:
S102e1:输入素数
Figure 235534DEST_PATH_IMAGE108
,整数
Figure 820099DEST_PATH_IMAGE109
Figure 659879DEST_PATH_IMAGE110
S102e2:计算
Figure 140539DEST_PATH_IMAGE111
S102e3:赋初始值:
Figure 964138DEST_PATH_IMAGE112
S102e4:判断
Figure 821236DEST_PATH_IMAGE113
是否成立,如果成立,则进入S102e41;如果不成立,则进入S102e5;
S102e41:判断
Figure 515522DEST_PATH_IMAGE114
是否是偶数,当
Figure 698242DEST_PATH_IMAGE114
是偶数,则执行
Figure 743558DEST_PATH_IMAGE115
Figure 138767DEST_PATH_IMAGE116
Figure 717254DEST_PATH_IMAGE117
;执行完毕后,再次判断
Figure 805296DEST_PATH_IMAGE114
是否是偶数,如果
Figure 603488DEST_PATH_IMAGE114
依旧是偶数,则再次执行
Figure 536808DEST_PATH_IMAGE118
Figure 205687DEST_PATH_IMAGE119
Figure 995789DEST_PATH_IMAGE120
;重复上述过程直至
Figure 484539DEST_PATH_IMAGE114
不是偶数;如果
Figure 487130DEST_PATH_IMAGE114
不是偶数,就进入S102e42;
S102e42:判断
Figure 541674DEST_PATH_IMAGE121
是否是偶数,当
Figure 705939DEST_PATH_IMAGE121
是偶数,则执行
Figure 947564DEST_PATH_IMAGE122
Figure 19425DEST_PATH_IMAGE123
Figure 397317DEST_PATH_IMAGE124
;执行完毕后,再次判断
Figure 998063DEST_PATH_IMAGE121
是否是偶数,如果
Figure 992564DEST_PATH_IMAGE121
依旧是偶数,则再次执行
Figure 336957DEST_PATH_IMAGE122
Figure 834935DEST_PATH_IMAGE123
Figure 872161DEST_PATH_IMAGE124
;重复上述过程直至
Figure 88378DEST_PATH_IMAGE125
不是偶数;如果
Figure 970884DEST_PATH_IMAGE125
不是偶数,就进入S102e43;
S102e43:判断
Figure 854526DEST_PATH_IMAGE126
是否成立,如果成立,则执行
Figure 531495DEST_PATH_IMAGE127
Figure 969430DEST_PATH_IMAGE128
Figure 688249DEST_PATH_IMAGE129
Figure 895240DEST_PATH_IMAGE130
如果
Figure 8689DEST_PATH_IMAGE131
不成立,则执行
Figure 465078DEST_PATH_IMAGE132
Figure 689386DEST_PATH_IMAGE133
Figure 16463DEST_PATH_IMAGE134
Figure 831972DEST_PATH_IMAGE135
返回S102e4;
S102e5:如果
Figure 978919DEST_PATH_IMAGE136
,则
Figure 6918DEST_PATH_IMAGE137
S102e6:计算
Figure 719659DEST_PATH_IMAGE138
Figure 174911DEST_PATH_IMAGE139
Figure 74734DEST_PATH_IMAGE140
S102e7:输出
Figure 172003DEST_PATH_IMAGE141
SM2曲线定义在素域
Figure 208092DEST_PATH_IMAGE142
上,其中素数的定义为:
Figure 365404DEST_PATH_IMAGE143
该素数具有稀疏性质,本发明针对这一稀疏性质提出了基于模
Figure 486944DEST_PATH_IMAGE144
新的归约算法,目的是更加高效的进行模运算。该算法的核心是利用17次64比特加法完成乘法后高256位数据的归约计算。
基于素域的SM2算法所涉及的大数运算长度为256比特,其中包括模加、模减、模乘运算。所有数据定义为数组,数组长度与CPU的工作环境相关,假设CPU工作的环境为
Figure 856745DEST_PATH_IMAGE145
比特,
Figure 544079DEST_PATH_IMAGE145
一般为32或者64,那么数组长度为
Figure 341133DEST_PATH_IMAGE146
。大数
Figure 949969DEST_PATH_IMAGE147
可以表示为
Figure 389041DEST_PATH_IMAGE145
比特的
Figure 399722DEST_PATH_IMAGE148
维数组:
Figure 367678DEST_PATH_IMAGE149
,这里每个
Figure 493504DEST_PATH_IMAGE150
都是
Figure 205108DEST_PATH_IMAGE151
比特字,
Figure 335875DEST_PATH_IMAGE152
的值一般为8或者4。
数学上这个表示对应于整数
Figure 5891DEST_PATH_IMAGE153
Figure 323740DEST_PATH_IMAGE154
进制表示:
Figure 839035DEST_PATH_IMAGE155
在本发明中,无特殊强调则
Figure 355467DEST_PATH_IMAGE156
值为32,
Figure 665225DEST_PATH_IMAGE157
的值为8。
对于
Figure 470370DEST_PATH_IMAGE158
,分别表示为
Figure 54935DEST_PATH_IMAGE159
进制形式,则
Figure 894715DEST_PATH_IMAGE160
Figure 375375DEST_PATH_IMAGE161
进制表示为:
Figure 464554DEST_PATH_IMAGE162
Figure 56072DEST_PATH_IMAGE163
,这里的
Figure 15938DEST_PATH_IMAGE164
表示低
Figure 198658DEST_PATH_IMAGE165
位向高
Figure 978395DEST_PATH_IMAGE165
位的进位值,且
Figure 373604DEST_PATH_IMAGE166
。模加的一般方法为在大数加法的基础上,判断是否有溢出(即
Figure 719135DEST_PATH_IMAGE167
是否为0),如果有溢出则进行减
Figure 541597DEST_PATH_IMAGE168
操作。本发明我们以加
Figure 808631DEST_PATH_IMAGE169
操作代替减
Figure 538689DEST_PATH_IMAGE168
操作,这是因为在SM2算法中
Figure 207568DEST_PATH_IMAGE170
的值为
Figure 233555DEST_PATH_IMAGE171
,从而在多个数的连续相加中,可以先进行多次加法,再利用一次模运算完成归约计算,如算法1所示:
算法1:模加算法;
输入:素数
Figure 987884DEST_PATH_IMAGE172
,整数
Figure 990475DEST_PATH_IMAGE173
Figure 45019DEST_PATH_IMAGE174
输出:
Figure 209284DEST_PATH_IMAGE175
1.
Figure 450910DEST_PATH_IMAGE176
2.令
Figure 522771DEST_PATH_IMAGE177
计算
Figure 900663DEST_PATH_IMAGE178
Figure 501408DEST_PATH_IMAGE179
为预计算值;
3.如果有进位溢出则
Figure 495909DEST_PATH_IMAGE180
4.如果
Figure 840303DEST_PATH_IMAGE181
,则
Figure 72701DEST_PATH_IMAGE182
5. 输出
Figure 375506DEST_PATH_IMAGE183
说明:
1.在SM2中,根据
Figure 326145DEST_PATH_IMAGE184
的值,第2步的乘法可以用对
Figure 208650DEST_PATH_IMAGE185
的移位及加减法完成,并不需要乘法操作;即:
Figure 92292DEST_PATH_IMAGE186
显然加法的次数限定在
Figure 34841DEST_PATH_IMAGE187
,则有
Figure 472775DEST_PATH_IMAGE188
,第2步的乘法
Figure 690130DEST_PATH_IMAGE189
的结果小于
Figure 897120DEST_PATH_IMAGE190
2.多个值相加的归约算法可以用于椭圆曲线点加和倍点的运算中,并有效减小计算复杂度,例如
Figure 10570DEST_PATH_IMAGE191
坐标下点
Figure 466959DEST_PATH_IMAGE192
的倍点运算中第1步
Figure 691267DEST_PATH_IMAGE193
;该算法也是后面模乘运算的重要组成部分。
模减算法与模加算法类似,执行减法时需要判断是否借位,并进行加
Figure 18343DEST_PATH_IMAGE194
操作,令:
Figure 66808DEST_PATH_IMAGE195
Figure 479335DEST_PATH_IMAGE196
这里的
Figure 507334DEST_PATH_IMAGE197
表示低
Figure 220075DEST_PATH_IMAGE198
位向高
Figure 675327DEST_PATH_IMAGE198
位的借位值,且有
Figure 309571DEST_PATH_IMAGE199
。与模加类似在进行多个值的模减时,可以先进行多次减法,再利用一次模运算完成归约计算,如算法2所示:
算法2:模减算法;
输入:素数
Figure 406840DEST_PATH_IMAGE172
,整数
Figure 708508DEST_PATH_IMAGE173
Figure 334662DEST_PATH_IMAGE174
输出:
Figure 987360DEST_PATH_IMAGE175
1.
Figure 357161DEST_PATH_IMAGE200
2.令
Figure 44495DEST_PATH_IMAGE201
计算
Figure 841549DEST_PATH_IMAGE202
3.如果有借位溢出则
Figure 450385DEST_PATH_IMAGE203
4.如果
Figure 889457DEST_PATH_IMAGE204
,则
Figure 900138DEST_PATH_IMAGE205
5.输出
Figure 868094DEST_PATH_IMAGE206
注:多个值的模减运算对于减小椭圆曲线点加及倍点运算的复杂度有重要作用,例如点加运算中计算输出点的
Figure 495385DEST_PATH_IMAGE207
坐标时,就有连续对3个值的减法操作。
对于
Figure 206989DEST_PATH_IMAGE208
Figure 72176DEST_PATH_IMAGE209
Figure 742192DEST_PATH_IMAGE210
乘法(平方)算法是计算
Figure 325620DEST_PATH_IMAGE211
Figure 840915DEST_PATH_IMAGE212
进制结果。在乘法(平方)运算中,计算结果的比特长度是
Figure 593233DEST_PATH_IMAGE213
的长度的两倍,因此需要归约算法来计算
Figure 902991DEST_PATH_IMAGE214
。本发明通过研究SM2曲线域的稀疏性,提出了新的模
Figure 973716DEST_PATH_IMAGE215
的归约算法,这也是本发明的核心算法。
在SM2的设计中;
素数
Figure 558281DEST_PATH_IMAGE216
式中2的指数的最大公约数为32,所以选择
Figure 398061DEST_PATH_IMAGE217
来表示256比特数。即元素
Figure 409879DEST_PATH_IMAGE218
,其32进制表示为:
Figure 967899DEST_PATH_IMAGE219
对于域中元素
Figure 559418DEST_PATH_IMAGE220
,计算
Figure 784863DEST_PATH_IMAGE221
,需要首先计算出
Figure 702003DEST_PATH_IMAGE222
的512比特表达式:
Figure 481740DEST_PATH_IMAGE223
Figure 408108DEST_PATH_IMAGE224
,考虑
Figure 222480DEST_PATH_IMAGE225
根据素域
Figure 44943DEST_PATH_IMAGE226
的表达式有:
Figure 843134DEST_PATH_IMAGE227
结合上述公式,可以得到约减算法:
Figure 42035DEST_PATH_IMAGE228
Figure 710913DEST_PATH_IMAGE229
的次数降到7,这里的
Figure 235436DEST_PATH_IMAGE230
的值为:
Figure 989765DEST_PATH_IMAGE231
基于以上公式,本发明提出了新颖的高256位归约算法,核心是利用17次加法完成
Figure 726777DEST_PATH_IMAGE232
的计算,如算法3所示:
算法3:高256位归约算法(模
Figure 781321DEST_PATH_IMAGE233
);
输入:
Figure 211165DEST_PATH_IMAGE234
Figure 452790DEST_PATH_IMAGE235
Figure 769326DEST_PATH_IMAGE236
Figure 412797DEST_PATH_IMAGE237
Figure 747964DEST_PATH_IMAGE238
Figure 8044DEST_PATH_IMAGE239
Figure 86858DEST_PATH_IMAGE240
Figure 584835DEST_PATH_IMAGE241
输出:
Figure 887641DEST_PATH_IMAGE242
Figure 838279DEST_PATH_IMAGE243
Figure 251943DEST_PATH_IMAGE244
Figure 604427DEST_PATH_IMAGE245
Figure 546975DEST_PATH_IMAGE246
Figure 516068DEST_PATH_IMAGE247
Figure 936685DEST_PATH_IMAGE248
Figure 409255DEST_PATH_IMAGE249
1.
Figure 53863DEST_PATH_IMAGE250
Figure 979094DEST_PATH_IMAGE251
Figure 203402DEST_PATH_IMAGE252
Figure 796057DEST_PATH_IMAGE253
Figure 80408DEST_PATH_IMAGE254
2.
Figure 492935DEST_PATH_IMAGE255
Figure 52092DEST_PATH_IMAGE256
Figure 233674DEST_PATH_IMAGE257
3.
Figure 423347DEST_PATH_IMAGE258
Figure 355794DEST_PATH_IMAGE259
4.
Figure 921904DEST_PATH_IMAGE260
Figure 223572DEST_PATH_IMAGE261
5.
Figure 115305DEST_PATH_IMAGE262
Figure 502424DEST_PATH_IMAGE263
6.
Figure 872226DEST_PATH_IMAGE264
Figure 293980DEST_PATH_IMAGE265
7.
Figure 91034DEST_PATH_IMAGE266
附图1详细描述了该归约过程。基于以上算法,我们可以给出模乘运算,如算法4所示:
算法4:模乘运算(模
Figure 699870DEST_PATH_IMAGE267
);
输入:素数
Figure 404521DEST_PATH_IMAGE268
,整数
Figure 415202DEST_PATH_IMAGE269
输出:
Figure 383158DEST_PATH_IMAGE270
1.计算:
Figure 10449DEST_PATH_IMAGE271
2. 调用算法3计算高256位的归约值
Figure 722053DEST_PATH_IMAGE272
3. 计算:
Figure 587241DEST_PATH_IMAGE273
4. 调用算法1对
Figure 257256DEST_PATH_IMAGE274
溢出值
Figure 840684DEST_PATH_IMAGE275
进行归约;
5. 计算:
Figure 90400DEST_PATH_IMAGE276
注:这里第3步的运算利用移位相加(减)的操作方式进行计算。
在SM2算法中,点群
Figure 606832DEST_PATH_IMAGE277
的阶
Figure 916591DEST_PATH_IMAGE278
为素数:
Figure 518473DEST_PATH_IMAGE279
在SM2协议中,需要多次调用模
Figure 571880DEST_PATH_IMAGE280
的乘法运算,由于
Figure 411660DEST_PATH_IMAGE280
的值与
Figure 922014DEST_PATH_IMAGE281
不同,不能直接调用算法4,当前在开源库中一般都是调用大数运算库。
Hasse定理表明
Figure 214455DEST_PATH_IMAGE282
,但我们可以计算更精确的关系
Figure 71552DEST_PATH_IMAGE283
,我们进一步观察到
Figure 296997DEST_PATH_IMAGE284
的值为:
Figure 948558DEST_PATH_IMAGE285
其中最高32比特的值为1,因此我们可以利用算法1的思想给出模
Figure 993875DEST_PATH_IMAGE286
的快速实现方法,如算法5所示:
算法5:模乘运算(模
Figure 920243DEST_PATH_IMAGE287
);
输入:素数
Figure 469036DEST_PATH_IMAGE288
,整数
Figure 557077DEST_PATH_IMAGE289
,预计算值
Figure 355269DEST_PATH_IMAGE290
输出:
Figure 554169DEST_PATH_IMAGE291
1.计算:
Figure 957469DEST_PATH_IMAGE292
2.
Figure 747570DEST_PATH_IMAGE293
3.
Figure 501900DEST_PATH_IMAGE294
3.1
Figure 238911DEST_PATH_IMAGE295
3.2
Figure 293455DEST_PATH_IMAGE296
3.3
Figure 723299DEST_PATH_IMAGE297
Figure 699346DEST_PATH_IMAGE298
4.输出
Figure 771207DEST_PATH_IMAGE299
说明:
1.第2步为初始化
Figure 414678DEST_PATH_IMAGE300
的值,即取乘法结果的高256位值。
2.第3.1步对
Figure 749844DEST_PATH_IMAGE300
的乘法即将256比特值
Figure 9924DEST_PATH_IMAGE300
左移32比特,高32位赋值为
Figure 88739DEST_PATH_IMAGE301
,最低的32位用
Figure 586716DEST_PATH_IMAGE302
的低256位相应值
Figure 125407DEST_PATH_IMAGE303
填充。
3.第3.2步乘法计算中只需要计算
Figure 341625DEST_PATH_IMAGE304
Figure 224130DEST_PATH_IMAGE305
的低128位乘法,
Figure 107773DEST_PATH_IMAGE304
Figure 50321DEST_PATH_IMAGE305
的高128位乘法为1次移位运算;
Figure 488255DEST_PATH_IMAGE306
由于
Figure 440031DEST_PATH_IMAGE304
的值为32比特,因此乘法结果为256比特,不会产生溢出,附图2详细描述了该计算过程。
模逆运算一般使用扩展欧几里得算法或者费马定理,但由于本发明已经实现了高效的模乘算法,因此结合“部分蒙哥马利求逆算法”(Partial Montgomery inversion),我们实现了更加高效的模逆运算,如算法6所示:
算法6:基于蒙哥马利方法的模逆运算;
输入:素数
Figure 912600DEST_PATH_IMAGE307
,整数
Figure 760471DEST_PATH_IMAGE308
输出:
Figure 216860DEST_PATH_IMAGE309
1.计算
Figure 441168DEST_PATH_IMAGE310
2.
Figure 768244DEST_PATH_IMAGE311
3. While
Figure 583753DEST_PATH_IMAGE312
do
3.1 While
Figure 996280DEST_PATH_IMAGE313
is even,do
Figure 758700DEST_PATH_IMAGE314
3.2 While
Figure 471441DEST_PATH_IMAGE315
is even,do
Figure 926693DEST_PATH_IMAGE316
3.3 If
Figure 357674DEST_PATH_IMAGE317
,then
Figure 923785DEST_PATH_IMAGE318
else
Figure 959874DEST_PATH_IMAGE319
4.If
Figure 117186DEST_PATH_IMAGE320
//2-4步为Partial Montgomery 算法,此时:
Figure 504305DEST_PATH_IMAGE321
,且
Figure 608527DEST_PATH_IMAGE322
5.计算:
Figure 794395DEST_PATH_IMAGE323
6.输出
Figure 591450DEST_PATH_IMAGE324
说明:
1.相比标准二元求逆法,部分蒙哥马利算法中,3.3步中计算
Figure 200286DEST_PATH_IMAGE325
Figure 904937DEST_PATH_IMAGE326
的值,由减法更换为加法,且在计算中不需要模
Figure 915618DEST_PATH_IMAGE327
操作,因此实现速度较快,但是在计算结果中多出了
Figure 883574DEST_PATH_IMAGE328
一项。
2.第4步结束时:
Figure 510865DEST_PATH_IMAGE329
因此需要第5步消去
Figure 753627DEST_PATH_IMAGE330
项。
3.第1步和第5步的模乘计算,可在移位后调用算法4中的第2-5步进行归约计算,复杂度与整体算法相比可以忽略。但如果没有高效的模乘运算,则该算法并不适用。
4.通过编程测试,与标准的二元求逆法相比,该算法复杂度减少约
Figure 618815DEST_PATH_IMAGE331
以上(包括模
Figure 757672DEST_PATH_IMAGE327
与模
Figure 341100DEST_PATH_IMAGE332
)。
模加、模减、模乘、模逆构成椭圆曲线运算的基础,在SM2的点的基本运算中,我们调用以上基础模运算模块,按照SM2椭圆曲线算法标准完成点加与倍点运算。为了与各开源算法库进行同等条件下的比较,按照当前各开源库通用的椭圆曲线标量乘法实现方法,在点乘运算中,对于基点的标量乘法按照窗口为7的预计算点值的方法进行实现;对于非固定点的标量乘法按照窗口为5的
Figure 590816DEST_PATH_IMAGE333
方法进行实现。
SM2协议实现按照SM2标准算法实现。由于本发明只针对SM2基础模运算,椭圆曲线点的运算及SM2协议实现不属于本发明的内容,因此不再赘述。
基于模归约方法的SM2实现方法对SM2的实现效率进行了有效提升,我们以Golang语言,结合汇编算法进行验证。
验证条件:以签名验签速度为参照,基点标量乘法预计算点值窗口为7(即预计算37*64个点值),非固定点标量乘法
Figure 107248DEST_PATH_IMAGE334
方法下窗口为5,无公钥的预计算点值,测试环境为IntelCore i5-10210U CPU,1.60GHz,Ubuntu单线程运行。
验证结果:通过测试当前开源代码库,各主要编程语言下SM2签名最快的运算速度为每秒5万次,验签速度为每秒1.3万次。
我们在新的方法下签名运算速度大于每秒12万次,速度增加
Figure 417007DEST_PATH_IMAGE335
以上;验签速度大于每秒1.8万次,速度增加
Figure 487731DEST_PATH_IMAGE336
以上。
实施例二
本实施例提供了基于模归约的国密算法SM2的快速实现系统;
基于模归约的国密算法SM2的快速实现系统,包括:
获取模块,其被配置为:获取待运算的国密算法SM2;所述待运算的国密算法SM2,包括:数字签名算法;所述数字签名算法,用于对用户的原始数据进行签名,得到对应的数字签名结果;
快速运算模块,其被配置为:根据待运算国密算法SM2当前的计算过程,选择对应的运算模块,实现国密算法SM2的快速运算;
当计算过程中遇到模加计算过程时,选择模加运算模块;
当计算过程中遇到模减计算过程时,选择模减运算模块;
当计算过程中遇到素域
Figure 72296DEST_PATH_IMAGE337
模乘计算过程时,选择素域
Figure 912076DEST_PATH_IMAGE338
模乘运算模块;
当计算过程中遇到阶
Figure 923894DEST_PATH_IMAGE339
模乘计算过程时,选择阶
Figure 216335DEST_PATH_IMAGE340
模乘运算模块;
当计算过程中遇到模逆计算过程时,选择模逆运算模块。
此处需要说明的是,上述获取模块和快速运算模块对应于实施例一中的步骤S101至S102,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。
需要说明的是,上述模块作为系统的一部分可以在诸如一组计算机可执行指令的计算机系统中执行。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (8)

1.基于模归约的国密算法SM2的快速实现方法,其特征是,包括:
获取待运算的国密算法SM2;所述待运算的国密算法SM2,包括:数字签名算法;所述数字签名算法,用于对用户的原始数据进行签名,得到对应的数字签名结果;
根据待运算国密算法SM2当前的计算过程,选择对应的运算模块,实现国密算法SM2的快速运算;
当计算过程中遇到模加计算过程时,选择模加运算模块;
当计算过程中遇到模减计算过程时,选择模减运算模块;
当计算过程中遇到素域
Figure 217678DEST_PATH_IMAGE001
模乘计算过程时,选择素域
Figure 648659DEST_PATH_IMAGE002
模乘运算模块;
当计算过程中遇到阶
Figure 214770DEST_PATH_IMAGE003
模乘计算过程时,选择阶
Figure 250859DEST_PATH_IMAGE003
模乘运算模块;
当计算过程中遇到模逆计算过程时,选择模逆运算模块。
2.如权利要求1所述的基于模归约的国密算法SM2的快速实现方法,其特征是,所述当计算过程中遇到模加计算过程时,选择模加运算模块;具体包括:
a1:输入素数
Figure 408171DEST_PATH_IMAGE004
,整数
Figure 795290DEST_PATH_IMAGE005
Figure 899512DEST_PATH_IMAGE006
Figure 586845DEST_PATH_IMAGE007
a2:对待执行加法运算的加数
Figure 383900DEST_PATH_IMAGE008
执行加法运算,
Figure 523894DEST_PATH_IMAGE009
表示加数的数量;加法运算结果用
Figure 697387DEST_PATH_IMAGE010
进制表示;
Figure 708068DEST_PATH_IMAGE011
对应表示
Figure 207183DEST_PATH_IMAGE012
的系数:
Figure 303315DEST_PATH_IMAGE013
a3:令:
Figure 749339DEST_PATH_IMAGE014
a4:计算
Figure 411265DEST_PATH_IMAGE015
a5:判断是否有溢出,如果有进位溢出则
Figure 550122DEST_PATH_IMAGE016
;如果没有溢出,则
Figure 133550DEST_PATH_IMAGE017
保持不变;
a6:判断
Figure 914424DEST_PATH_IMAGE018
是否成立,如果成立,则
Figure 899698DEST_PATH_IMAGE019
;如果不成立,则
Figure 209457DEST_PATH_IMAGE017
保持不变;
a7:输出
Figure 309874DEST_PATH_IMAGE017
3.如权利要求1所述的基于模归约的国密算法SM2的快速实现方法,其特征是,所述当计算过程中遇到模减计算过程时,选择模减运算模块;具体包括:
b1:输入素数
Figure 363281DEST_PATH_IMAGE020
,整数
Figure 203061DEST_PATH_IMAGE021
Figure 214879DEST_PATH_IMAGE022
b2:对待执行减法运算的被减数
Figure 507320DEST_PATH_IMAGE023
和减数
Figure 895576DEST_PATH_IMAGE024
执行减法运算,减法运算结果用
Figure 589863DEST_PATH_IMAGE025
进制表示,
Figure 241424DEST_PATH_IMAGE026
对应表示
Figure 817899DEST_PATH_IMAGE027
的系数:
Figure 213108DEST_PATH_IMAGE028
b3:令:
Figure 761901DEST_PATH_IMAGE029
b4:计算:
Figure 381101DEST_PATH_IMAGE030
b5:判断是否有借位溢出,如果有借位溢出,则
Figure 648135DEST_PATH_IMAGE031
;如果没有借位溢出,则保持
Figure 581456DEST_PATH_IMAGE032
的值不变;
b6:判断
Figure 781493DEST_PATH_IMAGE033
是否成立,如果成立,则
Figure 40436DEST_PATH_IMAGE034
;如果不成立,则保持
Figure 529186DEST_PATH_IMAGE032
的值不变;
b7:输出
Figure 62936DEST_PATH_IMAGE032
4.如权利要求1所述的基于模归约的国密算法SM2的快速实现方法,其特征是,当计算过程中遇到素域
Figure 586321DEST_PATH_IMAGE035
模乘计算过程时,选择素域
Figure 750586DEST_PATH_IMAGE035
模乘运算模块;具体包括:
c1:输入素数
Figure 523370DEST_PATH_IMAGE035
,整数
Figure 64073DEST_PATH_IMAGE036
,其中,
Figure 441964DEST_PATH_IMAGE037
c2:计算:
Figure 75333DEST_PATH_IMAGE038
c3:计算高256位的归约值:
Figure 538676DEST_PATH_IMAGE039
c4:计算:
Figure 414228DEST_PATH_IMAGE040
c5:对
Figure 912205DEST_PATH_IMAGE041
溢出值
Figure 418273DEST_PATH_IMAGE042
进行归约;
c6:计算:
Figure 165649DEST_PATH_IMAGE043
c7:输出
Figure 48154DEST_PATH_IMAGE044
5.如权利要求4所述的基于模归约的国密算法SM2的快速实现方法,其特征是,计算高256位的归约值
Figure 400638DEST_PATH_IMAGE045
;具体包括:
c31:输入
Figure 77607DEST_PATH_IMAGE046
Figure 46700DEST_PATH_IMAGE047
表示在
Figure 732897DEST_PATH_IMAGE048
进制下
Figure 471045DEST_PATH_IMAGE049
Figure 584495DEST_PATH_IMAGE050
乘法结果的高8位;
c32:
Figure 509726DEST_PATH_IMAGE051
Figure 265192DEST_PATH_IMAGE052
Figure 592268DEST_PATH_IMAGE053
Figure 876619DEST_PATH_IMAGE054
Figure 554725DEST_PATH_IMAGE055
Figure 582724DEST_PATH_IMAGE056
Figure 764306DEST_PATH_IMAGE057
Figure 750717DEST_PATH_IMAGE058
Figure 650540DEST_PATH_IMAGE059
Figure 216650DEST_PATH_IMAGE060
均为中间参数;中间参数用于保存对应加法的结果;
c33:
Figure 282433DEST_PATH_IMAGE061
c34:
Figure 908587DEST_PATH_IMAGE062
c35:
Figure 30126DEST_PATH_IMAGE063
c36:
Figure 931086DEST_PATH_IMAGE064
c37:
Figure 87261DEST_PATH_IMAGE065
c38:
Figure 884316DEST_PATH_IMAGE066
其中,
Figure 24310DEST_PATH_IMAGE067
表示乘法运算结果的高8位归约完之后的
Figure 932223DEST_PATH_IMAGE068
进制对应的系数。
6.如权利要求1所述的基于模归约的国密算法SM2的快速实现方法,其特征是,当计算过程中遇到阶
Figure 942905DEST_PATH_IMAGE069
模乘计算过程时,选择阶
Figure 442019DEST_PATH_IMAGE069
模乘运算模块;具体包括:
d1:输入素数
Figure 538151DEST_PATH_IMAGE069
,整数
Figure 249755DEST_PATH_IMAGE070
,预计算值
Figure 911681DEST_PATH_IMAGE071
;素数N表示SM2曲线素数P对应的阶;negN表示
Figure 50538DEST_PATH_IMAGE072
进制下N的相反数;
d2:计算:
Figure 368387DEST_PATH_IMAGE073
Figure 414840DEST_PATH_IMAGE074
表示
Figure 400114DEST_PATH_IMAGE075
进制下
Figure 241031DEST_PATH_IMAGE076
结果的对应系数;
d3:
Figure 46176DEST_PATH_IMAGE077
Figure 99582DEST_PATH_IMAGE078
表示
Figure 470521DEST_PATH_IMAGE076
的结果在
Figure 951181DEST_PATH_IMAGE075
进制下的高8位;
d4:i初始值为7,按照
Figure 509201DEST_PATH_IMAGE079
Figure 133343DEST_PATH_IMAGE080
Figure 93208DEST_PATH_IMAGE081
Figure 744770DEST_PATH_IMAGE082
Figure 55665DEST_PATH_IMAGE083
Figure 450875DEST_PATH_IMAGE084
Figure 265247DEST_PATH_IMAGE085
Figure 618868DEST_PATH_IMAGE086
的顺序;
Figure 885901DEST_PATH_IMAGE079
Figure 84801DEST_PATH_IMAGE080
Figure 284838DEST_PATH_IMAGE081
Figure 278202DEST_PATH_IMAGE082
Figure 32532DEST_PATH_IMAGE083
Figure 566281DEST_PATH_IMAGE084
Figure 89666DEST_PATH_IMAGE085
Figure 253931DEST_PATH_IMAGE086
中的每一个都执行d41,全部执行完毕后,输出
Figure 26715DEST_PATH_IMAGE087
d41:
Figure 567418DEST_PATH_IMAGE088
Figure 945310DEST_PATH_IMAGE089
Figure 77214DEST_PATH_IMAGE090
Figure 540556DEST_PATH_IMAGE091
7.如权利要求1所述的基于模归约的国密算法SM2的快速实现方法,其特征是,所述当计算过程中遇到模逆计算过程时,选择模逆运算模块;具体包括:
e1:输入素数
Figure 884950DEST_PATH_IMAGE092
,整数
Figure 648507DEST_PATH_IMAGE093
Figure 420153DEST_PATH_IMAGE094
e2:计算
Figure 370792DEST_PATH_IMAGE095
e3:赋初始值:
Figure 282991DEST_PATH_IMAGE096
e4:判断
Figure 635475DEST_PATH_IMAGE097
是否成立,如果成立,则进入e41;如果不成立,则进入e5;
e41:判断
Figure 578023DEST_PATH_IMAGE098
是否是偶数,当
Figure 547116DEST_PATH_IMAGE099
是偶数,则执行:
Figure 233312DEST_PATH_IMAGE100
执行完毕后,再次判断
Figure 971461DEST_PATH_IMAGE099
是否是偶数,如果
Figure 84911DEST_PATH_IMAGE099
依旧是偶数,则再次执行:
Figure 10141DEST_PATH_IMAGE101
重复上述过程直至
Figure 765608DEST_PATH_IMAGE099
不是偶数;如果
Figure 92684DEST_PATH_IMAGE099
不是偶数,就进入e42;
e42:判断
Figure 111456DEST_PATH_IMAGE102
是否是偶数,当
Figure 55141DEST_PATH_IMAGE102
是偶数,则执行:
Figure 83140DEST_PATH_IMAGE103
执行完毕后,再次判断
Figure 264722DEST_PATH_IMAGE102
是否是偶数,如果
Figure 251133DEST_PATH_IMAGE102
依旧是偶数,则再次执行:
Figure 885377DEST_PATH_IMAGE104
重复上述过程直至
Figure 451487DEST_PATH_IMAGE102
不是偶数;如果
Figure 284314DEST_PATH_IMAGE102
不是偶数,就进入e43;
e43:判断
Figure 910467DEST_PATH_IMAGE105
是否成立,如果成立,则执行:
Figure 32007DEST_PATH_IMAGE106
如果
Figure 932967DEST_PATH_IMAGE105
不成立,则执行:
Figure 89142DEST_PATH_IMAGE107
返回e4;
e5:如果
Figure 886196DEST_PATH_IMAGE108
,则
Figure 527656DEST_PATH_IMAGE109
e6:计算
Figure 435569DEST_PATH_IMAGE110
e7:输出
Figure 446250DEST_PATH_IMAGE111
8.基于模归约的国密算法SM2的快速实现系统,其特征是,包括:
获取模块,其被配置为:获取待运算的国密算法SM2;所述待运算的国密算法SM2,包括:数字签名算法;所述数字签名算法,用于对用户的原始数据进行签名,得到对应的数字签名结果;
快速运算模块,其被配置为:根据待运算国密算法SM2当前的计算过程,选择对应的运算模块,实现国密算法SM2的快速运算;
当计算过程中遇到模加计算过程时,选择模加运算模块;
当计算过程中遇到模减计算过程时,选择模减运算模块;
当计算过程中遇到素域
Figure 945365DEST_PATH_IMAGE112
模乘计算过程时,选择素域
Figure 41497DEST_PATH_IMAGE112
模乘运算模块;
当计算过程中遇到阶
Figure 753101DEST_PATH_IMAGE113
模乘计算过程时,选择阶
Figure 149447DEST_PATH_IMAGE113
模乘运算模块;
当计算过程中遇到模逆计算过程时,选择模逆运算模块。
CN202210243778.XA 2022-03-14 2022-03-14 基于模归约的国密算法sm2的快速实现方法及系统 Active CN114338049B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210243778.XA CN114338049B (zh) 2022-03-14 2022-03-14 基于模归约的国密算法sm2的快速实现方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210243778.XA CN114338049B (zh) 2022-03-14 2022-03-14 基于模归约的国密算法sm2的快速实现方法及系统

Publications (2)

Publication Number Publication Date
CN114338049A true CN114338049A (zh) 2022-04-12
CN114338049B CN114338049B (zh) 2022-07-05

Family

ID=81033124

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210243778.XA Active CN114338049B (zh) 2022-03-14 2022-03-14 基于模归约的国密算法sm2的快速实现方法及系统

Country Status (1)

Country Link
CN (1) CN114338049B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117896067A (zh) * 2024-03-13 2024-04-16 杭州金智塔科技有限公司 适用于国密sm2算法的并行模约减方法及装置

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120069994A1 (en) * 2010-09-16 2012-03-22 Stmicroelectronics S.R.L. Method for genertaing a digital signature
US20160191252A1 (en) * 2013-08-16 2016-06-30 China Iwncomm Co., Ltd. Method and device for generating digital signature
CN106549769A (zh) * 2016-12-08 2017-03-29 广东工业大学 一种素域Fp下SM2椭圆曲线签名系统
CN109145616A (zh) * 2018-08-01 2019-01-04 上海交通大学 基于高效模乘的sm2加密、签名和密钥交换的实现方法及系统
CN109660351A (zh) * 2018-11-08 2019-04-19 北京大学 一种sm2公钥密码的数字签名快速生成方法
CN109933304A (zh) * 2019-03-20 2019-06-25 四川卫士通信息安全平台技术有限公司 适用于国密sm2p256v1算法的快速蒙哥马利模乘器运算优化方法
CN112118103A (zh) * 2019-06-20 2020-12-22 佛山芯珠微电子有限公司 一种素域Fp下椭圆曲线快速点乘的硬件实现系统
CN113193962A (zh) * 2021-04-30 2021-07-30 安徽师范大学 基于轻量级模乘的sm2数字签名生成与验证器
CN113628094A (zh) * 2021-07-29 2021-11-09 西安电子科技大学 一种基于gpu的高吞吐量sm2数字签名计算系统及方法
CN113660087A (zh) * 2021-07-06 2021-11-16 浙江传媒学院 一种基于有限域的sm9标识密码算法硬件实现系统

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120069994A1 (en) * 2010-09-16 2012-03-22 Stmicroelectronics S.R.L. Method for genertaing a digital signature
US20160191252A1 (en) * 2013-08-16 2016-06-30 China Iwncomm Co., Ltd. Method and device for generating digital signature
CN106549769A (zh) * 2016-12-08 2017-03-29 广东工业大学 一种素域Fp下SM2椭圆曲线签名系统
CN109145616A (zh) * 2018-08-01 2019-01-04 上海交通大学 基于高效模乘的sm2加密、签名和密钥交换的实现方法及系统
CN109660351A (zh) * 2018-11-08 2019-04-19 北京大学 一种sm2公钥密码的数字签名快速生成方法
CN109933304A (zh) * 2019-03-20 2019-06-25 四川卫士通信息安全平台技术有限公司 适用于国密sm2p256v1算法的快速蒙哥马利模乘器运算优化方法
CN112118103A (zh) * 2019-06-20 2020-12-22 佛山芯珠微电子有限公司 一种素域Fp下椭圆曲线快速点乘的硬件实现系统
CN113193962A (zh) * 2021-04-30 2021-07-30 安徽师范大学 基于轻量级模乘的sm2数字签名生成与验证器
CN113660087A (zh) * 2021-07-06 2021-11-16 浙江传媒学院 一种基于有限域的sm9标识密码算法硬件实现系统
CN113628094A (zh) * 2021-07-29 2021-11-09 西安电子科技大学 一种基于gpu的高吞吐量sm2数字签名计算系统及方法

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
DAN ZHANG等: ""High-Performance Implementation of SM2 Based on FPGA"", 《 2016 8TH IEEE INTERNATIONAL CONFERENCE ON COMMUNICATION SOFTWARE AND NETWORKS(ICCSN 2016)》 *
DAN ZHANG等: ""High-Performance Implementation of SM2 Based on FPGA"", 《 2016 8TH IEEE INTERNATIONAL CONFERENCE ON COMMUNICATION SOFTWARE AND NETWORKS(ICCSN 2016)》, 4 June 2016 (2016-06-04), pages 603 - 607 *
李凡等: "基于FPGA的SM2点运算快速并行实现", 《电子测量技术》 *
李凡等: "基于FPGA的SM2点运算快速并行实现", 《电子测量技术》, no. 15, 8 August 2020 (2020-08-08), pages 111 - 117 *
郭晓等: "SM2高速双域Montgomery模乘的硬件设计", 《微电子学与计算机》, no. 09, 5 September 2013 (2013-09-05), pages 23 - 27 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117896067A (zh) * 2024-03-13 2024-04-16 杭州金智塔科技有限公司 适用于国密sm2算法的并行模约减方法及装置

Also Published As

Publication number Publication date
CN114338049B (zh) 2022-07-05

Similar Documents

Publication Publication Date Title
US10116437B1 (en) Method for protecting data used in cloud computing with homomorphic encryption
US7505587B2 (en) Elliptic curve cryptosystem apparatus, storage medium storing elliptic curve cryptosystem program, and elliptic curve cryptosystem arithmetic method
JP4668931B2 (ja) 電力解析攻撃に対する耐タンパ性を持った暗号化処理装置
US8428252B1 (en) Using multiples above two with running totals in elliptic curve cryptography scalar multiplication acceleration tables
US20090228717A1 (en) System for making program difficult to read, device for making program difficult to read, and method for making program difficult to read
KR20070008012A (ko) 멱지수를 숨기는 dpa 대책의 고속 계산을 위한 암호화장치 및 방법
CN112148437A (zh) 用于联邦学习的计算任务加速处理方法、装置及设备
TWI821501B (zh) 安全處理器、所述安全處理器的操作方法、以及加密或解密資料的方法
Moon et al. An Efficient Encrypted Floating‐Point Representation Using HEAAN and TFHE
Kim et al. Crystals‐Dilithium on ARMv8
Dong et al. sDPF-RSA: Utilizing floating-point computing power of GPUs for massive digital signature computations
CN112491543B (zh) 基于改进的蒙哥马利模幂电路的ic卡解密方法
CN116436709B (zh) 一种数据的加解密方法、装置、设备和介质
Breuer et al. Idea: towards a working fully homomorphic crypto-processor: practice and the secret computer
CN114338049B (zh) 基于模归约的国密算法sm2的快速实现方法及系统
Vollala et al. Efficient modular exponential algorithms compatible with hardware implementation of public‐key cryptography
Gouert et al. HELM: Navigating Homomorphic Encryption through Gates and Lookup Tables
Liu et al. Performance analysis of arithmetic operations in homomorphic encryption
D’Anvers One-hot conversion: Towards faster table-based A2B conversion
JP6212377B2 (ja) 演算装置、演算方法およびコンピュータプログラム
JP4692022B2 (ja) 楕円曲線暗号におけるスカラー倍計算装置、及び、そのプログラム
JP5179933B2 (ja) データ処理装置
EP3410292A1 (en) Calculations with reduced time dependence on the input
Blanton et al. Secure and Accurate Summation of Many Floating-Point Numbers
CN111480140A (zh) 计算设备和方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant