CN117353926B - 一种基于芯片的sm2算法密码处理方法、装置及设备 - Google Patents
一种基于芯片的sm2算法密码处理方法、装置及设备 Download PDFInfo
- Publication number
- CN117353926B CN117353926B CN202311639181.8A CN202311639181A CN117353926B CN 117353926 B CN117353926 B CN 117353926B CN 202311639181 A CN202311639181 A CN 202311639181A CN 117353926 B CN117353926 B CN 117353926B
- Authority
- CN
- China
- Prior art keywords
- length
- data
- packet
- preset
- packet data
- 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.)
- Active
Links
- 238000004422 calculation algorithm Methods 0.000 title claims abstract description 151
- 238000003672 processing method Methods 0.000 title claims abstract description 17
- 238000012545 processing Methods 0.000 claims abstract description 100
- 238000000034 method Methods 0.000 claims abstract description 90
- 230000006870 function Effects 0.000 claims description 72
- 238000007906 compression Methods 0.000 claims description 64
- 230000006835 compression Effects 0.000 claims description 61
- 238000009795 derivation Methods 0.000 claims description 47
- 238000004364 calculation method Methods 0.000 claims description 46
- 230000008569 process Effects 0.000 claims description 36
- 238000004590 computer program Methods 0.000 claims description 9
- 238000005429 filling process Methods 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 13
- 238000004891 communication Methods 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000011282 treatment Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/30—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
- H04L9/3066—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy involving algebraic varieties, e.g. elliptic or hyper-elliptic curves
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/12—Details relating to cryptographic hardware or logic circuitry
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Computer Security & Cryptography (AREA)
- Mathematical Physics (AREA)
- Physics & Mathematics (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Computing Systems (AREA)
- Mathematical Analysis (AREA)
- General Physics & Mathematics (AREA)
- Algebra (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请提供了一种基于芯片的SM2算法密码处理方法、装置、设备及介质。该方法包括:读取用户输入的比特串数据和所需密钥数据的第二数据长度;基于预设分组长度对比特串数据进行分组,得到分组数据;基于第一数据长度和哈希运算次数,基于第一数据长度和哈希运算次数,对分组数据中数据长度未达到预设分组长度的分组数据进行填充处理,生成第二分组数据;基于第一分组数据的消息字对第一分组数据进行处理,生成第一输出值,并基于第二分组数据的消息字对第二分组数据进行N次处理,生成N个第二输出值;对第一输出值和N个第二输出值进行处理,生成密钥派生函数。本申请可以提高SM2算法的性能和安全性,降低芯片的功耗。
Description
技术领域
本申请涉及密码算法技术领域,尤其涉及一种基于芯片的SM2算法密码处理方法、装置及设备。
背景技术
SM2是可分为密钥对生成、签名生成、签名验签、消息加密和消息解密共5个部分,分别对应不同的应用场景。而在算法的实现过程中,则会使用多个子函数(密码杂凑函数hash、密钥派生函数KDF、随机数生成函数等)及基本运算单元(包括点乘、点加、倍点、模加、模减、模乘及模逆等等),每一部分的计算效率/性能都影响着SM2算法的性能。
现有技术中,通常是按照协议规定逐次进行 Ha1 Ha2 ……的计算,之后把每次的计算结果组合生成K。由于本身hash算法的计算时间较长,这会导致密钥派生函数计算时间的显著增加,特别是在比特串的长度和所需生成派生密钥的数量都比较大时,导致SM2的性能下降。同时,比特串多次进行哈希计算,大量重复的数据反复进行计算,在进行侧信道的功耗攻击时,很容易获取功耗变化规律,进而较容易的获取相关信息,产生很大的安全隐患,同时,多次计算会增加芯片的功耗。
发明内容
本申请实施例提供一种基于芯片的SM2算法密码处理方法、装置及设备,以解决现有生成拍摄密钥的方式,会导致SM2的性能下降,容易遭到侧信道攻击,且会增加芯片的功耗的问题。
为了解决上述技术问题,本申请实施例是这样实现的:
第一方面,本申请实施例提供了一种基于芯片的SM2算法密码处理方法,所述芯片内设置有SM2算法模块,所述SM2算法模块包括:数据读取子模块、分组子模块、数据填充子模块、分组数据处理子模块和派生函数计算子模块,所述方法包括:
调用所述数据读取子模块读取用户输入的比特串数据和所需密钥数据的第二数据长度;
调用所述分组子模块基于预设分组长度对所述比特串数据进行分组,得到分组数据,所述预设分组长度是预设哈希算法的分组长度;
调用所述数据填充子模块基于所述比特串数据的第一数据长度和哈希运算次数,对所述分组数据中数据长度未达到预设分组长度的分组数据进行所述哈希运算次数的填充处理,生成第二分组数据;所述哈希运算次数是通过所述第二数据长度和所述预设哈希算法的算法长度计算得到的;
调用所述分组数据处理子模块基于第一分组数据的消息字对所述第一分组数据进行处理,生成第一输出值,并基于所述第二分组数据的消息字对所述第二分组数据进行N次处理,生成N个第二输出值;所述第一分组数据是指所有所述分组数据中数据长度达到所述预设分组长度的分组数据,N为所述哈希运算次数,且N为正整数;
调用所述派生函数计算子模块对所述第一输出值和N个所述第二输出值进行处理,生成SM2密码算法的所述第二数据长度的密钥派生函数。
可选地,所述基于所述比特串数据的第一数据长度和哈希运算次数,对所述分组数据中数据长度未达到预设分组长度的分组数据进行所述哈希运算次数的填充处理,生成第二分组数据,包括:
基于所述第一数据长度和所述预设分组长度,计算得到所述比特串数据的可分组个数和剩余数据长度;
基于所述哈希运算次数,确定SM2密码算法的ct计数值;
在所述分组数据的分组个数大于所述可分组个数的情况下,基于所述剩余数据长度和当前哈希运算次数对应的ct计数值,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据。
可选地,所述基于所述剩余数据长度和当前哈希运算次数对应的ct计数值,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据,包括:
基于所述预设分组长度、所述ct计数值的ct长度、1比特长度的第一设定数值和指定数据长度的指定数据,计算得到第一预置长度和第二预置长度;其中,所述第一预置长度大于所述第二预置长度,所述指定数据包括:ct长度的长度信息和比特串长度的长度信息;
基于所述剩余数据长度与所述第一预置长度和所述第二预置长度之间的大小关系,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据。
可选地,所述基于所述ct计数值的ct长度、1比特长度的设定数值和指定数据长度,计算得到第一预置长度和第二预置长度,包括:
计算得到所述预设分组长度与所述ct长度、1和所述指定数据长度之间的第一差值,并将该第一差值作为所述第一预置长度;
计算得到所述预设分组长度与所述ct长度之间的第二差值,并将该第二差值作为所述第二预置长度。
可选地,所述基于所述剩余数据长度与所述第一预置长度和所述第二预置长度之间的大小关系,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据,包括:
在所述剩余数据长度小于或等于所述第二预置长度的情况下,计算所述预设分组长度与所述剩余数据长度之间的差值,得到差值长度;
在所述数据长度未达到预设分组长度的分组数据中依次填充所述ct计数值、第一设定数值、所述差值长度的设定数值和所述指定数据,以得到所述第二分组数据。
可选地,所述基于所述剩余数据长度与所述第一预置长度和所述第二预置长度之间的大小关系,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据,包括:
在所述剩余数据长度等于所述第一预置长度的情况下,在所述数据长度未达到预设分组长度的分组数据中填充所述ct计数值;
在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第三分组数据,并将填充的分组数据和所述第三分组数据作为所述第二分组数据,所述第三分组数据依次包括:第一设定数值、第一长度的第二设定数值和所述指定数据,所述第一长度=所述预设分组长度-1-所述指定数据长度。
可选地,所述基于所述剩余数据长度与所述第一预置长度和所述第二预置长度之间的大小关系,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据,包括:
在所述剩余数据长度大于所述第二预置长度,且小于所述第一预置长度的情况下,在所述数据长度未达到预设分组长度的分组数据中依次填充所述ct计数值、第一设定数值和第二长度的第三设定数值;所述第二长度=所述预设分组长度-所述ct长度-1;
在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第四分组数据,并将填充的分组数据和所述第四分组数据作为所述第二分组数据,所述第四分组数据依次包括:第三长度的所述第三设定数值和所述指定数据,所述第三长度=所述预设分组长度-所述指定数据长度。
可选地,所述基于所述剩余数据长度与所述第一预置长度和所述第二预置长度之间的大小关系,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据,包括:
在所述剩余数据长度大于所述第一预置长度,且小于所述预设分组长度的情况下,在所述数据长度未达到预设分组长度的分组数据中填充第四长度的ct计数值,所述第四长度=所述预设分组长度-所述剩余数据长度;
在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第五分组数据,并将填充的分组数据和所述第五分组数据作为所述第二分组数据,所述第五分组数据依次包括:第五长度的ct计数值、第一设定数值、第六长度的第四设定数值和所述指定数据,所述第五长度=所述ct长度-所述第四长度,所述第六长度=所述预设分组长度-1-所述指定数据长度。
可选地,所述基于第一分组数据的消息字对所述第一分组数据进行处理,生成第一输出值,包括:
获取所述预设哈希算法所需的消息字数量;
基于所述第一分组数据的消息字对所述第一分组数据进行组内迭代压缩及组间迭代压缩处理,得到所述第一输出值。
可选地,所述基于所述第一分组数据的消息字对所述第一分组数据进行组内迭代压缩及组间迭代压缩处理,得到所述第一输出值,包括:
采用组内迭代压缩方式,基于所述第一分组数据的消息字对每组所述第一分组数据进行设定轮次的迭代压缩,得到当前第一分组数据的输出结果;
基于所述输出结果和下一组第一分组数据的消息字对下一组第一分组数据进行设定轮次的迭代压缩,得到下一组第一分组数据的输出结果;
在完成所有第一分组数据的迭代压缩之后,得到最终的目标输出结果;
将所述目标输出结果和最后一组第一分组数据的轮迭代函数的输入值进行异或处理,得到所述第一输出值。
可选地,所述基于所述第二分组数据的消息字对所述第二分组数据进行N次处理,生成N个第二输出值,包括:
获取所述第二分组数据中最后一组分组数据;
基于所述最后一组分组数据的消息字对所述最后一组分组数据进行迭代压缩处理,得到第二输出值;
对每次填充的分组数据迭代执行所述获取所述第二分组数据中最后一组分组数据,至基于所述最后一组分组数据的消息字对所述最后一组分组数据进行迭代压缩处理,得到第二输出值的步骤,得到N个第二输出值。
可选地,所述对所述第一输出值和N个所述第二输出值进行处理,生成SM2密码算法的所述第二数据长度的密钥派生函数,包括:
对所述第一输出值和N个所述第二输出值分别进行哈希处理,得到N个哈希值;
对所述N个哈希值进行组合,生成SM2密码算法的所述第二数据长度的密钥派生函数。
第二方面,本申请实施例提供了一种基于芯片的SM2算法密码处理装置,所述芯片内设置有SM2算法模块,所述SM2算法模块包括:数据读取子模块、分组子模块、数据填充子模块、分组数据处理子模块和派生函数计算子模块,所述装置包括:
比特串数据获取模块,用于调用所述数据读取子模块读取用户输入的比特串数据和所需密钥数据的第二数据长度;
分组数据获取模块,用于调用所述分组子模块基于预设分组长度对所述比特串数据进行分组,得到分组数据,所述预设分组长度是预设哈希算法的分组长度;
分组数据填充模块,用于调用所述数据填充子模块基于所述比特串数据的第一数据长度和哈希运算次数,对所述分组数据中数据长度未达到预设分组长度的分组数据进行所述哈希运算次数的填充处理,生成第二分组数据;所述哈希运算次数是通过所述第二数据长度和所述预设哈希算法的算法长度计算得到的;
输出值生成模块,用于调用所述分组数据处理子模块基于第一分组数据的消息字对所述第一分组数据进行处理,生成第一输出值,并基于所述第二分组数据的消息字对所述第二分组数据进行N次处理,生成N个第二输出值;所述第一分组数据是指所有所述分组数据中数据长度达到所述预设分组长度的分组数据,N为所述哈希运算次数,且N为正整数;
密钥派生函数生成模块,用于调用所述派生函数计算子模块对所述第一输出值和N个所述第二输出值进行处理,生成SM2密码算法的所述第二数据长度的密钥派生函数。
可选地,所述分组数据填充模块包括:
可分组个数计算单元,用于基于所述第一数据长度和所述预设分组长度,计算得到所述比特串数据的可分组个数和剩余数据长度;
ct计数值确定单元,用于基于所述哈希运算次数,确定SM2密码算法的ct计数值;
第二分组数据生成单元,用于在所述分组数据的分组个数大于所述可分组个数的情况下,基于所述剩余数据长度和当前哈希运算次数对应的ct计数值,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据。
可选地,所述第二分组数据生成单元包括:
预置长度计算子单元,用于基于所述预设分组长度、所述ct计数值的ct长度、1比特长度的第一设定数值和指定数据长度的指定数据,计算得到第一预置长度和第二预置长度;其中,所述第一预置长度大于所述第二预置长度,所述指定数据包括:ct长度的长度信息和比特串长度的长度信息;
第二分组数据计算子单元,用于基于所述剩余数据长度与所述第一预置长度和所述第二预置长度之间的大小关系,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据。
可选地,所述预置长度计算子单元包括:
第一长度计算子单元,用于计算得到所述预设分组长度与所述ct长度、1和所述指定数据长度之间的第一差值,并将该第一差值作为所述第一预置长度;
第二长度计算子单元,用于计算得到所述预设分组长度与所述ct长度之间的第二差值,并将该第二差值作为所述第二预置长度。
可选地,所述第二分组数据计算子单元包括:
差值长度获取子单元,用于在所述剩余数据长度小于或等于所述第二预置长度的情况下,计算所述预设分组长度与所述剩余数据长度之间的差值,得到差值长度;
第二分组数据获取子单元,用于在所述数据长度未达到预设分组长度的分组数据中依次填充所述ct计数值、第一设定数值、所述差值长度的设定数值和所述指定数据,以得到所述第二分组数据。
可选地,所述第二分组数据计算子单元包括:
第一填充子单元,用于在所述剩余数据长度等于所述第一预置长度的情况下,在所述数据长度未达到预设分组长度的分组数据中填充所述ct计数值;
第二填充子单元,用于在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第三分组数据,并将填充的分组数据和所述第三分组数据作为所述第二分组数据,所述第三分组数据依次包括:第一设定数值、第一长度的第二设定数值和所述指定数据,所述第一长度=所述预设分组长度-1-所述指定数据长度。
可选地,所述第二分组数据计算子单元包括:
第三填充子单元,用于在所述剩余数据长度大于所述第二预置长度,且小于所述第一预置长度的情况下,在所述数据长度未达到预设分组长度的分组数据中依次填充所述ct计数值、第一设定数值和第二长度的第三设定数值;所述第二长度=所述预设分组长度-所述ct长度-1;
第四填充子单元,用于在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第四分组数据,并将填充的分组数据和所述第四分组数据作为所述第二分组数据,所述第四分组数据依次包括:第三长度的所述第三设定数值和所述指定数据,所述第三长度=所述预设分组长度-所述指定数据长度。
可选地,所述第二分组数据计算子单元包括:
第五填充子单元,用于在所述剩余数据长度大于所述第一预置长度,且小于所述预设分组长度的情况下,在所述数据长度未达到预设分组长度的分组数据中填充第四长度的ct计数值,所述第四长度=所述预设分组长度-所述剩余数据长度;
第六填充子单元,用于在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第五分组数据,并将填充的分组数据和所述第五分组数据作为所述第二分组数据,所述第五分组数据依次包括:第五长度的ct计数值、第一设定数值、第六长度的第四设定数值和所述指定数据,所述第五长度=所述ct长度-所述第四长度,所述第六长度=所述预设分组长度-1-所述指定数据长度。
可选地,所述输出值生成模块包括:
消息字数量获取单元,用于获取所述预设哈希算法所需的消息字数量;
第一输出值获取单元,用于基于所述第一分组数据的消息字对所述第一分组数据进行组内迭代压缩及组间迭代压缩处理,得到所述第一输出值。
可选地,所述第一输出值获取单元包括:
第一输出结果获取子单元,用于采用组内迭代压缩方式,基于所述第一分组数据的消息字对每组所述第一分组数据进行设定轮次的迭代压缩,得到当前第一分组数据的输出结果;
第二输出结果获取子单元,用于基于所述输出结果和下一组第一分组数据的消息字对下一组第一分组数据进行设定轮次的迭代压缩,得到下一组第一分组数据的输出结果;
目标输出结果获取子单元,用于在完成所有第一分组数据的迭代压缩之后,得到最终的目标输出结果;
第一输出值获取子单元,用于将所述目标输出结果和最后一组第一分组数据的轮迭代函数的输入值进行异或处理,得到所述第一输出值。
可选地,所述输出值生成模块包括:
分组数据获取单元,用于获取所述第二分组数据中最后一组分组数据;
第二输出值获取单元,用于基于所述最后一组分组数据的消息字对所述最后一组分组数据进行迭代压缩处理,得到第二输出值;
N个输出值获取单元,用于对每次填充的分组数据迭代执行所述分组数据获取单元和所述第二输出值获取单元,得到N个第二输出值。
可选地,所述密钥派生函数生成模块包括:
哈希值获取单元,用于对所述第一输出值和N个所述第二输出值分别进行哈希处理,得到N个哈希值;
密钥派生函数生成单元,用于对所述N个哈希值进行组合,生成SM2密码算法的所述第二数据长度的密钥派生函数。
第三方面,本申请实施例提供了一种电子设备,包括:
存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述任一项所述的基于芯片的SM2算法密码处理方法。
第四方面,本申请实施例提供了一种可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述任一项所述的基于芯片的SM2算法密码处理方法。
在本申请实施例中,通过调用SM2算法模块获取用户输入的比特串数据和所需密钥数据的第二数据长度。基于预设分组长度对比特串数据进行分组,得到分组数据,预设分组长度是预设哈希算法的分组长度。基于比特串数据的第一数据长度和哈希运算次数,对分组数据中数据长度未达到预设分组长度的分组数据进行哈希运算次数的填充处理,生成第二分组数据,哈希运算次数是通过第二数据长度和预设哈希算法的算法长度计算得到的。基于第一分组数据的消息字对第一分组数据进行处理,生成第一输出值,并基于第二分组数据的消息字对第二分组数据进行N次处理,生成N个第二输出值,第一分组数据是指所有分组数据中数据长度达到预设分组长度的分组数据,N为哈希运算次数,且N为正整数。对第一输出值和N个第二输出值进行处理,生成SM2密码算法的第二数据长度的密钥派生函数。本申请实施例通过对输入的比特串数据进行分组及数据填充,就可以计算出哈希值并组合成派生密钥,此过程中,比特串数据仅需输入一次,能够减少总的计算量和计算时间。同时,比特串数据只进行一次哈希计算,而后续的填充数据又是没有明显规律的,生成派生密钥的子函数的时间也不是均匀的,这都导致功耗曲线的特征平缓,难以获取有效信息,提升了抗侧信道攻击能力,同时,可以降低芯片的功耗。
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种基于芯片的SM2算法密码处理方法的步骤流程图;
图2为本申请实施例提供的一种分组数据生成方法的步骤流程图;
图3为本申请实施例提供的另一种分组数据生成方法的步骤流程图;
图4为本申请实施例提供的一种分组数据填充方法的步骤流程图;
图5为本申请实施例提供的另一种分组数据填充方法的步骤流程图;
图6为本申请实施例提供的又一种分组数据填充方法的步骤流程图;
图7为本申请实施例提供的再一种分组数据填充方法的步骤流程图;
图8为本申请实施例提供的还一种分组数据填充方法的步骤流程图;
图9为本申请实施例提供的一种第一输出值获取方法的步骤流程图;
图10为本申请实施例提供的另一种第一输出值获取方法的步骤流程图;
图11为本申请实施例提供的一种第二输出值获取方法的步骤流程图;
图12为本申请实施例提供的另一种密钥派生函数生成方法的步骤流程图;
图13为本申请实施例提供的一种密钥派生函数生成过程的示意图;
图14为本申请实施例提供的一种改进的SM3算法结构的示意图;
图15为本申请实施例提供的一种分组填充方式的示意图;
图16为本申请实施例提供的另一种分组填充方式的示意图;
图17为本申请实施例提供的又一种分组填充方式的示意图;
图18为本申请实施例提供的再一种分组填充方式的示意图;
图19为本申请实施例提供的一种硬件系统架构的示意图;
图20为本申请实施例提供的一种SM2密钥派生计算的硬件处理时序的示意图;
图21为本申请实施例提供的一种基于芯片的SM2算法密码处理装置的结构示意图;
图22为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
参照图1,示出了本申请实施例提供的一种基于芯片的SM2算法密码处理方法的步骤流程图,所述芯片内设置有SM2算法模块,所述SM2算法模块包括:数据读取子模块、分组子模块、数据填充子模块、分组数据处理子模块和派生函数计算子模块。如图1所示,该基于芯片的SM2算法密码处理方法可以包括:步骤101、步骤102、步骤103、步骤104和步骤105。
步骤101:调用所述数据读取子模块读取用户输入的比特串数据和所需密钥数据的第二数据长度。
本申请实施例可以应用于通过分组填充的方式生成密钥派生函数的场景中。
第二数据长度是指所需密钥数据的数据长度。
在本示例中,第二数据长度可以为比特长度。
在进行密钥派生函数的获取时,可以调用数据读取子模块读取用户输入的比特串数据,以及所需密钥数据的第二数据长度。在具体实现中,可以预先由用户向芯片中输入比特串数据,以及所需密钥数据的第二数据长度,并存储于芯片的存储器(如DDR(DoubleData Rate,双倍速率同步动态随机存储器)等)。在SM2算法模块进行密钥派生函数的获取时,可以获取预先输入的比特串数据和所需密钥数据的第二数据长度。
对于该过程可以结合芯片的硬件架构进行如下详细描述。
参照图19,示出了本申请实施例提供的一种硬件系统架构的示意图。如图19所示,芯片可以包括以下几部分:
1、CPU(Central Processing Unit,中央处理器),用于整个芯片的控制及数据交互,在BMC芯片中为ARM处理器。
2、存储器,包括DDR(DDR SDRAM,双倍速率同步动态随机存储器)存储器和SDRAM(Synchronous Dynamic Random Access Memory,同步动态随机存储器)存储器等,用于存储和缓存数据及指令信息。
3、外设接口,与外围设备或芯片进行通信。
4、SM2算法模块,实现SM2算法的计算,如图19所示,SM2算法模块可以包括:数据读取子模块、分组子模块、数据填充子模块、分组数据处理子模块和派生函数计算子模块。
5、其他主设备,其他从设备,基于不同芯片的应用场景完成特定的功能。
密钥数据比特串的传递包括以下3种方式:
1、CPU通过总线直接将用户输入的加解密数据或密钥数据比特串传递至SM2算法模块。
2、外设接口通过总线将用户输入的加解密数据或密钥数据比特串传递至SM2算法模块。
3、CPU或其他设备将用户输入的加解密数据或密钥数据比特串写入DDR或SDRAM等存储设备中,之后再传输至SM2算法模块中。
在读取到用户输入的比特串数据,以及所需密钥数据的第二数据长度之后,执行步骤102。
步骤102:调用所述分组子模块基于预设分组长度对所述比特串数据进行分组,得到分组数据,所述预设分组长度是预设哈希算法的分组长度。
预设分组长度是指用于对比特串数据进行分组的数据长度,在本示例中,预设分组长度可以是根据预设哈希算法的类型确定的,例如,在哈希算法为SM3算法时,则预设分组长度可以为512比特等。
在获取到输入的比特串数据之后,则可以调用分组子模块基于预设分组长度对比特串数据进行分组,以得到分组数据。例如,在预设分组长度为512比特时,则可以对比特串数据按照512比特依次进行分组,从而可以得到多个512比特长度的分组数据等。
可以理解地,上述示例仅是为了更好地理解本申请实施例提供的技术方案而列举的示例,不作为对本实施例的唯一限制。
在基于预设分组长度对比特串数据进行分组,得到分组数据之后,执行步骤103。
步骤103:调用所述数据填充子模块基于所述比特串数据的第一数据长度和哈希运算次数,对所述分组数据中数据长度未达到预设分组长度的分组数据进行所述哈希运算次数的填充处理,生成第二分组数据。
在本示例中,哈希运算次数可以是通过第二数据长度和预设哈希算法的算法长度计算得到的。在实际应用中,可以预先计算比特串数据的可分组数,即可分组数=第一数据长度/v,并向下取证,其中,v为预设哈希算法的算法长度,例如,在预设哈希算法为SM3算法时,则v为256等。
在进行分组之后,可以判断当前分组数与可分组数之间的大小关系,若当前分组数小于或等于可分组数时,此时不需要进行填充,直接使用原始数据形成分组,并按照原有密钥派生函数的生成方式进行处理即可,本实施例对此过程不做详细描述。
第一数据长度为比特串数据的数据长度,在本示例中,第一数据长度可以为比特长度。
在当前分组数大于可分组数时,则可以调用数据填充子模块基于第一数据长度,对分组数据进行填充处理,生成第二分组数据。可以理解地,在得到分组数据之后,若需要进行填充,则可以基于比特串数据的第一数据长度和哈希运算次数对分组数据中的数据长度未达到预设分组长度的分组数据进行哈希运算次数的填充即可,在填充完成之后,则可以将填充的分组数据作为第二分组数据。
可以理解地,在对数据长度未达到预设分组长度的分组数据进行填充时,可以基于哈希运算次数确定SM2密码算法的ct计数值,对该分组数据进行哈希运算次数的填充。例如,哈希运算次数为3,哈希运算次数为1时,ct计数值为1。在哈希运算次数为2时,则ct计数值为2。而在哈希运算次数为3时,则ct计数值为3等。即每次填充时所填充的ct计数值是不相同的。
可以理解地,上述示例仅是为了更好地理解本申请实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。
在具体实现中,可以基于第一数据长度和预设分组长度,计算得到比特串数据的可分组个数和剩余数据长度,并基于哈希运算次数确定SM2密码算法的ct计数值,进而,基于剩余数据长度和当前哈希运算次数对应的ct计数值对分组数据进行填充处理,生成目标分组数据。对于该实现过程可以结合图2进行如下详细描述。
参照图2,示出了本申请实施例提供的一种分组数据生成方法的步骤流程图。如图2所示,该分组数据生成方法可以包括:步骤201、步骤202和步骤203。
步骤201:基于所述第一数据长度和所述预设分组长度,计算得到所述比特串数据的可分组个数和剩余数据长度。
在本实施例中,在得到第一数据长度和预设分组长度之后,则可以基于第一数据长度和预设分组长度,计算得到比特串数据的可分组个数和剩余数据长度。
其中,剩余数据长度=第一数据长度/预设分组长度,并向下取整。
在基于第一数据长度和预设分组长度,计算得到比特串数据的可分组个数和剩余数据长度之后,执行步骤203。
步骤202:基于所述哈希运算次数,确定SM2密码算法的ct计数值。
在本示例中,需要对数据长度未达到预设分组长度的分组数据进行哈希运算次数的填充,填充的内容包含SM2密码算法的ct计数值,每次填充时,可以基于哈希运算次数确定SM2密码算法的ct计数值。如哈希运算次数为3,哈希运算次数为1时,ct计数值为1。在哈希运算次数为2时,则ct计数值为2等。
步骤202:在所述分组数据的分组个数大于所述可分组个数的情况下,基于所述剩余数据长度和当前哈希运算次数对应的ct计数值,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据。
在基于第一数据长度和预设分组长度,计算得到比特串数据的可分组个数和剩余数据长度,并确定ct计数值之后,可以比较分组数据的分组个数与可分组个数的大小关系。
在分组数据的分组个数大于可分组个数的情况下,基于剩余数据长度和当前哈希运算次数对应的ct计数值,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据。
在具体实现中,可以基于预设分组长度、SM2算法的ct计数值的ct长度、1比特长度的第一设定数值和指定数据长度的指定数据,计算得到第一预置长度和第二预置长度,其中,第一预置长度大于第二预置长度,指定数据包括:ct长度的长度信息和比特串长度的长度信息。例如,在预设哈希算法为SM3算法时,则第一预置长度可以为480比特,第二预置长度可以为415比特等。进而,可以根据剩余数据长度与第一预置长度和第二预置长度之间的大小关系,对数据长度未达到预设分组长度的分组数据进行填充处理。对于该实现过程可以结合图3进行如下详细描述。
参照图3,示出了本申请实施例提供的另一种分组数据生成方法的步骤流程图。如图3所示,该分组数据生成方法可以包括:步骤301和步骤302。
步骤301:基于所述预设分组长度、所述ct计数值的ct长度、1比特长度的第一设定数值和指定数据长度的指定数据,计算得到第一预置长度和第二预置长度;其中,所述第一预置长度大于所述第二预置长度,所述指定数据包括:ct长度的长度信息和比特串长度的长度信息。
在本实施例中,SM2算法的ct计数值的ct长度为32比特。
第一设定数值可以为1、0等数值,具体地,对于第一设定数值的具体值可以根据业务需求而定,本实施例对此不加以限制。
指定数据可以包括:ct长度的长度信息和比特串长度的长度信息,该指定数据的指定数据长度可以是自定义的,本实施例对于指定数据长度的具体数值不加以限制。
在具体实现中,可以基于预设分组长度、SM2算法的ct计数值的ct长度、1比特长度的第一设定数值和指定数据长度的指定数据,计算得到第一预置长度和第二预置长度。对于该实现过程可以结合图4进行如下详细描述。
参照图4,示出了本申请实施例提供的一种预置长度计算方法的步骤流程图。如图4所示,该预置长度计算方法可以包括:步骤401和步骤402。
步骤401:计算得到所述预设分组长度与所述ct长度、1和所述指定数据长度之间的第一差值,并将该第一差值作为所述第一预置长度。
步骤402:计算得到所述预设分组长度与所述ct长度之间的第二差值,并将该第二差值作为所述第二预置长度。
在本申请实施例中,可以计算得到预设分组长度与ct长度、1和指定数据长度之间的第一差值,并将该第一差值作为第一预置长度。
可以计算得到预设分组长度与ct长度之间的第二差值,并将该第二差值作为第二预置长度。
本申请实施例通过预先计算得到第一预置长度和第二预置长度,可以为后续分组数据的填充内容做准备,提高内容填充的完整性。
在计算得到第一预置长度和第二预置长度之后,执行步骤302。
步骤302:基于所述剩余数据长度与所述第一预置长度和所述第二预置长度之间的大小关系,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据。
在计算得到第一预置长度和第二预置长度之后,可以基于剩余数据长度与第一预置长度和第二预置长度之间的大小关系,对数据长度未达到预设分组长度的分组数据进行填充处理,生成第二分组数据。
本申请实施例通过结合剩余数据长度与第一预置长度和第二预置长度的大小关系,再结合当前哈希运算次数对应的ct计数值对数据长度未达到预设分组长度的分组数据进行填充,从而可以使填充后的分组数据能够满足预设分组长度的目的。
在本申请的一种具体实现中,在剩余数据长度小于或等于第二预置长度的情况下,则可以计算预设分组长度与剩余数据长度之间的差值,得到差值长度,在剩余数据长度的分组数据中依次填充所述ct计数值、第一设定数值、差值长度的数值0和指定数据。对于该实现过程可以结合图5进行如下详细描述。
参照图5,示出了本申请实施例提供的一种分组数据填充方法的步骤流程图。如图5所示,该分组数据填充方法可以包括:步骤501和步骤502。
步骤501:在所述剩余数据长度小于或等于所述第二预置长度的情况下,计算所述预设分组长度与所述剩余数据长度之间的差值,得到差值长度。
在本申请实施例中,在剩余数据长度小于或等于第二预置长度的情况下,则可以计算预设分组长度与剩余数据长度之间的差值,得到差值长度。
在计算预设分组长度与所述剩余数据长度之间的差值,得到差值长度之后,执行步骤502。
步骤502:在所述数据长度未达到预设分组长度的分组数据中依次填充所述ct计数值、第一设定数值、所述差值长度的设定数值和所述指定数据,以得到所述第二分组数据。
在计算预设分组长度与所述剩余数据长度之间的差值,得到差值长度之后,则可以在剩余数据长度的分组数据中依次填充ct计数值、第一设定数值、差值长度的数值0和指定数据。
在完成上述填充之后,则可以将填充后的分组数据作为第二分组数据。
例如,预设哈希算法以SM3算法为例,此时根据SM2的密钥派生规则及SM3的填充规则,添加CT_N(即算法标准中的ct计数值),从1开始取,依次加1,数据长度固定为32bit。X为需要填充的“0”的个数,x=512-z_res(剩余数据长度)-32-64-1。第二预置长度为415,指定数据为L_length=Zlen(比特串长度信息)+32(ct_n长度信息),其数据长度为64比特。此时,数据填充方式可以如图15所示,即在z_res之后,填充32比特的CT_n,1比特的数值1,x比特的数值“0”和64比特的L_length等。
当然,对于CT_N的具体值可以根据当前分组数和可分组数来确定。示例如下:
group_cnt(当前分组数)=z_num(可分组数)+1时,填充为图15的填充格式,CT_N=1,其他部分保持不变。
group_cnt=z_num+2时,填充为图15的填充格式,CT_N=2,其他部分保持不变,依次类推直至。
group_cnt=z_num+H_num(hash函数运算次数)时,填充为图15的填充格式,CT_N=H_num,其他部分保持不变,此时完成了一次密钥派生的数据填充分组的计算过程。
可以理解地,上述示例仅是为了更好地理解本申请实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。
在本申请的一种具体实现中,在剩余数据长度等于第一预置长度的情况下,则可以余数据长度的分组数据中填充ct计数值,并在剩余数据长度的分组数据之后填充预设分组长度的第三分组数据。对于该实现过程可以结合图6进行如下详细描述。
参照图6,示出了本申请实施例提供的另一种分组数据填充方法的步骤流程图。如图6所示,该分组数据填充方法可以包括:步骤601和步骤602。
步骤601:在所述剩余数据长度等于所述第一预置长度的情况下,在所述数据长度未达到预设分组长度的分组数据中填充所述ct计数值。
在本申请实施例中,在剩余数据长度等于第一预置长度的情况下,则可以在剩余数据长度的分组数据中填充ct计数值。即第一预置长度是根据剩余数据长度和ct长度计算得到的,在剩余数据长度等于第一预置长度时,则直接在该组数据中填充ct计数值即可。
步骤602:在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第三分组数据,并将填充的分组数据和所述第三分组数据作为所述第二分组数据,所述第三分组数据依次包括:第一设定数值、第一长度的第二设定数值和所述指定数据,所述第一长度=所述预设分组长度-1-所述指定数据长度。
进而,可以在数据长度为达到预设分组长度的分组数据之后填充预设分组长度的第三分组数据,第三分组数据依次包括:第一设定数值、第一长度的第二设定数值和指定数据,第一长度=预设分组长度-1-指定数据长度。
在完成上述数据填充之后,可以将填充后的分组数据和第三分组数据共同作为第二分组数据。
例如,预设哈希算法以SM3算法为例,第一预置长度为480,此时根据SM2的密钥派生规则及SM3的填充规则,首先在填充的第一个分组长度中添加CT_N(即算法标准中的ct计数值),从1开始取,依次加1,数据长度固定为32bit。之后在填充的第二个分组长度中填充1个bit的1(即第一设定数值),447个bit的0(即第二设定数值),以及64bit的数据长度L_length。如图16所示,在z_res之后填充32比特的CT_n,同时添加一个512长度的第一分组数据,即图16中填充2,1个比特的数值“1”,447比特的数值“0”和64比特的L_length等。
之后的每个分组的形式都是固定的,每次新填充2个分组长度,当然,对于CT_N的具体值可以根据当前分组数和可分组数来确定。示例如下:
group_cnt=z_num+1时,填充为图16的填充1格式和填充2格式,CT_N=1,其他部分保持不变。
group_cnt=z_num+2时,填充为图16的填充1格式和填充2格式,CT_N=2,数据格式是固定的。
以此类推直至:
group_cnt=z_num+H_num时,填充为图16的填充1格式和填充2格式,CT_N=H_num,其他部分保持不变。
此时完成了一次密钥派生函数的数据填充分组的计算过程。
可以理解地,上述示例仅是为了更好地理解本申请实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。
在本申请的一种具体实现中,在剩余数据长度大于第二预置长度,且小于第一预置长度的情况下,则可以在所述数据长度未达到预设分组长度的分组数据中依次填充ct计数值、第一设定数值和第二长度的第三设定数值,同时,在剩余数据长度的分组数据之后填充预设分组长度的第四分组数据。对于该实现过程可以结合图7进行如下详细描述。
参照图7,示出了本申请实施例提供的又一种分组数据填充方法的步骤流程图。如图7所示,该分组数据填充方法可以包括:步骤701和步骤702。
步骤701:在所述剩余数据长度大于所述第二预置长度,且小于所述第一预置长度的情况下,在所述数据长度未达到预设分组长度的分组数据中依次填充所述ct计数值、第一设定数值和第二长度的第三设定数值;所述第二长度=所述预设分组长度-所述ct长度-1。
在本申请实施例中,在剩余数据长度大于第二预置长度,且小于第一预置长度的情况下,可以在数据长度未达到预设分组长度的分组数据中依次填充ct计数值、第一设定数值和第二长度的第三设定数值,其中,第二长度=预设分组长度-ct长度-1。
在本示例中,第三设定数值可以为0、3等数值,具体地,对于第三设定数值的具体值可以根据业务需求而定,本实施例对此不加以限制。
步骤702:在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第四分组数据,并将填充的分组数据和所述第四分组数据作为所述第二分组数据,所述第四分组数据依次包括:第三长度的所述第三设定数值和所述指定数据,所述第三长度=所述预设分组长度-所述指定数据长度。
在数据长度未达到预设分组长度的分组数据中依次填充ct计数值、第一设定数值和第二长度的第三设定数值之后,则可以在剩余数据长度的分组数据之后填充预设分组长度的第四分组数据,第四分组数据依次包括:第三长度的第三设定数值和所述指定数据,第三长度=预设分组长度-指定数据长度。
在完成上述数据填充之后,则可以将填充的分组数据和第四分组数据共同作为目标分组数据。
例如,预设哈希算法以SM3算法为例,第一预置长度为480,第二预置长度为415,在415<z_res<480时,此时根据SM2的密钥派生规则及SM3的填充规则,首先在填充的第一个分组长度中添加CT_N(即算法标准中的ct计数值),从1开始取,依次加1,数据长度固定为32bit。之后添加1bit的1,x比特的0,x=512-1-32-z_res。之后在填充的第二个分组长度中填充448个bit的0,以及64bit的数据长度L_length。如图17所示,在z_res之后填充32比特的CT_n、1比特的数值“1”,和x比特的数值“0”,同时添加一个512长度的第二分组数据,即图17中填充2,448比特的数值“0”和64比特的L_length等。
此时之后的每个分组的形式都是固定的,每次新填充2个分组长度,当然,对于CT_N的具体值可以根据当前分组数和可分组数来确定。示例如下:
group_cnt=z_num+1时,填充为图17的填充1格式和填充2格式,CT_N=1,其他部分保持不变。
group_cnt=z_num+2时,填充为图17的填充1格式和填充2格式,CT_N=2,数据格式是固定的。
以此类推直至:
group_cnt=z_num+H_num时,填充为图17的填充1格式和填充2格式,CT_N=H_num,其他部分保持不变。
此时完成了一次密钥派生函数的数据填充分组的计算过程。
可以理解地,上述示例仅是为了更好地理解本申请实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。
在本申请的一种具体实现中,在剩余数据长度大于第一预置长度,且小于预设分组长度的情况下,则可以在剩余数据长度的分组数据中依次填充第四长度的ct计数值,并在该分组数据之后,填充预设分组长度的第五分组数据。对于该实现过程可以结合图8进行如下详细描述。
参照图8,示出了本申请实施例提供的还一种分组数据填充方法的步骤流程图。如图8所示,该分组数据填充方法可以包括:步骤801和步骤802。
步骤801:在所述剩余数据长度大于所述第一预置长度,且小于所述预设分组长度的情况下,在所述数据长度未达到预设分组长度的分组数据中填充第四长度的ct计数值,所述第四长度=所述预设分组长度-所述剩余数据长度。
在本实施例中,在剩余数据长度大于第一预置长度,且小于预设分组长度的情况下,则可以在数据长度未达到预设分组长度的分组数据中依次填充第四长度的ct计数值,其中,第四长度=预设分组长度-剩余数据长度。
步骤802:在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第五分组数据,并将填充的分组数据和所述第五分组数据作为所述第二分组数据,所述第五分组数据依次包括:第五长度的ct计数值、第一设定数值、第六长度的第四设定数值和所述指定数据,所述第五长度=所述ct长度-所述第四长度,所述第六长度=所述预设分组长度-1-所述指定数据长度。
之后,可以在数据长度未达到预设分组长度的分组数据之后填充预设分组长度的第五分组数据,第五分组数据依次包括:第五长度的ct计数值、第一设定数值、第六长度的第四设定数值和所述指定数据,第五长度=ct长度-第四长度,第六长度=预设分组长度-1-指定数据长度。
在完成上述填充之后,则可以将填充的剩余数据长度的分组数据和第五分组数据共同作为目标分组数据。
例如,预设哈希算法以SM3算法为例,第一预置长度为480,第二预置长度为415,当480<z_res<512时,可以根据SM2的密钥派生规则及SM3的填充规则,首先填充CT_N(即算法标准中的ct计数值),从1开始取,依次加1,数据长度固定为32bit。由于Z_res>480,因此CT_N的一部分(高位)ct_n_u填充在第一个分组中,第二个分组的最开始填充CT_N的另一部分(低位)ct_n_d,之后依次添加1比特“1”,若干bit的“0”以及64bit的数据长度L_length。如图18所示,480<z_res<512时,可以在z_res之后填充y比特的CT_n_u。之后添加第三分组数据,依次包括:32-y比特的CT_n_d,1比特的数值“1”,x比特的数值“0”,64比特的L_length等。其中,y=512-z_res;x=512-1-64-32+y。
此时之后的每个分组的形式都是固定的,每次新填充2个分组长度,当然,对于CT_N的具体值可以根据当前分组数和可分组数来确定。示例如下:
group_cnt=z_num+1时,填充为图18的填充1格式和填充2格式,CT_N=1,填充其高位部分,其他部分保持不变。
group_cnt=z_num+2时,填充为附图8的填充1格式和填充2格式,CT_N=1,填充其低位部分,其他部分保持不变。
以此类推直至:
group_cnt=z_num+H_num时,填充为图18的填充1格式和填充2格式,CT_N=H_num,填充其高位部分,其他部分保持不变。
此时完成了一次密钥派生的数据填充分组的计算过程。
可以理解地,上述示例仅是为了更好地理解本申请实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。
本申请实施例通过根据剩余数据长度进行分组数据填充,从而可以便于后续的数据处理,同时,后续的填充数据又是没有明显规律的,生成派生密钥的子函数的时间也不是均匀的,这都导致功耗曲线的特征平缓,难以获取有效信息,提升了抗侧信道攻击能力。
在基于比特串数据的第一数据长度和哈希运算次数,对分组数据中数据长度未达到预设分组长度的分组数据进行哈希运算次数的填充处理,生成第二分组数据之后,执行步骤104。
步骤104:调用所述分组数据处理子模块基于第一分组数据的消息字对所述第一分组数据进行处理,生成第一输出值,并基于所述第二分组数据的消息字对所述第二分组数据进行N次处理,生成N个第二输出值。
在对数据长度未达到预设分组长度的分组数据进行填充处理,生成第二分组数据之后,则可以调用分组数据处理子模块对所有的分组数据进行扩展处理,生成所有分组数据的消息字。具体地扩展过程可以如下所示:
在本申请实施例中,可以获取预设哈希算法对应的消息字数量,即预设哈希算法定义了每组分组数据所需的消息字数量。例如,在预设哈希算法为SM3算法时,则消息字数量为64等。
在获取到预设哈希算法对应的消息字数量之后,则可以基于所有分组数据确定出第一数量的消息字。例如,填充分组阶段,分组长度为512bit,每个消息字为32bit,即16个消息字。
在基于所有分组数据确定出第一数量的消息字之后,则可以对第一数量的消息字进行扩展处理,以生成第二数量的消息字。例如,承接上述步骤902的描述,在填充分组阶段,分组长度为512bit,每个消息字为32bit,即16个消息字,分组扩展就是使用这16个消息字进行计算并生成后续的16-64个消息字Wj和Wj’等。
在对第一数量的消息字进行扩展处理生成第二数量的消息字之后,则可以将第一数量的消息字和第二数量的消息字作为所有分组数据的消息字,其中,消息字数量等于第一数量和第二数量的和值。
本申请实施例通过上述扩展处理方式,可以生成用于进行后续迭代压缩使用的消息字,以便进行后续的迭代压缩处理。
其中,所有分组数据包括第一分组数据和第二分组数据,第二分组数据即填充的分组数据,第一分组数据即为拆分的所有分组数据中未填充的分组数据,即第一分组数据的数据长度均达到了预设分组长度。
在得到第一分组数据的消息字和第二分组数据的消息字之后,则可以调用分组数据处理子模块基于第一分组数据的消息字对第一分组数据进行处理,生成第一输出值。并基于第二分组数据的消息字对第二分组数据进行N次处理,生成N个第二输出值。其中,N为哈希运算次数,且N为正整数。
即未填充的第一分组数据仅进行一次迭代压缩的处理过程,以生成第一输出值。填充的第二分组数据需要进行N次迭代压缩的处理过程,以生成N个第二输出值(即每次填充时填充的内容是根据哈希运算次数确定的)。
对于生成第一输出值的过程可以结合图9进行如下详细描述。
参照图9,示出了本申请实施例提供的一种第一输出值获取方法的步骤流程图。如图9所示,该第一输出值获取方法可以包括:步骤901和步骤902。
步骤901:获取所述预设哈希算法所需的消息字数量。
在本示例中,首先可以获取预设哈希算法所需的消息字数量。例如,在预设哈希算法为SM3算法时,消息字数据为64等。
在获取到预设哈希算法所需的消息字数量之后,执行步骤902。
步骤902:基于所述第一分组数据的消息字对所述第一分组数据进行组内迭代压缩及组间迭代压缩处理,得到所述第一输出值。
在获取到预设哈希算法所需的消息字数量之后,则可以基于第一分组数据的消息字对第一分组数据进行组内迭代压缩及组间迭代压缩处理,得到所述第一输出值。对于组内和组间迭代压缩的实现过程可以结合图10进行如下详细描述。
参照图10,示出了本申请实施例提供的另一种第一输出值获取方法的步骤流程图。如图10所示,该第一输出值获取方法可以包括:步骤1001、步骤1002、步骤1003和步骤1004。
步骤1001:采用组内迭代压缩方式,基于所述第一分组数据的消息字对每组所述第一分组数据进行设定轮次的迭代压缩,得到当前第一分组数据的输出结果。
在本申请实施例中,针对第一分组数据,可以采用组内迭代压缩方式基于第一分组数据的消息字对每组第一分组数据进行设定轮次的迭代压缩,得到当前第一分组数据的输出结果。具体地,在对第一分组数据进行组内压缩时,每组分组数据经过设定轮次的迭代压缩,则可以将当前迭代压缩的输出结果作为下一轮迭代压缩的输入,依次进行迭代,在完成设定轮次的迭代压缩之后,则可以得到当前第一分组数据的输出结果。
步骤1002:基于所述输出结果和下一组第一分组数据的消息字对下一组第一分组数据进行设定轮次的迭代压缩,得到下一组第一分组数据的输出结果。
在得到上一组第一分组数据的输出结果之后,则可以将该输出结果作为下一组第一分组数据的输入以进行迭代压缩,此过程即为组间迭代压缩过程。即基于上一组第一分组数据的输出结果和下一组第一分组数据的消息字对下一组第一分组数据进行设定轮次的迭代压缩,得到下一组第一分组数据的输出结果。
步骤1003:在完成所有第一分组数据的迭代压缩之后,得到最终的目标输出结果。
在完成所有第一分组数据的迭代压缩之后,得到最终的目标输出结果。
步骤1004:将所述目标输出结果和最后一组第一分组数据的轮迭代函数的输入值进行异或处理,得到所述第一输出值。
在完成所有第一分组数据的迭代压缩之后,得到最终的目标输出结果之后,可以将目标输出结果和最后一组第一分组数据的轮迭代函数的输入值进行异或处理,得到第一输出值。例如,每组512bit数据经过64(64个消息字)轮迭代压缩后的计算结果记为Vo_n,n为数据组编号,对应group_cnt。迭代压缩函数的输入数据记为Vi_n,其值为Vi_n=Vi_n-1⊕Vo_n-1,⊕代表异或操作。当计算完成第group_cnt=z_num组的数据时,此时迭代函数输出结果为Vo_z_num,此时与当前轮迭代函数的输入值做异或操作,并将结果寄存记为Vo_z_num_reg。Vo_z_num_reg=Vo_z_num⊕Vi_z_num等。
可以理解地,上述示例仅是为了更好地理解本申请实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。
对于生成第二输出值的实现过程可以结合图11进行如下详细描述。
参照图11,示出了本申请实施例提供的一种第二输出值获取方法的步骤流程图。如图11所示,该第二输出值获取方法可以包括:步骤1101、步骤1102和步骤1103。
步骤1101:获取所述第二分组数据中最后一组分组数据。
在本实施例中,基于上述分组数据的填充过程可知,最后填充的分组数据可能是一组分组数据,也可能是两组分组数据,在本示例中,可以获取第二分组数据中最后一组分组数据。
步骤1102:基于所述最后一组分组数据的消息字对所述最后一组分组数据进行迭代压缩处理,得到第二输出值。
在获取到第二分组数据中最后一组分组数据之后,则可以最后一组分组数据的消息字对最后一组分组数据进行迭代压缩处理,得到第二输出值。
步骤1103:对每次填充的分组数据迭代执行所述获取所述第二分组数据中最后一组分组数据,至基于所述最后一组分组数据的消息字对所述最后一组分组数据进行迭代压缩处理,得到第二输出值的步骤,得到N个第二输出值。
可以理解地,由于针对数据长度未达到预设分组长度的分组数据进行了哈希运算次数的填充,那么,针对每次填充的分组数据均需进行一次输出值的计算,即针对每次填充的分组数据,可以迭代执行步骤1101和步骤1102,以得到N个第二输出值。例如,进行处理的数据为上述填充的数据部分,填充时根据不同的情况,有的会填充一组数据,有的会填充两组数据,这里均取最后一组(若为两组则取第二组,若为1组则直接取这一组)的迭代输出结果进行后续计算,最后一组的迭代结果记为Vo_last_m,m<=H_num。
在得到第一输出值和N个第二输出值之后,执行步骤105。
步骤105:调用所述派生函数计算子模块对所述第一输出值和N个所述第二输出值进行处理,生成SM2密码算法的所述第二数据长度的密钥派生函数。
在得到第一输出值和N个第二输出值之后,则可以调用派生函数计算子模块对第一输出值和N个第二输出值进行处理,生成SM2密码算法的第二数据长度的密钥派生函数。对于该实现过程可以结合图12进行如下详细描述。
参照图12,示出了本申请实施例提供的另一种密钥派生函数生成方法的步骤流程图。如图12所示,该密钥派生函数生成方法可以包括:步骤1201和步骤1202。
步骤1201:对所述第一输出值和N个所述第二输出值分别进行哈希处理,得到N个哈希值。
在本申请实施例中,在得到第一输出值和N个第二输出值之后,则可以对第一输出值和N个第二输出值分别进行哈希处理,得到N个哈希值。例如,第一输出值为a,N=3,3个第二输出值分别为b、c和d,则可以对a和b进行哈希处理,得到一个哈希值。对a和c进行哈希处理,得到第二个哈希值。对a和d进行哈希处理,得到第三个哈希值等。
可以理解地,上述示例仅是为了更好地理解本申请实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。
在对第一输出值和N个第二输出值分别进行哈希处理,得到N个哈希值之后,执行步骤1202。
步骤1202:对所述N个哈希值进行组合,生成SM2密码算法的所述第二数据长度的密钥派生函数。
在对第一输出值和N个第二输出值分别进行哈希处理,得到N个哈希值之后,则可以对N个哈希值进行组合,从而可以生成SM2密码算法的第二数据长度的密钥派生函数。例如,哈希运算次数H_num为3,经过计算可以得到三个哈希值,分别为:Ha1=Vo_last_1⊕Vo_z_num_reg,Ha2=Vo_last_2⊕Vo_z_num_reg,Ha3=Vo_last_3⊕Vo_z_num_reg。进而,可以将这三个结果组合在一起,即为派生密钥,派生密钥K=Ha1||Ha2||Ha3,其中,||为连接符。
可以理解地,上述示例仅是为了更好地理解本申请实施例的技术方案而列举的示例,不作为对本实施例的唯一限制。
本申请实施例提供的密钥派生函数的生成过程可以如图13所示,比特串Z只需要连续输入一次,减少了总的计算量和计算时间,具体的处理过程见后续步骤。与此同时,比特串Z只进行一次SM3计算,而后续的填充数据又是没有明显规律的,生成派生密钥K的子函数Ha的时间也不是均匀的,这都导致功耗曲线的特征平缓,难以获取有效信息,提升了抗侧信道攻击能力。
对于SM2密钥派生计算的硬件处理时序可以如图20所示。图20中,Clock表示密钥派生函数计算的时间轴。din表示输入数据,如ct计算值等。ha表示计算得到的哈希比特串。KEY表示对ha_1、ha_2、ha_3组合生成的密钥派生函数。如图20所示,该过程只需要对密钥比特串数据进行一次计算,之后将中间参数寄存,在完成ct值的计算后,再进行简单的计算即可生成ha1、ha2、ha3及KEY,使用这种方式减少了运算时间,特别是密钥比特串本身长度较长,同时所需生成的派生密钥长度较长时,可以显著的降低计算时间。
本申请实施例对SM3算法进行了改进,改进的SM3算法可以如图14所示,数据输入分为两种输入数据格式:1、派生函数格式:用于在SM2算法中的密钥派生函数的计算,包括比特串数据Z,比特串长度Zlen,所需密钥数据长度Klen,输出多个摘要值进而组成生成派生密钥K。2、标准数据格式:用于标准的SM3算法计算,包括输入消息message和消息长度Mlen,输入消息计算后只生成一个摘要值(此过程不在本实施例的保护范围内,本实施例对此不再加以详细描述)。
本申请实施例提供的基于芯片的SM2算法密码处理方法,通过调用SM2算法模块获取用户输入的比特串数据和所需密钥数据的第二数据长度。基于预设分组长度对比特串数据进行分组,得到分组数据,预设分组长度是预设哈希算法的分组长度。基于比特串数据的第一数据长度和哈希运算次数,对分组数据中数据长度未达到预设分组长度的分组数据进行哈希运算次数的填充处理,生成第二分组数据,哈希运算次数是通过第二数据长度和预设哈希算法的算法长度计算得到的。基于第一分组数据的消息字对第一分组数据进行处理,生成第一输出值,并基于第二分组数据的消息字对第二分组数据进行N次处理,生成N个第二输出值,第一分组数据是指所有分组数据中数据长度达到预设分组长度的分组数据,N为哈希运算次数,且N为正整数。对第一输出值和N个第二输出值进行处理,生成SM2密码算法的第二数据长度的密钥派生函数。本申请实施例通过对输入的比特串数据进行分组及数据填充,就可以计算出哈希值并组合成派生密钥,此过程中,比特串数据仅需输入一次,能够减少总的计算量和计算时间。同时,比特串数据只进行一次哈希计算,而后续的填充数据又是没有明显规律的,生成派生密钥的子函数的时间也不是均匀的,这都导致功耗曲线的特征平缓,难以获取有效信息,提升了抗侧信道攻击能力。
参照图21,示出了本申请实施例提供的一种基于芯片的SM2算法密码处理装置的结构示意图,该芯片内设置有SM2算法模块,所述SM2算法模块包括:数据读取子模块、分组子模块、数据填充子模块、分组数据处理子模块和派生函数计算子模块。如图21所示,该基于芯片的SM2算法密码处理装置2100可以包括以下模块:
比特串数据获取模块2110,用于调用所述数据读取子模块读取用户输入的比特串数据和所需密钥数据的第二数据长度;
分组数据获取模块2120,用于调用所述分组子模块基于预设分组长度对所述比特串数据进行分组,得到分组数据,所述预设分组长度是预设哈希算法的分组长度;
分组数据填充模块2130,用于调用所述数据填充子模块基于所述比特串数据的第一数据长度和哈希运算次数,对所述分组数据中数据长度未达到预设分组长度的分组数据进行所述哈希运算次数的填充处理,生成第二分组数据;所述哈希运算次数是通过所述第二数据长度和所述预设哈希算法的算法长度计算得到的;
输出值生成模块2140,用于调用所述分组数据处理子模块基于第一分组数据的消息字对所述第一分组数据进行处理,生成第一输出值,并基于所述第二分组数据的消息字对所述第二分组数据进行N次处理,生成N个第二输出值;所述第一分组数据是指所有所述分组数据中数据长度达到所述预设分组长度的分组数据,N为所述哈希运算次数,且N为正整数;
密钥派生函数生成模块2150,用于调用所述派生函数计算子模块对所述第一输出值和N个所述第二输出值进行处理,生成SM2密码算法的所述第二数据长度的密钥派生函数。
可选地,所述分组数据填充模块包括:
可分组个数计算单元,用于基于所述第一数据长度和所述预设分组长度,计算得到所述比特串数据的可分组个数和剩余数据长度;
ct计数值确定单元,用于基于所述哈希运算次数,确定SM2密码算法的ct计数值;
第二分组数据生成单元,用于在所述分组数据的分组个数大于所述可分组个数的情况下,基于所述剩余数据长度和当前哈希运算次数对应的ct计数值,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据。
可选地,所述第二分组数据生成单元包括:
预置长度计算子单元,用于基于所述预设分组长度、所述ct计数值的ct长度、1比特长度的第一设定数值和指定数据长度的指定数据,计算得到第一预置长度和第二预置长度;其中,所述第一预置长度大于所述第二预置长度,所述指定数据包括:ct长度的长度信息和比特串长度的长度信息;
第二分组数据计算子单元,用于基于所述剩余数据长度与所述第一预置长度和所述第二预置长度之间的大小关系,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据。
可选地,所述预置长度计算子单元包括:
第一长度计算子单元,用于计算得到所述预设分组长度与所述ct长度、1和所述指定数据长度之间的第一差值,并将该第一差值作为所述第一预置长度;
第二长度计算子单元,用于计算得到所述预设分组长度与所述ct长度之间的第二差值,并将该第二差值作为所述第二预置长度。
可选地,所述第二分组数据计算子单元包括:
差值长度获取子单元,用于在所述剩余数据长度小于或等于所述第二预置长度的情况下,计算所述预设分组长度与所述剩余数据长度之间的差值,得到差值长度;
第二分组数据获取子单元,用于在所述数据长度未达到预设分组长度的分组数据中依次填充所述ct计数值、第一设定数值、所述差值长度的设定数值和所述指定数据,以得到所述第二分组数据。
可选地,所述第二分组数据计算子单元包括:
第一填充子单元,用于在所述剩余数据长度等于所述第一预置长度的情况下,在所述数据长度未达到预设分组长度的分组数据中填充所述ct计数值;
第二填充子单元,用于在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第三分组数据,并将填充的分组数据和所述第三分组数据作为所述第二分组数据,所述第三分组数据依次包括:第一设定数值、第一长度的第二设定数值和所述指定数据,所述第一长度=所述预设分组长度-1-所述指定数据长度。
可选地,所述第二分组数据计算子单元包括:
第三填充子单元,用于在所述剩余数据长度大于所述第二预置长度,且小于所述第一预置长度的情况下,在所述数据长度未达到预设分组长度的分组数据中依次填充所述ct计数值、第一设定数值和第二长度的第三设定数值;所述第二长度=所述预设分组长度-所述ct长度-1;
第四填充子单元,用于在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第四分组数据,并将填充的分组数据和所述第四分组数据作为所述第二分组数据,所述第四分组数据依次包括:第三长度的所述第三设定数值和所述指定数据,所述第三长度=所述预设分组长度-所述指定数据长度。
可选地,所述第二分组数据计算子单元包括:
第五填充子单元,用于在所述剩余数据长度大于所述第一预置长度,且小于所述预设分组长度的情况下,在所述数据长度未达到预设分组长度的分组数据中填充第四长度的ct计数值,所述第四长度=所述预设分组长度-所述剩余数据长度;
第六填充子单元,用于在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第五分组数据,并将填充的分组数据和所述第五分组数据作为所述第二分组数据,所述第五分组数据依次包括:第五长度的ct计数值、第一设定数值、第六长度的第四设定数值和所述指定数据,所述第五长度=所述ct长度-所述第四长度,所述第六长度=所述预设分组长度-1-所述指定数据长度。
可选地,所述输出值生成模块包括:
消息字数量获取单元,用于获取所述预设哈希算法所需的消息字数量;
第一输出值获取单元,用于基于所述第一分组数据的消息字对所述第一分组数据进行组内迭代压缩及组间迭代压缩处理,得到所述第一输出值。
可选地,所述第一输出值获取单元包括:
第一输出结果获取子单元,用于采用组内迭代压缩方式,基于所述第一分组数据的消息字对每组所述第一分组数据进行设定轮次的迭代压缩,得到当前第一分组数据的输出结果;
第二输出结果获取子单元,用于基于所述输出结果和下一组第一分组数据的消息字对下一组第一分组数据进行设定轮次的迭代压缩,得到下一组第一分组数据的输出结果;
目标输出结果获取子单元,用于在完成所有第一分组数据的迭代压缩之后,得到最终的目标输出结果;
第一输出值获取子单元,用于将所述目标输出结果和最后一组第一分组数据的轮迭代函数的输入值进行异或处理,得到所述第一输出值。
可选地,所述输出值生成模块包括:
分组数据获取单元,用于获取所述第二分组数据中最后一组分组数据;
第二输出值获取单元,用于基于所述最后一组分组数据的消息字对所述最后一组分组数据进行迭代压缩处理,得到第二输出值;
N个输出值获取单元,用于对每次填充的分组数据迭代执行所述分组数据获取单元和所述第二输出值获取单元,得到N个第二输出值。
可选地,所述密钥派生函数生成模块包括:
哈希值获取单元,用于对所述第一输出值和N个所述第二输出值分别进行哈希处理,得到N个哈希值;
密钥派生函数生成单元,用于对所述N个哈希值进行组合,生成SM2密码算法的所述第二数据长度的密钥派生函数。
本申请实施例提供的基于芯片的SM2算法密码处理装置,通过调用SM2算法模块获取用户输入的比特串数据和所需密钥数据的第二数据长度。基于预设分组长度对比特串数据进行分组,得到分组数据,预设分组长度是预设哈希算法的分组长度。基于比特串数据的第一数据长度和哈希运算次数,对分组数据中数据长度未达到预设分组长度的分组数据进行哈希运算次数的填充处理,生成第二分组数据,哈希运算次数是通过第二数据长度和预设哈希算法的算法长度计算得到的。基于第一分组数据的消息字对第一分组数据进行处理,生成第一输出值,并基于第二分组数据的消息字对第二分组数据进行N次处理,生成N个第二输出值,第一分组数据是指所有分组数据中数据长度达到预设分组长度的分组数据,N为哈希运算次数,且N为正整数。对第一输出值和N个第二输出值进行处理,生成SM2密码算法的第二数据长度的密钥派生函数。本申请实施例通过对输入的比特串数据进行分组及数据填充,就可以计算出哈希值并组合成派生密钥,此过程中,比特串数据仅需输入一次,能够减少总的计算量和计算时间。同时,比特串数据只进行一次哈希计算,而后续的填充数据又是没有明显规律的,生成派生密钥的子函数的时间也不是均匀的,这都导致功耗曲线的特征平缓,难以获取有效信息,提升了抗侧信道攻击能力。
另外地,本申请实施例还提供了一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述基于芯片的SM2算法密码处理方法。
图22示出了本发明实施例的一种电子设备2200的结构示意图。如图22所示,电子设备2200包括中央处理单元(CPU)2201,其可以根据存储在只读存储器(ROM)2202中的计算机程序指令或者从存储单元2208加载到随机访问存储器(RAM)2203中的计算机程序指令,来执行各种适当的动作和处理。在RAM2203中,还可存储电子设备2200操作所需的各种程序和数据。CPU2201、ROM2202以及RAM2203通过总线2204彼此相连。输入/输出(I/O)接口2205也连接至总线2204。
电子设备2200中的多个部件连接至I/O接口2205,包括:输入单元2206,例如键盘、鼠标、麦克风等;输出单元2207,例如各种类型的显示器、扬声器等;存储单元2208,例如磁盘、光盘等;以及通信单元2209,例如网卡、调制解调器、无线通信收发机等。通信单元2209允许电子设备2200通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
上文所描述的各个过程和处理,可由处理单元2201执行。例如,上述任一实施例的方法可被实现为计算机软件程序,其被有形地包含于计算机可读介质,例如存储单元2208。在一些实施例中,计算机程序的部分或者全部可以经由ROM2202和/或通信单元2209而被载入和/或安装到电子设备2200上。当计算机程序被加载到RAM2203并由CPU2201执行时,可以执行上文描述的方法中的一个或多个动作。
本申请实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述基于芯片的SM2算法密码处理方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(RandomAccess Memory,简称RAM)、磁碟或者光盘等。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (14)
1.一种基于芯片的SM2算法密码处理方法,其特征在于,所述芯片内设置有SM2算法模块,所述SM2算法模块包括:数据读取子模块、分组子模块、数据填充子模块、分组数据处理子模块和派生函数计算子模块,所述方法包括:
调用所述数据读取子模块读取用户输入的比特串数据和所需密钥数据的第二数据长度;
调用所述分组子模块基于预设分组长度对所述比特串数据进行分组,得到分组数据,所述预设分组长度是预设哈希算法的分组长度;
调用所述数据填充子模块基于所述比特串数据的第一数据长度和哈希运算次数,对所述分组数据中数据长度未达到预设分组长度的分组数据进行所述哈希运算次数的填充处理,生成第二分组数据;所述哈希运算次数是通过所述第二数据长度和所述预设哈希算法的算法长度计算得到的;
调用所述分组数据处理子模块基于第一分组数据的消息字对所述第一分组数据进行处理,生成第一输出值,并基于所述第二分组数据的消息字对所述第二分组数据进行N次处理,生成N个第二输出值;所述第一分组数据是指所有所述分组数据中数据长度达到所述预设分组长度的分组数据,N为所述哈希运算次数,且N为正整数;
调用所述派生函数计算子模块对所述第一输出值和N个所述第二输出值进行处理,生成SM2密码算法的所述第二数据长度的密钥派生函数;
所述对所述第一输出值和N个所述第二输出值进行处理,生成SM2密码算法的所述第二数据长度的密钥派生函数,包括:
对所述第一输出值和N个所述第二输出值分别进行哈希处理,得到N个哈希值;
对所述N个哈希值进行组合,生成SM2密码算法的所述第二数据长度的密钥派生函数。
2.根据权利要求1所述的方法,其特征在于,所述基于所述比特串数据的第一数据长度和哈希运算次数,对所述分组数据中数据长度未达到预设分组长度的分组数据进行所述哈希运算次数的填充处理,生成第二分组数据,包括:
基于所述第一数据长度和所述预设分组长度,计算得到所述比特串数据的可分组个数和剩余数据长度;
基于所述哈希运算次数,确定SM2密码算法的ct计数值;
在所述分组数据的分组个数大于所述可分组个数的情况下,基于所述剩余数据长度和当前哈希运算次数对应的ct计数值,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据。
3.根据权利要求2所述的方法,其特征在于,所述基于所述剩余数据长度和当前哈希运算次数对应的ct计数值,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据,包括:
基于所述预设分组长度、所述ct计数值的ct长度、1比特长度的第一设定数值和指定数据长度的指定数据,计算得到第一预置长度和第二预置长度;其中,所述第一预置长度大于所述第二预置长度,所述指定数据包括:ct长度的长度信息和比特串长度的长度信息;
基于所述剩余数据长度与所述第一预置长度和所述第二预置长度之间的大小关系,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据。
4.根据权利要求3所述的方法,其特征在于,所述基于所述ct计数值的ct长度、1比特长度的设定数值和指定数据长度,计算得到第一预置长度和第二预置长度,包括:
计算得到所述预设分组长度与所述ct长度、1和所述指定数据长度之间的第一差值,并将该第一差值作为所述第一预置长度;
计算得到所述预设分组长度与所述ct长度之间的第二差值,并将该第二差值作为所述第二预置长度。
5.根据权利要求3所述的方法,其特征在于,所述基于所述剩余数据长度与所述第一预置长度和所述第二预置长度之间的大小关系,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据,包括:
在所述剩余数据长度小于或等于所述第二预置长度的情况下,计算所述预设分组长度与所述剩余数据长度之间的差值,得到差值长度;
在所述数据长度未达到预设分组长度的分组数据中依次填充所述ct计数值、第一设定数值、所述差值长度的设定数值和所述指定数据,以得到所述第二分组数据。
6.根据权利要求3所述的方法,其特征在于,所述基于所述剩余数据长度与所述第一预置长度和所述第二预置长度之间的大小关系,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据,包括:
在所述剩余数据长度等于所述第一预置长度的情况下,在所述数据长度未达到预设分组长度的分组数据中填充所述ct计数值;
在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第三分组数据,并将填充的分组数据和所述第三分组数据作为所述第二分组数据,所述第三分组数据依次包括:第一设定数值、第一长度的第二设定数值和所述指定数据,所述第一长度=所述预设分组长度-1-所述指定数据长度。
7.根据权利要求3所述的方法,其特征在于,所述基于所述剩余数据长度与所述第一预置长度和所述第二预置长度之间的大小关系,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据,包括:
在所述剩余数据长度大于所述第二预置长度,且小于所述第一预置长度的情况下,在所述数据长度未达到预设分组长度的分组数据中依次填充所述ct计数值、第一设定数值和第二长度的第三设定数值;所述第二长度=所述预设分组长度-所述ct长度-1;
在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第四分组数据,并将填充的分组数据和所述第四分组数据作为所述第二分组数据,所述第四分组数据依次包括:第三长度的所述第三设定数值和所述指定数据,所述第三长度=所述预设分组长度-所述指定数据长度。
8.根据权利要求3所述的方法,其特征在于,所述基于所述剩余数据长度与所述第一预置长度和所述第二预置长度之间的大小关系,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据,包括:
在所述剩余数据长度大于所述第一预置长度,且小于所述预设分组长度的情况下,在所述数据长度未达到预设分组长度的分组数据中填充第四长度的ct计数值,所述第四长度=所述预设分组长度-所述剩余数据长度;
在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第五分组数据,并将填充的分组数据和所述第五分组数据作为所述第二分组数据,所述第五分组数据依次包括:第五长度的ct计数值、第一设定数值、第六长度的第四设定数值和所述指定数据,所述第五长度=所述ct长度-所述第四长度,所述第六长度=所述预设分组长度-1-所述指定数据长度。
9.根据权利要求1所述的方法,其特征在于,所述基于第一分组数据的消息字对所述第一分组数据进行处理,生成第一输出值,包括:
获取所述预设哈希算法所需的消息字数量;
基于所述第一分组数据的消息字对所述第一分组数据进行组内迭代压缩及组间迭代压缩处理,得到所述第一输出值。
10.根据权利要求9所述的方法,其特征在于,所述基于所述第一分组数据的消息字对所述第一分组数据进行组内迭代压缩及组间迭代压缩处理,得到所述第一输出值,包括:
采用组内迭代压缩方式,基于所述第一分组数据的消息字对每组所述第一分组数据进行设定轮次的迭代压缩,得到当前第一分组数据的输出结果;
基于所述输出结果和下一组第一分组数据的消息字对下一组第一分组数据进行设定轮次的迭代压缩,得到下一组第一分组数据的输出结果;
在完成所有第一分组数据的迭代压缩之后,得到最终的目标输出结果;
将所述目标输出结果和最后一组第一分组数据的轮迭代函数的输入值进行异或处理,得到所述第一输出值。
11.根据权利要求1所述的方法,其特征在于,所述基于所述第二分组数据的消息字对所述第二分组数据进行N次处理,生成N个第二输出值,包括:
获取所述第二分组数据中最后一组分组数据;
基于所述最后一组分组数据的消息字对所述最后一组分组数据进行迭代压缩处理,得到第二输出值;
对每次填充的分组数据迭代执行所述获取所述第二分组数据中最后一组分组数据,至基于所述最后一组分组数据的消息字对所述最后一组分组数据进行迭代压缩处理,得到第二输出值的步骤,得到N个第二输出值。
12.一种基于芯片的SM2算法密码处理装置,其特征在于,所述芯片内设置有SM2算法模块,所述SM2算法模块包括:数据读取子模块、分组子模块、数据填充子模块、分组数据处理子模块和派生函数计算子模块,所述装置包括:
比特串数据获取模块,用于调用所述数据读取子模块读取用户输入的比特串数据和所需密钥数据的第二数据长度;
分组数据获取模块,用于调用所述分组子模块基于预设分组长度对所述比特串数据进行分组,得到分组数据,所述预设分组长度是预设哈希算法的分组长度;
分组数据填充模块,用于调用所述数据填充子模块基于所述比特串数据的第一数据长度和哈希运算次数,对所述分组数据中数据长度未达到预设分组长度的分组数据进行所述哈希运算次数的填充处理,生成第二分组数据;所述哈希运算次数是通过所述第二数据长度和所述预设哈希算法的算法长度计算得到的;
输出值生成模块,用于调用所述分组数据处理子模块基于第一分组数据的消息字对所述第一分组数据进行处理,生成第一输出值,并基于所述第二分组数据的消息字对所述第二分组数据进行N次处理,生成N个第二输出值;所述第一分组数据是指所有所述分组数据中数据长度达到所述预设分组长度的分组数据,N为所述哈希运算次数,且N为正整数;
密钥派生函数生成模块,用于调用所述派生函数计算子模块对所述第一输出值和N个所述第二输出值进行处理,生成SM2密码算法的所述第二数据长度的密钥派生函数;
所述密钥派生函数生成模块包括:
哈希值获取单元,用于对所述第一输出值和N个所述第二输出值分别进行哈希处理,得到N个哈希值;
密钥派生函数生成单元,用于对所述N个哈希值进行组合,生成SM2密码算法的所述第二数据长度的密钥派生函数。
13.一种电子设备,其特征在于,包括:
存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至11中任一项所述的基于芯片的SM2算法密码处理方法。
14.一种可读存储介质,其特征在于,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行权利要求1至11中任一项所述的基于芯片的SM2算法密码处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311639181.8A CN117353926B (zh) | 2023-12-01 | 2023-12-01 | 一种基于芯片的sm2算法密码处理方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311639181.8A CN117353926B (zh) | 2023-12-01 | 2023-12-01 | 一种基于芯片的sm2算法密码处理方法、装置及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117353926A CN117353926A (zh) | 2024-01-05 |
CN117353926B true CN117353926B (zh) | 2024-02-27 |
Family
ID=89371310
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311639181.8A Active CN117353926B (zh) | 2023-12-01 | 2023-12-01 | 一种基于芯片的sm2算法密码处理方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117353926B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102761412A (zh) * | 2011-04-27 | 2012-10-31 | 航天信息股份有限公司 | p元域SM2椭圆曲线公钥加密、解密与加解密混合系统 |
CN102930051A (zh) * | 2012-11-16 | 2013-02-13 | 上海交通大学 | 基于等长划分和随机填充的安全最近邻查询的方法及系统 |
CN104852806A (zh) * | 2015-05-15 | 2015-08-19 | 飞天诚信科技股份有限公司 | 一种根据密钥类型进行签名的实现方法 |
CN112104449A (zh) * | 2020-08-20 | 2020-12-18 | 郑州信大捷安信息技术股份有限公司 | 一种用于哈希算法的sdk |
CN113468575A (zh) * | 2021-07-22 | 2021-10-01 | 东北大学 | 一种支持访问模式隐藏的密态流式数据检索系统及方法 |
CN113569223A (zh) * | 2021-06-30 | 2021-10-29 | 珠海晶通科技有限公司 | 一种离线设备的安全认证方法 |
CN113660087A (zh) * | 2021-07-06 | 2021-11-16 | 浙江传媒学院 | 一种基于有限域的sm9标识密码算法硬件实现系统 |
CN114491575A (zh) * | 2021-12-20 | 2022-05-13 | 苏州国芯科技股份有限公司 | 一种sm2运算方法、系统、设备及计算机可读存储介质 |
CN114513311A (zh) * | 2022-02-25 | 2022-05-17 | 上海芯钛信息科技有限公司 | 一种改进消息认证码算法的方法、装置、设备和介质 |
CN114640454A (zh) * | 2022-04-02 | 2022-06-17 | 中山大学 | 一种后量子密码Crystals Kyber协议的密码系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230064845A1 (en) * | 2021-08-31 | 2023-03-02 | Pensando Systems Inc. | Methods and systems for orchestrating network flow tracing within packet processing pipelines across multiple network appliances |
-
2023
- 2023-12-01 CN CN202311639181.8A patent/CN117353926B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102761412A (zh) * | 2011-04-27 | 2012-10-31 | 航天信息股份有限公司 | p元域SM2椭圆曲线公钥加密、解密与加解密混合系统 |
CN102930051A (zh) * | 2012-11-16 | 2013-02-13 | 上海交通大学 | 基于等长划分和随机填充的安全最近邻查询的方法及系统 |
CN104852806A (zh) * | 2015-05-15 | 2015-08-19 | 飞天诚信科技股份有限公司 | 一种根据密钥类型进行签名的实现方法 |
CN112104449A (zh) * | 2020-08-20 | 2020-12-18 | 郑州信大捷安信息技术股份有限公司 | 一种用于哈希算法的sdk |
CN113569223A (zh) * | 2021-06-30 | 2021-10-29 | 珠海晶通科技有限公司 | 一种离线设备的安全认证方法 |
CN113660087A (zh) * | 2021-07-06 | 2021-11-16 | 浙江传媒学院 | 一种基于有限域的sm9标识密码算法硬件实现系统 |
CN113468575A (zh) * | 2021-07-22 | 2021-10-01 | 东北大学 | 一种支持访问模式隐藏的密态流式数据检索系统及方法 |
CN114491575A (zh) * | 2021-12-20 | 2022-05-13 | 苏州国芯科技股份有限公司 | 一种sm2运算方法、系统、设备及计算机可读存储介质 |
CN114513311A (zh) * | 2022-02-25 | 2022-05-17 | 上海芯钛信息科技有限公司 | 一种改进消息认证码算法的方法、装置、设备和介质 |
CN114640454A (zh) * | 2022-04-02 | 2022-06-17 | 中山大学 | 一种后量子密码Crystals Kyber协议的密码系统 |
Also Published As
Publication number | Publication date |
---|---|
CN117353926A (zh) | 2024-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10009170B2 (en) | Apparatus and method for providing Feistel-based variable length block cipher | |
CN107395368B (zh) | 无介质环境中的数字签名方法及解封装方法与解密方法 | |
US9787475B2 (en) | Device, method, and program for message authentication tag generation | |
US9762384B2 (en) | Generation and verification of alternate data having specific format | |
US9054870B2 (en) | Information security based on eigendecomposition | |
CN111130804A (zh) | 一种基于sm2算法的协同签名方法及装置、系统、介质 | |
JP2012506191A (ja) | 暗号鍵を生成する方法、ネットワーク及びコンピュータプログラム | |
US11722313B2 (en) | State synchronization for post-quantum signing facilities | |
CN111010266B (zh) | 消息的加解密、读写方法、装置、计算机设备和存储介质 | |
CN110995415A (zh) | 一种基于md5算法的加密算法 | |
CN112948867A (zh) | 加密报文的生成与解密方法、装置及电子设备 | |
CN117353926B (zh) | 一种基于芯片的sm2算法密码处理方法、装置及设备 | |
CN115632782B (zh) | 基于sm4计数器模式的随机数生成方法、系统及设备 | |
CN114826560B (zh) | 一种轻量级分组密码cref实现方法及系统 | |
JP2011259389A (ja) | メッセージ認証子生成装置、メッセージ認証子検証装置、メッセージ認証子生成方法、メッセージ認証子検証方法、およびプログラム | |
CN115834058A (zh) | 通信加密方法、装置、计算机设备 | |
US20220123949A1 (en) | Side channel protection for xmss signature function | |
Orhanou et al. | Analytical evaluation of the stream cipher ZUC | |
Somaiya et al. | Implementation and evaluation of EMAES–A hybrid encryption algorithm for sharing multimedia files with more security and speed | |
CN112311527A (zh) | 一种主密钥变换为多项式表格子密钥查表的加密方法 | |
CN112822026B (zh) | 数字签名方法、装置及系统 | |
CN116303551B (zh) | 隐匿查询方法及设备 | |
CN116318738B (zh) | 签名方法、系统、电子设备及存储介质 | |
CN108933950A (zh) | 终端标识确定方法及装置、计算机设备及存储介质 | |
CN115664651B (zh) | 基于sm9的在线离线加解密方法、系统、设备及介质 |
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 |