本技术涉及密码算法,尤其涉及一种基于芯片的sm2算法密码处理方法、装置及设备。
背景技术:
1、sm2是可分为密钥对生成、签名生成、签名验签、消息加密和消息解密共5个部分,分别对应不同的应用场景。而在算法的实现过程中,则会使用多个子函数(密码杂凑函数hash、密钥派生函数kdf、随机数生成函数等)及基本运算单元(包括点乘、点加、倍点、模加、模减、模乘及模逆等等),每一部分的计算效率/性能都影响着sm2算法的性能。
2、现有技术中,通常是按照协议规定逐次进行 ha1 ha2 ……的计算,之后把每次的计算结果组合生成k。由于本身hash算法的计算时间较长,这会导致密钥派生函数计算时间的显著增加,特别是在比特串的长度和所需生成派生密钥的数量都比较大时,导致sm2的性能下降。同时,比特串多次进行哈希计算,大量重复的数据反复进行计算,在进行侧信道的功耗攻击时,很容易获取功耗变化规律,进而较容易的获取相关信息,产生很大的安全隐患,同时,多次计算会增加芯片的功耗。
技术实现思路
1、本技术实施例提供一种基于芯片的sm2算法密码处理方法、装置及设备,以解决现有生成拍摄密钥的方式,会导致sm2的性能下降,容易遭到侧信道攻击,且会增加芯片的功耗的问题。
2、为了解决上述技术问题,本技术实施例是这样实现的:
3、第一方面,本技术实施例提供了一种基于芯片的sm2算法密码处理方法,所述芯片内设置有sm2算法模块,所述sm2算法模块包括:数据读取子模块、分组子模块、数据填充子模块、分组数据处理子模块和派生函数计算子模块,所述方法包括:
4、调用所述数据读取子模块读取用户输入的比特串数据和所需密钥数据的第二数据长度;
5、调用所述分组子模块基于预设分组长度对所述比特串数据进行分组,得到分组数据,所述预设分组长度是预设哈希算法的分组长度;
6、调用所述数据填充子模块基于所述比特串数据的第一数据长度和哈希运算次数,对所述分组数据中数据长度未达到预设分组长度的分组数据进行所述哈希运算次数的填充处理,生成第二分组数据;所述哈希运算次数是通过所述第二数据长度和所述预设哈希算法的算法长度计算得到的;
7、调用所述分组数据处理子模块基于第一分组数据的消息字对所述第一分组数据进行处理,生成第一输出值,并基于所述第二分组数据的消息字对所述第二分组数据进行n次处理,生成n个第二输出值;所述第一分组数据是指所有所述分组数据中数据长度达到所述预设分组长度的分组数据,n为所述哈希运算次数,且n为正整数;
8、调用所述派生函数计算子模块对所述第一输出值和n个所述第二输出值进行处理,生成sm2密码算法的所述第二数据长度的密钥派生函数。
9、可选地,所述基于所述比特串数据的第一数据长度和哈希运算次数,对所述分组数据中数据长度未达到预设分组长度的分组数据进行所述哈希运算次数的填充处理,生成第二分组数据,包括:
10、基于所述第一数据长度和所述预设分组长度,计算得到所述比特串数据的可分组个数和剩余数据长度;
11、基于所述哈希运算次数,确定sm2密码算法的ct计数值;
12、在所述分组数据的分组个数大于所述可分组个数的情况下,基于所述剩余数据长度和当前哈希运算次数对应的ct计数值,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据。
13、可选地,所述基于所述剩余数据长度和当前哈希运算次数对应的ct计数值,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据,包括:
14、基于所述预设分组长度、所述ct计数值的ct长度、1比特长度的第一设定数值和指定数据长度的指定数据,计算得到第一预置长度和第二预置长度;其中,所述第一预置长度大于所述第二预置长度,所述指定数据包括:ct长度的长度信息和比特串长度的长度信息;
15、基于所述剩余数据长度与所述第一预置长度和所述第二预置长度之间的大小关系,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据。
16、可选地,所述基于所述ct计数值的ct长度、1比特长度的设定数值和指定数据长度,计算得到第一预置长度和第二预置长度,包括:
17、计算得到所述预设分组长度与所述ct长度、1和所述指定数据长度之间的第一差值,并将该第一差值作为所述第一预置长度;
18、计算得到所述预设分组长度与所述ct长度之间的第二差值,并将该第二差值作为所述第二预置长度。
19、可选地,所述基于所述剩余数据长度与所述第一预置长度和所述第二预置长度之间的大小关系,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据,包括:
20、在所述剩余数据长度小于或等于所述第二预置长度的情况下,计算所述预设分组长度与所述剩余数据长度之间的差值,得到差值长度;
21、在所述数据长度未达到预设分组长度的分组数据中依次填充所述ct计数值、第一设定数值、所述差值长度的设定数值和所述指定数据,以得到所述第二分组数据。
22、可选地,所述基于所述剩余数据长度与所述第一预置长度和所述第二预置长度之间的大小关系,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据,包括:
23、在所述剩余数据长度等于所述第一预置长度的情况下,在所述数据长度未达到预设分组长度的分组数据中填充所述ct计数值;
24、在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第三分组数据,并将填充的分组数据和所述第三分组数据作为所述第二分组数据,所述第三分组数据依次包括:第一设定数值、第一长度的第二设定数值和所述指定数据,所述第一长度=所述预设分组长度-1-所述指定数据长度。
25、可选地,所述基于所述剩余数据长度与所述第一预置长度和所述第二预置长度之间的大小关系,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据,包括:
26、在所述剩余数据长度大于所述第二预置长度,且小于所述第一预置长度的情况下,在所述数据长度未达到预设分组长度的分组数据中依次填充所述ct计数值、第一设定数值和第二长度的第三设定数值;所述第二长度=所述预设分组长度-所述ct长度-1;
27、在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第四分组数据,并将填充的分组数据和所述第四分组数据作为所述第二分组数据,所述第四分组数据依次包括:第三长度的所述第三设定数值和所述指定数据,所述第三长度=所述预设分组长度-所述指定数据长度。
28、可选地,所述基于所述剩余数据长度与所述第一预置长度和所述第二预置长度之间的大小关系,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据,包括:
29、在所述剩余数据长度大于所述第一预置长度,且小于所述预设分组长度的情况下,在所述数据长度未达到预设分组长度的分组数据中填充第四长度的ct计数值,所述第四长度=所述预设分组长度-所述剩余数据长度;
30、在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第五分组数据,并将填充的分组数据和所述第五分组数据作为所述第二分组数据,所述第五分组数据依次包括:第五长度的ct计数值、第一设定数值、第六长度的第四设定数值和所述指定数据,所述第五长度=所述ct长度-所述第四长度,所述第六长度=所述预设分组长度-1-所述指定数据长度。
31、可选地,所述基于第一分组数据的消息字对所述第一分组数据进行处理,生成第一输出值,包括:
32、获取所述预设哈希算法所需的消息字数量;
33、基于所述第一分组数据的消息字对所述第一分组数据进行组内迭代压缩及组间迭代压缩处理,得到所述第一输出值。
34、可选地,所述基于所述第一分组数据的消息字对所述第一分组数据进行组内迭代压缩及组间迭代压缩处理,得到所述第一输出值,包括:
35、采用组内迭代压缩方式,基于所述第一分组数据的消息字对每组所述第一分组数据进行设定轮次的迭代压缩,得到当前第一分组数据的输出结果;
36、基于所述输出结果和下一组第一分组数据的消息字对下一组第一分组数据进行设定轮次的迭代压缩,得到下一组第一分组数据的输出结果;
37、在完成所有第一分组数据的迭代压缩之后,得到最终的目标输出结果;
38、将所述目标输出结果和最后一组第一分组数据的轮迭代函数的输入值进行异或处理,得到所述第一输出值。
39、可选地,所述基于所述第二分组数据的消息字对所述第二分组数据进行n次处理,生成n个第二输出值,包括:
40、获取所述第二分组数据中最后一组分组数据;
41、基于所述最后一组分组数据的消息字对所述最后一组分组数据进行迭代压缩处理,得到第二输出值;
42、对每次填充的分组数据迭代执行所述获取所述第二分组数据中最后一组分组数据,至基于所述最后一组分组数据的消息字对所述最后一组分组数据进行迭代压缩处理,得到第二输出值的步骤,得到n个第二输出值。
43、可选地,所述对所述第一输出值和n个所述第二输出值进行处理,生成sm2密码算法的所述第二数据长度的密钥派生函数,包括:
44、对所述第一输出值和n个所述第二输出值分别进行哈希处理,得到n个哈希值;
45、对所述n个哈希值进行组合,生成sm2密码算法的所述第二数据长度的密钥派生函数。
46、第二方面,本技术实施例提供了一种基于芯片的sm2算法密码处理装置,所述芯片内设置有sm2算法模块,所述sm2算法模块包括:数据读取子模块、分组子模块、数据填充子模块、分组数据处理子模块和派生函数计算子模块,所述装置包括:
47、比特串数据获取模块,用于调用所述数据读取子模块读取用户输入的比特串数据和所需密钥数据的第二数据长度;
48、分组数据获取模块,用于调用所述分组子模块基于预设分组长度对所述比特串数据进行分组,得到分组数据,所述预设分组长度是预设哈希算法的分组长度;
49、分组数据填充模块,用于调用所述数据填充子模块基于所述比特串数据的第一数据长度和哈希运算次数,对所述分组数据中数据长度未达到预设分组长度的分组数据进行所述哈希运算次数的填充处理,生成第二分组数据;所述哈希运算次数是通过所述第二数据长度和所述预设哈希算法的算法长度计算得到的;
50、输出值生成模块,用于调用所述分组数据处理子模块基于第一分组数据的消息字对所述第一分组数据进行处理,生成第一输出值,并基于所述第二分组数据的消息字对所述第二分组数据进行n次处理,生成n个第二输出值;所述第一分组数据是指所有所述分组数据中数据长度达到所述预设分组长度的分组数据,n为所述哈希运算次数,且n为正整数;
51、密钥派生函数生成模块,用于调用所述派生函数计算子模块对所述第一输出值和n个所述第二输出值进行处理,生成sm2密码算法的所述第二数据长度的密钥派生函数。
52、可选地,所述分组数据填充模块包括:
53、可分组个数计算单元,用于基于所述第一数据长度和所述预设分组长度,计算得到所述比特串数据的可分组个数和剩余数据长度;
54、ct计数值确定单元,用于基于所述哈希运算次数,确定sm2密码算法的ct计数值;
55、第二分组数据生成单元,用于在所述分组数据的分组个数大于所述可分组个数的情况下,基于所述剩余数据长度和当前哈希运算次数对应的ct计数值,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据。
56、可选地,所述第二分组数据生成单元包括:
57、预置长度计算子单元,用于基于所述预设分组长度、所述ct计数值的ct长度、1比特长度的第一设定数值和指定数据长度的指定数据,计算得到第一预置长度和第二预置长度;其中,所述第一预置长度大于所述第二预置长度,所述指定数据包括:ct长度的长度信息和比特串长度的长度信息;
58、第二分组数据计算子单元,用于基于所述剩余数据长度与所述第一预置长度和所述第二预置长度之间的大小关系,对所述数据长度未达到预设分组长度的分组数据进行填充处理,生成所述第二分组数据。
59、可选地,所述预置长度计算子单元包括:
60、第一长度计算子单元,用于计算得到所述预设分组长度与所述ct长度、1和所述指定数据长度之间的第一差值,并将该第一差值作为所述第一预置长度;
61、第二长度计算子单元,用于计算得到所述预设分组长度与所述ct长度之间的第二差值,并将该第二差值作为所述第二预置长度。
62、可选地,所述第二分组数据计算子单元包括:
63、差值长度获取子单元,用于在所述剩余数据长度小于或等于所述第二预置长度的情况下,计算所述预设分组长度与所述剩余数据长度之间的差值,得到差值长度;
64、第二分组数据获取子单元,用于在所述数据长度未达到预设分组长度的分组数据中依次填充所述ct计数值、第一设定数值、所述差值长度的设定数值和所述指定数据,以得到所述第二分组数据。
65、可选地,所述第二分组数据计算子单元包括:
66、第一填充子单元,用于在所述剩余数据长度等于所述第一预置长度的情况下,在所述数据长度未达到预设分组长度的分组数据中填充所述ct计数值;
67、第二填充子单元,用于在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第三分组数据,并将填充的分组数据和所述第三分组数据作为所述第二分组数据,所述第三分组数据依次包括:第一设定数值、第一长度的第二设定数值和所述指定数据,所述第一长度=所述预设分组长度-1-所述指定数据长度。
68、可选地,所述第二分组数据计算子单元包括:
69、第三填充子单元,用于在所述剩余数据长度大于所述第二预置长度,且小于所述第一预置长度的情况下,在所述数据长度未达到预设分组长度的分组数据中依次填充所述ct计数值、第一设定数值和第二长度的第三设定数值;所述第二长度=所述预设分组长度-所述ct长度-1;
70、第四填充子单元,用于在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第四分组数据,并将填充的分组数据和所述第四分组数据作为所述第二分组数据,所述第四分组数据依次包括:第三长度的所述第三设定数值和所述指定数据,所述第三长度=所述预设分组长度-所述指定数据长度。
71、可选地,所述第二分组数据计算子单元包括:
72、第五填充子单元,用于在所述剩余数据长度大于所述第一预置长度,且小于所述预设分组长度的情况下,在所述数据长度未达到预设分组长度的分组数据中填充第四长度的ct计数值,所述第四长度=所述预设分组长度-所述剩余数据长度;
73、第六填充子单元,用于在所述数据长度未达到预设分组长度的分组数据之后填充所述预设分组长度的第五分组数据,并将填充的分组数据和所述第五分组数据作为所述第二分组数据,所述第五分组数据依次包括:第五长度的ct计数值、第一设定数值、第六长度的第四设定数值和所述指定数据,所述第五长度=所述ct长度-所述第四长度,所述第六长度=所述预设分组长度-1-所述指定数据长度。
74、可选地,所述输出值生成模块包括:
75、消息字数量获取单元,用于获取所述预设哈希算法所需的消息字数量;
76、第一输出值获取单元,用于基于所述第一分组数据的消息字对所述第一分组数据进行组内迭代压缩及组间迭代压缩处理,得到所述第一输出值。
77、可选地,所述第一输出值获取单元包括:
78、第一输出结果获取子单元,用于采用组内迭代压缩方式,基于所述第一分组数据的消息字对每组所述第一分组数据进行设定轮次的迭代压缩,得到当前第一分组数据的输出结果;
79、第二输出结果获取子单元,用于基于所述输出结果和下一组第一分组数据的消息字对下一组第一分组数据进行设定轮次的迭代压缩,得到下一组第一分组数据的输出结果;
80、目标输出结果获取子单元,用于在完成所有第一分组数据的迭代压缩之后,得到最终的目标输出结果;
81、第一输出值获取子单元,用于将所述目标输出结果和最后一组第一分组数据的轮迭代函数的输入值进行异或处理,得到所述第一输出值。
82、可选地,所述输出值生成模块包括:
83、分组数据获取单元,用于获取所述第二分组数据中最后一组分组数据;
84、第二输出值获取单元,用于基于所述最后一组分组数据的消息字对所述最后一组分组数据进行迭代压缩处理,得到第二输出值;
85、n个输出值获取单元,用于对每次填充的分组数据迭代执行所述分组数据获取单元和所述第二输出值获取单元,得到n个第二输出值。
86、可选地,所述密钥派生函数生成模块包括:
87、哈希值获取单元,用于对所述第一输出值和n个所述第二输出值分别进行哈希处理,得到n个哈希值;
88、密钥派生函数生成单元,用于对所述n个哈希值进行组合,生成sm2密码算法的所述第二数据长度的密钥派生函数。
89、第三方面,本技术实施例提供了一种电子设备,包括:
90、存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述任一项所述的基于芯片的sm2算法密码处理方法。
91、第四方面,本技术实施例提供了一种可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述任一项所述的基于芯片的sm2算法密码处理方法。
92、在本技术实施例中,通过调用sm2算法模块获取用户输入的比特串数据和所需密钥数据的第二数据长度。基于预设分组长度对比特串数据进行分组,得到分组数据,预设分组长度是预设哈希算法的分组长度。基于比特串数据的第一数据长度和哈希运算次数,对分组数据中数据长度未达到预设分组长度的分组数据进行哈希运算次数的填充处理,生成第二分组数据,哈希运算次数是通过第二数据长度和预设哈希算法的算法长度计算得到的。基于第一分组数据的消息字对第一分组数据进行处理,生成第一输出值,并基于第二分组数据的消息字对第二分组数据进行n次处理,生成n个第二输出值,第一分组数据是指所有分组数据中数据长度达到预设分组长度的分组数据,n为哈希运算次数,且n为正整数。对第一输出值和n个第二输出值进行处理,生成sm2密码算法的第二数据长度的密钥派生函数。本技术实施例通过对输入的比特串数据进行分组及数据填充,就可以计算出哈希值并组合成派生密钥,此过程中,比特串数据仅需输入一次,能够减少总的计算量和计算时间。同时,比特串数据只进行一次哈希计算,而后续的填充数据又是没有明显规律的,生成派生密钥的子函数的时间也不是均匀的,这都导致功耗曲线的特征平缓,难以获取有效信息,提升了抗侧信道攻击能力,同时,可以降低芯片的功耗。
93、上述说明仅是本技术技术方案的概述,为了能够更清楚了解本技术的技术手段,而可依照说明书的内容予以实施,并且为了让本技术的上述和其它目的、特征和优点能够更明显易懂,以下特举本技术的具体实施方式。