CN111143893B - 一种哈希分组计算的安全实现方法及设备 - Google Patents
一种哈希分组计算的安全实现方法及设备 Download PDFInfo
- Publication number
- CN111143893B CN111143893B CN201911302812.0A CN201911302812A CN111143893B CN 111143893 B CN111143893 B CN 111143893B CN 201911302812 A CN201911302812 A CN 201911302812A CN 111143893 B CN111143893 B CN 111143893B
- Authority
- CN
- China
- Prior art keywords
- data
- cache region
- parameter
- word
- register
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- 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
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Computer Security & Cryptography (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本发明提供一种哈希分组计算的安全实现方法及设备,属于信息安全领域。本发明技术方案对哈希分组数据进行掩码计算,很好的保护了哈希数据,在整个哈希过程中,所有的哈希数据及中间过程均未出现明文值,很好的抵御能量和电磁等功耗分析,每次分组计算完后判断是否受到错误攻击,当发生错误攻击时,进行报错,可有效防止错误攻击。
Description
技术领域
本发明涉及信息安全领域,尤其涉及一种哈希分组计算的安全实现方法及设备。
背景技术
随着电子和网络科技的发展,安全芯片越来越重要。哈希算法作为安全芯片的一个重要算法,尤其在计算哈希运算消息认证码和非对称算法过程中成了算法的一个核心。哈希算法是把任意长度的输入通过散列算法变换成固定长度的输出。在现有技术中,哈希算法中使用的数据均为明文数据,由于能量攻击和错误攻击的兴起,使芯片中的哈希算法受到威胁,故亟需提供一种安全的哈希算法。
发明内容
本发明的目的是为了克服现有技术的不足,提供一种哈希分组计算的安全实现方法及设备。
本发明提供了一种哈希分组计算的安全实现方法,包括:
步骤S1:CPU对第一缓存区中的初始向量和第二缓存区中的高8字上的数据进行计算并将计算结果存储到第三缓存区中,对第四缓存区中的原始数据和所述第二缓存区中的低16字上的数据进行计算并将计算结果存储到第五缓存区;将所述第二缓存区中的低16字上的数据存储到第六缓存区中;所述第二缓存区的大小为24字;所述第五缓存区和第六缓存区的大小为64字;
步骤S2:所述CPU根据所述第五缓存区中的数据和所述第六缓存区中的数据计算生成第三数值和第三结果并分别保存在第七缓存区和第十七缓存区中,根据所述第七缓存区中的数据、所述第十七缓存区中的数据和所述第五缓存区中的数据进行计算并将计算结果顺序存储到所述第五缓存区中,根据所述第七缓存区中的数据和所述第十七缓存区中的数据、所述第六缓存区中的数据进行计算并将计算结果顺序存储到所述第六缓存区中,根据所述第五缓存区中的数据、所述第六缓存区中的数据、所述所述第七缓存区中的数据和所述第十七缓存区中的数据进行计算得到第一数值和第一结果并分别存储到第八缓存区和第十八缓存区中,根据所述第三缓存区中的数据计算生成第三数据并存储到第二十七缓存区中,用所述第二十七缓存区中的数据和第十七缓存区中的数据更新所述第八缓存区中的数据和第十八缓存区中的数据;
步骤S3:所述CPU用所述第三缓存区中的数据更新所述第七缓存区中的第三数据,用所述第二缓存区中的数据更新所述第十七缓存区中的数据,根据所述第二十七缓存区中的数据和所述第十七缓存区中的数据生成第二数值和第二结果并分别存储到第九缓存区和第十九缓存区中;根据所述第三缓存区中的数据和所述第二缓存区中的第一随机数更新所述第七缓存区中的数据和所述第十七缓存区中的数据;根据所述第十七缓存区中的数据和所述二十七缓存区中的数据更新所述第九缓存区中的数据和所述第十九缓存区中的数据;
步骤S4:所述CPU根据所述第八缓存区中的数据、所述第十八缓存区中的数据、所述第九缓存区中的数据、第十九缓存区中的数据、所述第七缓存区中的数据和所述第十七缓存区中的数据更新所述第三缓存区中的数据;
步骤S5:所述CPU判断所述第五缓存区中的数据的长度和所述第六缓存区中数据的长度是否均为64个字,是则执行步骤S6,否则执行步骤S2;
步骤S6:所述CPU用所述第三缓存区中的数据和所述第二缓存区中的高8字上的数据更新所述第一缓存区中的数据并将所述第一缓存区中的数据作为哈希分组计算结果。
进一步地,步骤S1之前还包括:所述CPU判断输入数据的长度是否为预设长度,是则按照所述预设长度对所述输入数据进行分组并将第一个分组数据作为初始向量存储到所述第一缓存区中,否则使用0将输入数据填充至预设长度,然后按照预设长度对填充后的输入数据进行分组并将第一个分组数据作为初始向量存储到所述第一缓存区中。
进一步地,所述步骤S6之后还包括:判断所述输入数据的所有分组数据是否全部处理完成,是则结束,否则将下一个未处理的分组数据作为初始向量存储到所述第一缓存区,返回步骤S1。
进一步地,所述步骤S1包括:所述CPU对第一缓存区中的初始向量和第二缓存区中的高8字上的数据进行异或运算并将计算结果存储到第三缓存区中,对所述第四缓存区中的原始数据和所述第二缓存区中的低16字上的数据进行模减运算并将计算结果存储到第五缓存区;将所述第二缓存区中的低16字上的数据存储到第六缓存区中。
进一步地,所述步骤S1之前还包括:所述CPU生成长度为24字的第一随机数并存储到所述第二缓存区中。
进一步地,所述步骤S2之前还包括:所述CPU将所述第五缓存区中的第一个空闲字作为当前位置,将所述第六缓存区中的第一个空闲字作为当前位置。
进一步地,所述步骤S2包括:
步骤S2-1:所述CPU将所述第五缓存区中当前位置向前2个字的位置上的数据作为第五函数的第一参数、所述第六缓存区中当前位置向前2个字的位置上的数据作为第五函数的第二参数调用第五函数得到输出结果并存储到所述第七缓存区中;
步骤S2-2:所述CPU用所述第七缓存区中的数据作为参数调用第六函数得到的输出结果更新所述第七缓存区中的数据,将所述第六缓存区中当前位置向前2个字的位置上的数据作为参数调用第六函数得到的输出结果更新所述第十七缓存区中的数据;
步骤S2-3:所述CPU将所述第五缓存区中当前位置向前15个字的位置上的数据作为第一参数、所述第六缓存区中当前位置向前15个字的位置上的数据作为第二参数调用第五函数得到的输出结果存储到第十缓存区中;
步骤S2-4:所述CPU用所述第五缓存区中当前位置向前15个字的位置上的数据作为参数调用第七函数得到的输出结果更新所述第十缓存区中的数据,将所述第六缓存区中当前位置向前15个字的位置上的数据作为参数调用第七函数得到输出结果并存储到第二十缓存区中;
步骤S2-5:所述CPU将所述第七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果、所述第十缓存区中的数据和第二十缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果、所述第五缓存区中当前位置向前7个字的位置上的数据、所述第五缓存区中当前位置向前16个字的位置上的数据进行模加运算并将模加结果顺序存储到所述第五缓存区中;
步骤S2-6:所述CPU将所述第十七缓存区中的数据、所述第二十缓存区中的数据、所述第六缓存区中当前位置向前7个字的位置上的数据、所述第六缓存区中当前位置向前16个字的位置上的数据进行模加运算并将模加结果并顺序存储到所述第六缓存区中;
步骤S2-7:所述CPU将所述第五缓存区中当前位置上的数据、预置常数和所述第三缓存区中第8字上的数据进行模加运算并将模加结果存储到所述第八缓存区中;
步骤S2-8:所述CPU将所述第六缓存区中当前位置上的数据与所述第二缓存区中第8字上的数字进行模加运算并将模加结果存储到所述第八缓存区中;
步骤S2-9:所述CPU用所述第三缓存区中第5字上的数据作为参数调用第八函数得到的输出结果更新所述第二十七缓存区中的数据;用所述第二缓存区中第5字上的数据作为参数调用第八函数得到的输出结果更新所述第十七缓存区中的数据;
步骤S2-10:所述CPU将所述第第二十七缓存区中的数据和第十七缓存区中的数据作为参数调用第四函数得到的输出结果与所述第八缓存区中的数据的进行模加运算并用模加结果更新所述第八缓存区中的数据;用所述第十八缓存区中的数据与所述第十七缓存区中的数据的模加运算结果更新所述第八缓存区中的数据;
步骤S2-11:所述CPU用所述第三缓存区中第5字上的数据、第6字上的数据、第7字上的数据和所述第二缓存区中第5字上的数据、第6字上的数据、第7字上的数据作为第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,调用第三函数得到的输出结果更新所述第二十七缓存区中的数据,用所述第二缓存区中第5字上的数据与第7字上的数据做异或运算的结果更新所述第十七缓存区中的数据;
步骤S2-12:所述CPU将所述第二十七缓存区中的数据和所述第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果与所述第八缓存区中的数据进行模加结果并用模加结果更新所述第八缓存区中的数据;用所述第十八缓存区中的数据与所述第十七缓存区中的数据进行模加运算并用模加结果更新所述第十八缓存区中的数据。
进一步地,所述第五函数的实现过程为:
步骤a1:所述CPU生成第二随机数并保存到第一寄存器中,对所述第一寄存器中的第二随机数进行翻倍运算得到的结果保存到第二寄存器中,对所述第一寄存器中的数据与第二参数进行异或运算得到的结果保存到第三寄存器中,对所述第一寄存器中的数据与所述第三寄存器中的数据进行与运算得到的结果保存到第四寄存器中,对所述第二寄存器中的数据与第一参数进行异或运算得到的结果保存到第五寄存器中,对所述第一寄存器中的数据与所述第五寄存器中的数据进行异或运算得到的结果保存到第六寄存器中,对所述第六寄存器中的数据与所述第二参数进行与运算得到的结果保存到第七寄存器中,对所述第四寄存器中的数据与所述第七寄存器中的数据进行异或运算得到的结果保存到第八寄存器中,对所述第二寄存器中的数据与所述第二参数进行与运算得到的结果保存到第九寄存器中,对所述第八寄存器中的数据与所述第九寄存器中的数据进行异或运算得到的结果保存到第十寄存器中;
步骤a2:所述CPU对所述第二寄存器中的数据与所述第二参数进行与运算得到的结果保存到第十一寄存器中;用所述第十一寄存器中的数据与所述第十寄存器中的数据进行异或运算的结果更新所述第十一寄存器中的数据;用所述第二寄存器中的数据与所述第一参数进行与运算的结果更新所述第二寄存器中的数据;用所述第十一寄存器中的数据与所述第二寄存器中的数据进行异或运算的结果更新所述第十一寄存器中的数据,用所述第十一寄存器中的数据的翻倍运算结果更新所述第二寄存器中的数据;
步骤a3:所述CPU判断循环次数是否为预设值,是则执行步骤a4,否则更新循环次数,返回步骤a2;
步骤a4:所述CPU将所述第五寄存器中的数据与所述第二寄存器中的数据进行异或运算的结果作为第五函数的输出结果。
进一步地,所述第六函数的实现过程为:所述CPU将参数循环右移17位的结果、循环右移19位的结果和右移10位的结果做异或运算得到的结果作为第六函数的输出结果。
进一步地,所述第七函数的实现过程为:所述CPU将参数循环右移7位的结果、循环右移18位的结果、右移3位的结果做异或运算得到的结果作为第七函数的输出结果。
进一步地,所述第四函数的实现过程为:所述CPU生成第三随机数并保存到第十二寄存器中,对第一参数与所述第十二寄存器中的随机数进行异或运算得到的结果保存到第十二寄存器中,对所述第十二寄存器中的数据与所述第十二寄存器中的数据进行非运算得到的结果保存到第十三寄存器中;对所述第十三寄存器中的数据与所述第十二寄存器中的数据进行异或运算得到的结果保存到第十四寄存器中,对所述第十二寄存器中的数据与第二参数进行异或运算得到的结果保存到第十五寄存器中,对所述第一参数与所述第十五寄存器中的数据进行异或运算得到的结果保存到第十六寄存器中,对第十六寄存器中的数据与所述第十五寄存器中的数据进行非运算得到的结果保存到第十七寄存器中,对所述第十七寄存器中的数据与所述第十四寄存器中的数据进行异或运算得到的结果作为第四函数的输出结果。
进一步地,所述第三函数的实现过程为:所述CPU根据第一参数、第二参数、第四参数、第五参数调用第一函数得到的输出结果保存到第十八寄存器中;根据第三参数、第一参数的反码、第六参数、第四参数调用第一函数得到的结果保存到第十九寄存器中;将所述第十八寄存器中的数据和所述第十九寄存器中的数据进行异或运算得到的结果作为第三函数的输出结果。
进一步地,所述第一函数的实现过程具体为:所述CPU对所述第四参数的反码与第三参数进行与运算得到的结果保存到第二十寄存器中,对所述第四参数与所述第一参数进行与运算得到的结果保存到第二十一寄存器中,对所述第二十寄存器中的数据与所述第二十一寄存器中的数据进行或运算得到的结果保存到第二十二寄存器中,对所述第二参数的反码与所述第二十二寄存器中的数据进行与运算得到的结果保存到第二十三寄存器中;对所述第四参数与所述第三参数进行与运算得到的结果保存到第二十四寄存器中,对所述第四参数的反码与所述第一参数进行与运算得到的结果保存到第二十五寄存器中,对所述第二十四寄存器中的数据与所述第二十五寄存器中的数据进行或运算得到的结果保存到第二十六寄存器中,将所述第二参数与所述第二十六寄存器中的数据进行与运算得到的结果保存到第二十七寄存器中;对所述第二十三寄存器中的数据与所述第二十七寄存器中进行或运算得到的结果作为第一函数的输出结果。
进一步地,所述第八函数的实现过程为:所述CPU将参数循环右移6位的结果、循环右移11位的结果和循环右移25位的结果进行异或运算得到的结果作为第八函数的输出结果。
进一步地,所述步骤S3包括:
步骤S3-1:所述CPU用第三缓存区中第1字上的数据作为参数调用第九函数得到的输出结果更新所述第二十七缓存区中的数据;用第二缓存区中第1字上的数据作为参数调用第九函数得到的输出结果更新所述第十七缓存区中的第三结果;
步骤S3-2:所述CPU用所述第二十七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果更新所述第九缓存区中的数据;用所述第十七缓存区中的数据更新所述第十九缓存区中的数据;
步骤S3-3:所述CPU用第三缓存区中第1字上的数据、第2字上的数据、第3字上的数据和所述第二缓存区中第1字上的数据、第2字上的数据、第3字上的数据作为第一参数、第二参数、第三参数、第四参数、第五参数、第六参数调用第二函数得到的输出结果更新所述第二十七缓存区中的数据,用所述第二缓存区中第2字上的数据更新所述第十七缓存区中的数据;
步骤S3-4:所述CPU用所述第二十七缓存区中的数据和所述第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果与所述第九缓存区中的数据进行模加运算并用模加结果更新所述第九缓存区中的数据;将所述第十九缓存区中的数据和所述第十七缓存区中的数据的进行模加运算并用模加结果更新所述第十九缓存区中的数据;
步骤S3-5:所述CPU用所述第三缓存区中第7字上的数据更新所述第三缓存区中第8字上的数据,用所述第二缓存区中第7字上的数据更新所述第二缓存区中第8字上的数据,用所述第三缓存区中中第6字上的数据更新所述第三缓存区中第7字上的数据,用所述第二缓存区中第6字上的数据更新所述第二缓存区中第7字上的数据,用所述第三缓存区中第5字上的数据更新所述第三缓存区中第6字上的数据,用所述第二缓存区中第5字上的数据更新所述第二缓存区中第6字上的数据;
步骤S3-6:所述CPU用所述第一缓存区中第4字上的数据和所述第二缓存区中第4字上的数据作为第一参数和第二参数,调用第四函数得到的输出结果更新所述第七缓存区中的数据,用所述第二缓存区中第4字上的数据更新所述第十七缓存区中的数据;
步骤S3-7:所述CPU用所述第七缓存区中的数据与所述第八缓存区中的数据的模加运算结果更新所述第三缓存区中第5字上的数据;用所述第十七缓存区中的数据与所述第十八缓存区中的数据的模加运算结果更新所述第二缓存区中第5字上的数据;
步骤S3-8:所述CPU用所述第三缓存区中第5字上的数据和所述第二缓存区中第5字上的数据作为第一参数和第二参数调用第五函数得到的输出结果更新所述第三缓存区中第5字上的数据。
进一步地,所述第九函数的实现过程为:所述CPU将参数循环右移2位的结果、循环右移13位的结果和循环右移22位的结果进行异或运算得到的结果作为第九函数的输出结果。
进一步地,所述第二函数的具体实现过程为:所述CPU根据第一参数、第二参数、第三参数、第四参数调用第一函数得到的输出结果保存到第二十八寄存器中;根据第一参数、第三参数、第四参数、第六参数调用第一函数得到的输出结果保存到第二十九寄存器中;根据第二参数、第三参数、第五参数、第六参数调用第一函数得到的输出结果保存到第三十寄存器中;将所述第二十八寄存器中的数据、所述第二十九寄存器中的数据、所述第三十寄存器中的数据进行异或运算得到输出结果。
进一步地,所述步骤S4包括:
步骤S4-1:所述CPU用所述第三缓存区中第3字上的数据更新所述第三缓存区中第4字上的数据,用所述第二缓存区中第3字上的数据更新所述第二缓存区中第4字上的数据,用所述第三缓存区中第2字上的数据更新所述第三缓存区中第3字上的数据,用所述第二缓存区中第2字上的数据更新所述第二缓存区中第3字上的数据,用所述第三缓存区中第1字上的数据更新所述第三缓存区中第2字上的数据,用所述第二缓存区中第1字上的数据更新所述第二缓存区中第2字上的数据;
步骤S4-2:所述CPU将所述第八缓存区中的数据与所述第九缓存区中的数据进行模加运算并用模加结果更新所述第三缓存区中第1字上的数据;将所述第十八缓存区中的数据与所述第十九缓存区中的数据进行模加运算并用模加结果更新所述第二缓存区中第1字上的数据;
步骤S4-3:所述CPU用所述第三缓存区中第1字上的数据和所述第二缓存区中第1字上的数据作为第一参数和第二参数调用第五函数得到的输出结果更新所述第三缓存区中第1字上的数据。
进一步地,所述步骤S5包括:
步骤S5-1:所述CPU分别判断所述第五缓存区和所述第六缓存区中的数据的长度与空闲长度之和是否为64个字,是则执行步骤S5-2,否则报错;
步骤S5-2:所述CPU判断第五缓存区和第六缓存区中的空闲长度是否均为0,是则执行步骤S6,否则返回步骤S2。
进一步地,所述步骤S6中的用第三缓存区中的数据和所述第二缓存区中的高8字上的数据更新所述第一缓存区中的数据包括:
步骤Y:所述CPU依次将所述第三缓存区中的每一个字作为第一参数、所述第二缓存区中对应位置上数据作为第二参数调用第四函数得到的输出结果保存到第三十一寄存器中,将所述第三十一寄存器中的数据与所述第一缓存区中对应位置上的数据做模加运算,并用模加结果更新所述第一缓存区中对应位置上的数据。
进一步地,所述步骤Y具体为:所述CPU将所述第三缓存区中第1字上的数据和所述第二缓存区中第1字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十二寄存器中,用所述第三十二寄存器中的数据与所述第一缓存区中第1字上的数据做模加运算的结果更新所述第一缓存区中第1字上的数据;将所述第三缓存区中第2字上的数据和所述第二缓存区中第2字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十四寄存器中,用所述第三十四寄存器中数据与所述第一缓存区中第2字上的数据做模加运算的结果更新所述第一缓存区中第2字上的数据;将所述第三缓存区中第3字上的数据和所述第二缓存区中第3字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十五寄存器中,用所述第三十五寄存器中数据与所述第一缓存区中第3字上的数据做模加运算的结果更新所述第一缓存区中第3字上的数据;将所述第三缓存区中第4字上的数据和所述第二缓存区中第4字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十六寄存器中,用所述第三十六寄存器中数据与所述第一缓存区中第4字上的数据做模加运算的结果更新所述第一缓存区中第4字上的数据;将所述第三缓存区中第5字上的数据和所述第二缓存区中第5字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十七寄存器中,用所述第三十七寄存器中数据与所述第一缓存区中第5字上的数据做模加运算的结果更新所述第一缓存区中第5字上的数据;将所述第三缓存区中第6字上的数据和所述第二缓存区中第6字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十八寄存器中,用所述第三十八寄存器中数据与所述第一缓存区中第6字上的数据做模加运算的结果更新所述第一缓存区中第6字上的数据;将所述第三缓存区中第7字上的数据和所述第二缓存区中第7字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十九寄存器中,用所述第三十九寄存器中数据与所述第一缓存区中第7字上的数据做模加运算的结果更新所述第一缓存区中第7字上的数据;将所述第三缓存区中第8字上的数据和所述第二缓存区中第8字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第四十寄存器中,用所述第四十寄存器中数据与所述第一缓存区中第8字上的数据做模加运算的结果更新所述第一缓存区中第8字上的数据。
本发明又提供了一种哈希分组计算的安全实现设备,包括CPU和存储器,所述存储器包括第一缓存区、第二缓存区、第三缓存区、第四缓存区、第五缓存区、第六缓存区、第七缓存区、第八缓存区、第九缓存区、第十七缓存区、第十八缓存区、第十九缓存区、第二十七缓存区,所述CPU包括第一计算模块、第二计算模块、第三计算模块、第四计算模块、第一判断模块和第五计算模块;
所述第一计算模块,用于对第一缓存区中的初始向量和第二缓存区中的高8字上的数据进行计算并将计算结果存储到第三缓存区中,对第四缓存区中的原始数据和所述第二缓存区中的低16字上的数据进行计算并将计算结果存储到第五缓存区;将所述第二缓存区中的低16字上的数据存储到第六缓存区中;所述第二缓存区的大小为24字;所述第五缓存区和第六缓存区的大小为64字;
所述第二计算模块,用于根据所述第五缓存区中的数据和所述第六缓存区中的数据计算生成第三数值和第三结果并分别保存在第七缓存区和第十七缓存区中,根据所述第七缓存区中的数据、所述第十七缓存区中的数据和所述第五缓存区中的数据进行计算并将计算结果顺序存储到所述第五缓存区中,根据所述第七缓存区中的数据和所述第十七缓存区中的数据、所述第六缓存区中的数据进行计算并将计算结果顺序存储到所述第六缓存区中,根据所述第五缓存区中的数据、所述第六缓存区中的数据、所述所述第七缓存区中的数据和所述第十七缓存区中的数据进行计算得到第一数值和第一结果并分别存储到第八缓存区和第十八缓存区中,根据所述第三缓存区中的数据计算生成第三数据并存储到第二十七缓存区中,用所述第二十七缓存区中的数据和第十七缓存区中的数据更新所述第八缓存区中的数据和第十八缓存区中的数据;
所述第三计算模块,用于用所述第三缓存区中的数据更新所述第七缓存区中的第三数据,用所述第二缓存区中的数据更新所述第十七缓存区中的数据,根据所述第二十七缓存区中的数据和所述第十七缓存区中的数据生成第二数值和第二结果并分别存储到第九缓存区和第十九缓存区中;根据所述第三缓存区中的数据和所述第二缓存区中的第一随机数更新所述第七缓存区中的数据和所述第十七缓存区中的数据;根据所述第十七缓存区中的数据和所述二十七缓存区中的数据更新所述第九缓存区中的数据和所述第十九缓存区中的数据;
所述第四计算模块,用于根据所述第八缓存区中的数据、所述第十八缓存区中的数据、所述第九缓存区中的数据、第十九缓存区中的数据、所述第七缓存区中的数据和所述第十七缓存区中的数据更新所述第三缓存区中的数据;
所述第一判断模块,用于判断所述第五缓存区中的数据的长度和所述第六缓存区中数据的长度是否均为64个字,是则触发第五计算模块,否则触发所述第二计算模块;
所述第五计算模块,用于用所述第三缓存区中的数据和所述第二缓存区中的高8字上的数据更新所述第一缓存区中的数据并将所述第一缓存区中的数据作为哈希分组计算结果。
进一步地,所述CPU还包括第二判断模块,用于判断输入数据的长度是否为预设长度,是则按照所述预设长度对所述输入数据进行分组并将第一个分组数据作为初始向量存储到所述第一缓存区中,否则使用0将输入数据填充至预设长度,然后按照预设长度对填充后的输入数据进行分组并将第一个分组数据作为初始向量存储到所述第一缓存区中。
进一步地,所述CPU还包括第三判断模块,用于判断所述输入数据的所有分组数据是否全部处理完成,是则结束,否则将下一个未处理的分组数据作为初始向量存储到所述第一缓存区,触发第一计算模块。
进一步地,所述第一计算模块具体用于对第一缓存区中的初始向量和第二缓存区中的高8字上的数据进行异或运算并将计算结果存储到第三缓存区中,对所述第四缓存区中的原始数据和所述第二缓存区中的低16字上的数据进行模减运算并将计算结果存储到第五缓存区;将所述第二缓存区中的低16字上的数据存储到第六缓存区中。
进一步地,所述CPU还包括生成存储模块,用于生成长度为24字的第一随机数并存储到所述第二缓存区中。
进一步地,所述CPU还包括作为模块,用于将所述第五缓存区中的第一个空闲字作为当前位置,将所述第六缓存区中的第一个空闲字作为当前位置。
进一步地,所述存储器还包括第十缓存区和第二十缓存区,所述CPU还包括第一函数模块、第三函数模块、第四函数模块、第五函数模块、第六函数模块、第七函数模块、第八函数模块,所述第二计算模块包括:
第一计算单元,用于将所述第五缓存区中当前位置向前2个字的位置上的数据作为第五函数的第一参数、所述第六缓存区中当前位置向前2个字的位置上的数据作为第五函数的第二参数调用第五函数得到输出结果并存储到所述第七缓存区中;
第二计算单元,用于用所述第七缓存区中的数据作为参数调用第六函数得到的输出结果更新所述第七缓存区中的数据,将所述第六缓存区中当前位置向前2个字的位置上的数据作为参数调用第六函数得到的输出结果更新所述第十七缓存区中的数据;
第三计算单元,用于将所述第五缓存区中当前位置向前15个字的位置上的数据作为第一参数、所述第六缓存区中当前位置向前15个字的位置上的数据作为第二参数调用第五函数得到的输出结果存储到第十缓存区中;
第四计算单元,用于用所述第五缓存区中当前位置向前15个字的位置上的数据作为参数调用第七函数得到的输出结果更新所述第十缓存区中的数据,将所述第六缓存区中当前位置向前15个字的位置上的数据作为参数调用第七函数得到输出结果并存储到第二十缓存区中;
第五计算单元,用于将所述第七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果、所述第十缓存区中的数据和第二十缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果、所述第五缓存区中当前位置向前7个字的位置上的数据、所述第五缓存区中当前位置向前16个字的位置上的数据进行模加运算并将模加结果顺序存储到所述第五缓存区中;
第六计算单元,用于将所述第十七缓存区中的数据、所述第二十缓存区中的数据、所述第六缓存区中当前位置向前7个字的位置上的数据、所述第六缓存区中当前位置向前16个字的位置上的数据进行模加运算并将模加结果并顺序存储到所述第六缓存区中;
第七计算单元,用于将所述第五缓存区中当前位置上的数据、预置常数和所述第三缓存区中第8字上的数据进行模加运算并将模加结果存储到所述第八缓存区中;
第八计算单元,用于将所述第六缓存区中当前位置上的数据与所述第二缓存区中第8字上的数字进行模加运算并将模加结果存储到所述第八缓存区中;
第九计算单元,用于用所述第三缓存区中第5字上的数据作为参数调用第八函数得到的输出结果更新所述第二十七缓存区中的数据;用所述第二缓存区中第5字上的数据作为参数调用第八函数得到的输出结果更新所述第十七缓存区中的数据;
第十计算单元,用于将所述第第二十七缓存区中的数据和第十七缓存区中的数据作为参数调用第四函数得到的输出结果与所述第八缓存区中的数据的进行模加运算并用模加结果更新所述第八缓存区中的数据;用所述第十八缓存区中的数据与所述第十七缓存区中的数据的模加运算结果更新所述第八缓存区中的数据;
第十一计算单元,用于用所述第三缓存区中第5字上的数据、第6字上的数据、第7字上的数据和所述第二缓存区中第5字上的数据、第6字上的数据、第7字上的数据作为第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,调用第三函数得到的输出结果更新所述第二十七缓存区中的数据,用所述第二缓存区中第5字上的数据与第7字上的数据做异或运算的结果更新所述第十七缓存区中的数据;
第十二计算单元,用于将所述第二十七缓存区中的数据和所述第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果与所述第八缓存区中的数据进行模加结果并用模加结果更新所述第八缓存区中的数据;用所述第十八缓存区中的数据与所述第十七缓存区中的数据进行模加运算并用模加结果更新所述第十八缓存区中的数据。
进一步地,所述第五函数模块包括:
第一生成保存单元,用于生成第二随机数并保存到第一寄存器中,对所述第一寄存器中的第二随机数进行翻倍运算得到的结果保存到第二寄存器中,对所述第一寄存器中的数据与第二参数进行异或运算得到的结果保存到第三寄存器中,对所述第一寄存器中的数据与所述第三寄存器中的数据进行与运算得到的结果保存到第四寄存器中,对所述第二寄存器中的数据与第一参数进行异或运算得到的结果保存到第五寄存器中,对所述第一寄存器中的数据与所述第五寄存器中的数据进行异或运算得到的结果保存到第六寄存器中,对所述第六寄存器中的数据与所述第二参数进行与运算得到的结果保存到第七寄存器中,对所述第四寄存器中的数据与所述第七寄存器中的数据进行异或运算得到的结果保存到第八寄存器中,对所述第二寄存器中的数据与所述第二参数进行与运算得到的结果保存到第九寄存器中,对所述第八寄存器中的数据与所述第九寄存器中的数据进行异或运算得到的结果保存到第十寄存器中;
第一保存更新单元,用于对所述第二寄存器中的数据与所述第二参数进行与运算得到的结果保存到第十一寄存器中;用所述第十一寄存器中的数据与所述第十寄存器中的数据进行异或运算的结果更新所述第十一寄存器中的数据;用所述第二寄存器中的数据与所述第一参数进行与运算的结果更新所述第二寄存器中的数据;用所述第十一寄存器中的数据与所述第二寄存器中的数据进行异或运算的结果更新所述第十一寄存器中的数据,用所述第十一寄存器中的数据的翻倍运算结果更新所述第二寄存器中的数据;
第一判断单元,用于判断循环次数是否为预设值,是则触发第一运算单元,否则更新循环次数,触发所述第一保存更新单元;
所述第一运算单元,用于将所述第五寄存器中的数据与所述第二寄存器中的数据进行异或运算的结果作为第五函数模块的输出结果。
进一步地,所述第六函数模块具体用于将参数循环右移17位的结果、循环右移19位的结果和右移10位的结果做异或运算得到的结果作为第六函数模块的输出结果。
进一步地,所述第七函数模块具体用于将参数循环右移7位的结果、循环右移18位的结果、右移3位的结果做异或运算得到的结果作为第七函数模块的输出结果。
进一步地,所述第四函数模块具体用于生成第三随机数并保存到第十二寄存器中,对第一参数与所述第十二寄存器中的随机数进行异或运算得到的结果保存到第十二寄存器中,对所述第十二寄存器中的数据与所述第十二寄存器中的数据进行非运算得到的结果保存到第十三寄存器中;对所述第十三寄存器中的数据与所述第十二寄存器中的数据进行异或运算得到的结果保存到第十四寄存器中,对所述第十二寄存器中的数据与第二参数进行异或运算得到的结果保存到第十五寄存器中,对所述第一参数与所述第十五寄存器中的数据进行异或运算得到的结果保存到第十六寄存器中,对第十六寄存器中的数据与所述第十五寄存器中的数据进行非运算得到的结果保存到第十七寄存器中,对所述第十七寄存器中的数据与所述第十四寄存器中的数据进行异或运算得到的结果作为第四函数模块的输出结果。
进一步地,所述第三函数模块具体用于根据第一参数、第二参数、第四参数、第五参数调用第一函数模块得到的输出结果保存到第十八寄存器中;根据第三参数、第一参数的反码、第六参数、第四参数调用第一函数模块得到的结果保存到第十九寄存器中;将所述第十八寄存器中的数据和所述第十九寄存器中的数据进行异或运算得到的结果作为第三函数模块的输出结果。
进一步地,所述第一函数模块具体用于对所述第四参数的反码与第三参数进行与运算得到的结果保存到第二十寄存器中,对所述第四参数与所述第一参数进行与运算得到的结果保存到第二十一寄存器中,对所述第二十寄存器中的数据与所述第二十一寄存器中的数据进行或运算得到的结果保存到第二十二寄存器中,对所述第二参数的反码与所述第二十二寄存器中的数据进行与运算得到的结果保存到第二十三寄存器中;对所述第四参数与所述第三参数进行与运算得到的结果保存到第二十四寄存器中,对所述第四参数的反码与所述第一参数进行与运算得到的结果保存到第二十五寄存器中,对所述第二十四寄存器中的数据与所述第二十五寄存器中的数据进行或运算得到的结果保存到第二十六寄存器中,将所述第二参数与所述第二十六寄存器中的数据进行与运算得到的结果保存到第二十七寄存器中;对所述第二十三寄存器中的数据与所述第二十七寄存器中进行或运算得到的结果作为第一函数模块的输出结果。
进一步地,所述第八函数模块具体用于将参数循环右移6位的结果、循环右移11位的结果和循环右移25位的结果进行异或运算得到的结果作为第八函数模块的输出结果。
进一步地,所述CPU还包括第二函数模块和第九函数模块,所述第三计算模块包括:
第十三计算单元,用于用第三缓存区中第1字上的数据作为参数调用第九函数得到的输出结果更新所述第二十七缓存区中的数据;用第二缓存区中第1字上的数据作为参数调用第九函数得到的输出结果更新所述第十七缓存区中的第三结果;
第十四计算单元,用于用所述第二十七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果更新所述第九缓存区中的数据;用所述第十七缓存区中的数据更新所述第十九缓存区中的数据;
第十五计算单元,用于用第三缓存区中第1字上的数据、第2字上的数据、第3字上的数据和所述第二缓存区中第1字上的数据、第2字上的数据、第3字上的数据作为第一参数、第二参数、第三参数、第四参数、第五参数、第六参数调用第二函数得到的输出结果更新所述第二十七缓存区中的数据,用所述第二缓存区中第2字上的数据更新所述第十七缓存区中的数据;
第十六计算单元,用于用所述第二十七缓存区中的数据和所述第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果与所述第九缓存区中的数据进行模加运算并用模加结果更新所述第九缓存区中的数据;将所述第十九缓存区中的数据和所述第十七缓存区中的数据的进行模加运算并用模加结果更新所述第十九缓存区中的数据;
第十七计算单元,用于用所述第三缓存区中第7字上的数据更新所述第三缓存区中第8字上的数据,用所述第二缓存区中第7字上的数据更新所述第二缓存区中第8字上的数据,用所述第三缓存区中中第6字上的数据更新所述第三缓存区中第7字上的数据,用所述第二缓存区中第6字上的数据更新所述第二缓存区中第7字上的数据,用所述第三缓存区中第5字上的数据更新所述第三缓存区中第6字上的数据,用所述第二缓存区中第5字上的数据更新所述第二缓存区中第6字上的数据;
第十八计算单元,用于用所述第一缓存区中第4字上的数据和所述第二缓存区中第4字上的数据作为第一参数和第二参数,调用第四函数得到的输出结果更新所述第七缓存区中的数据,用所述第二缓存区中第4字上的数据更新所述第十七缓存区中的数据;
第十九计算单元,用于用所述第七缓存区中的数据与所述第八缓存区中的数据的模加运算结果更新所述第三缓存区中第5字上的数据;用所述第十七缓存区中的数据与所述第十八缓存区中的数据的模加运算结果更新所述第二缓存区中第5字上的数据;
第二十计算单元,用于用所述第三缓存区中第5字上的数据和所述第二缓存区中第5字上的数据作为第一参数和第二参数调用第五函数得到的输出结果更新所述第三缓存区中第5字上的数据。
进一步地,所述第九函数模块具体用于将参数循环右移2位的结果、循环右移13位的结果和循环右移22位的结果进行异或运算得到的结果作为第九函数模块的输出结果。
进一步地,所述第二函数模块具体用于根据第一参数、第二参数、第三参数、第四参数调用第一函数模块得到的输出结果保存到第二十八寄存器中;根据第一参数、第三参数、第四参数、第六参数调用第一函数模块得到的输出结果保存到第二十九寄存器中;根据第二参数、第三参数、第五参数、第六参数调用第一函数模块得到的输出结果保存到第三十寄存器中;将所述第二十八寄存器中的数据、所述第二十九寄存器中的数据、所述第三十寄存器中的数据进行异或运算得到输出结果。
进一步地,所述第四计算模块包括:
第二十一计算单元,用于用所述第三缓存区中第3字上的数据更新所述第三缓存区中第4字上的数据,用所述第二缓存区中第3字上的数据更新所述第二缓存区中第4字上的数据,用所述第三缓存区中第2字上的数据更新所述第三缓存区中第3字上的数据,用所述第二缓存区中第2字上的数据更新所述第二缓存区中第3字上的数据,用所述第三缓存区中第1字上的数据更新所述第三缓存区中第2字上的数据,用所述第二缓存区中第1字上的数据更新所述第二缓存区中第2字上的数据;
第二十二计算单元,用于将所述第八缓存区中的数据与所述第九缓存区中的数据进行模加运算并用模加结果更新所述第三缓存区中第1字上的数据;将所述第十八缓存区中的数据与所述第十九缓存区中的数据进行模加运算并用模加结果更新所述第二缓存区中第1字上的数据;
第二十三计算单元,用于用所述第三缓存区中第1字上的数据和所述第二缓存区中第1字上的数据作为第一参数和第二参数调用第五函数模块得到的输出结果更新所述第三缓存区中第1字上的数据。
进一步地,所述第一判断模块包括:
第二判断单元,用于分别判断所述第五缓存区和所述第六缓存区中的数据的长度与空闲长度之和是否为64个字,是则触发第三判断单元,否则报错;
所述第三判断单元,用于判断第五缓存区和第六缓存区中的空闲长度是否均为0,是则触发所述第五计算模块,否则触发所述第二计算模块。
进一步地,所述第五计算模块包括:
第二十四计算单元,用于依次将所述第三缓存区中的每一个字作为第一参数、所述第二缓存区中对应位置上数据作为第二参数调用第四函数模块得到的输出结果保存到第三十一寄存器中,将所述第三十一寄存器中的数据与所述第一缓存区中对应位置上的数据做模加运算,并用模加结果更新所述第一缓存区中对应位置上的数据;
第一作为单元,用于将所述第一缓存区中的数据作为哈希分组计算结果。
进一步地,所述第二十四计算单元具体用于将所述第三缓存区中第1字上的数据和所述第二缓存区中第1字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十二寄存器中,用所述第三十二寄存器中的数据与所述第一缓存区中第1字上的数据做模加运算的结果更新所述第一缓存区中第1字上的数据;将所述第三缓存区中第2字上的数据和所述第二缓存区中第2字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十四寄存器中,用所述第三十四寄存器中数据与所述第一缓存区中第2字上的数据做模加运算的结果更新所述第一缓存区中第2字上的数据;将所述第三缓存区中第3字上的数据和所述第二缓存区中第3字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十五寄存器中,用所述第三十五寄存器中数据与所述第一缓存区中第3字上的数据做模加运算的结果更新所述第一缓存区中第3字上的数据;将所述第三缓存区中第4字上的数据和所述第二缓存区中第4字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十六寄存器中,用所述第三十六寄存器中数据与所述第一缓存区中第4字上的数据做模加运算的结果更新所述第一缓存区中第4字上的数据;将所述第三缓存区中第5字上的数据和所述第二缓存区中第5字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十七寄存器中,用所述第三十七寄存器中数据与所述第一缓存区中第5字上的数据做模加运算的结果更新所述第一缓存区中第5字上的数据;将所述第三缓存区中第6字上的数据和所述第二缓存区中第6字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十八寄存器中,用所述第三十八寄存器中数据与所述第一缓存区中第6字上的数据做模加运算的结果更新所述第一缓存区中第6字上的数据;将所述第三缓存区中第7字上的数据和所述第二缓存区中第7字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十九寄存器中,用所述第三十九寄存器中数据与所述第一缓存区中第7字上的数据做模加运算的结果更新所述第一缓存区中第7字上的数据;将所述第三缓存区中第8字上的数据和所述第二缓存区中第8字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第四十寄存器中,用所述第四十寄存器中数据与所述第一缓存区中第8字上的数据做模加运算的结果更新所述第一缓存区中第8字上的数据。
本发明与现有技术相比,具有以下优点:
本发明技术方案能很好的保护哈希数据,通过随机掩码,在整个哈希过程中,所有的哈希数据及中间过程均未出现明文值,很好的抵御能量和电磁等功耗分析,每次分组计算完后判断是否受到错误攻击,当发生错误攻击时,进行报错,可有效防止错误攻击。
附图说明
图1为本发明实施例一提供的一种哈希分组计算的安全实现方法流程图;
图2和图3为本发明实施例二提供的一种哈希分组计算的安全实现方法流程图;
图4为本发明实施例一提供的一种哈希分组计算的安全实现设备方框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本发明实施例一提供一种哈希分组计算的安全实现方法,如图1所示,包括:
步骤S1:CPU对第一缓存区中的初始向量和第二缓存区中的高8字上的数据进行计算并将计算结果存储到第三缓存区中,对第四缓存区中的原始数据和第二缓存区中的低16字上的数据进行计算并将计算结果存储到第五缓存区;将第二缓存区中的低16字上的数据存储到第六缓存区中;
具体的,步骤S1包括:CPU对第一缓存区中的初始向量和第二缓存区中的高8字上的数据进行异或运算并将计算结果存储到第三缓存区中,对第四缓存区中的原始数据和第二缓存区中的低16字上的数据进行模减运算并将计算结果存储到第五缓存区;将第二缓存区中的低16字上的数据存储到第六缓存区中;
在本实施例中,第一缓存区的初始向量的长度为8个字,第四缓存区的原始数据的长度为16个字,第二缓存区中数据的长度为24个字;第五缓存区和第六缓存区的大小均为64字,存储顺序为从前先后依次存储;
可选的,正在本实施例中,步骤S1之前还包括:CPU生成长度为24字的第一随机数并存储到第二缓存区中;
步骤S2:CPU根据第五缓存区中的数据和第六缓存区中的数据计算生成第三数值和第三结果并分别保存在第七缓存区和第十七缓存区中,根据第七缓存区中的数据、第十七缓存区中的数据和第五缓存区中的数据进行计算并将计算结果顺序存储到第五缓存区中,根据第七缓存区中的数据和第十七缓存区中的数据、第六缓存区中的数据进行计算并将计算结果顺序存储到第六缓存区中,根据第五缓存区中的数据、第六缓存区中的数据、第七缓存区中的数据和第十七缓存区中的数据进行计算得到第一数值和第一结果并分别存储到第八缓存区和第十八缓存区中,根据第三缓存区中的数据计算生成第三数据并存储到第二十七缓存区中,用第二十七缓存区中的数据和第十七缓存区中的数据更新第八缓存区中的数据和第十八缓存区中的数据;
优选的,在本实施例中,步骤S2之前还包括:CPU将第五缓存区中的第一个空闲字作为当前位置,将第六缓存区中的第一个空闲字作为当前位置;
在本实施例中,第五缓存区和第六缓存区中存储数据从前向后依次存取,第五缓存区和第六缓存区的大小固定为64个字;
具体的,在本实施例中,步骤S2包括:
步骤S2-1:CPU将第五缓存区中当前位置向前2个字的位置上的数据作为第五函数的第一参数、第六缓存区中当前位置向前2个字的位置上的数据作为第五函数的第二参数调用第五函数得到输出结果并存储到第七缓存区中;
步骤S2-2:CPU用第七缓存区中的数据作为参数调用第六函数得到的输出结果更新第七缓存区中的数据,将第六缓存区中当前位置向前2个字的位置上的数据作为参数调用第六函数得到输出结果并存储到第十七缓存区中;
步骤S2-3:CPU将第五缓存区中当前位置向前15个字的位置上的数据作为第一参数、第六缓存区中当前位置向前15个字的位置上的数据作为第二参数调用第五函数得到输出结果存储到第十缓存区中;
步骤S2-4:CPU用第五缓存区中当前位置向前15个字的位置上的数据作为参数调用第七函数得到的输出结果更新第十缓存区中的数据,将第六缓存区中当前位置向前15个字的位置上的数据作为参数调用第七函数得到输出结果并存储到第二十缓存区中;
步骤S2-5:CPU将第七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果、第十缓存区中的数据和第二十缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果、第五缓存区中当前位置向前7个字的位置上的数据、第五缓存区中当前位置向前16个字的位置上的数据进行模加运算并将模加结果顺序存储到第五缓存区中;
步骤S2-6:CPU将第十七缓存区中的数据、第二十缓存区中的数据、第六缓存区中当前位置向前7个字的位置上的数据、第六缓存区中当前位置向前16个字的位置上的数据进行模加运算并将模加结果顺序存储到第六缓存区中;
步骤S2-7:CPU将第五缓存区中当前位置上的数据、预置常数和第三缓存区中第8字上的数据进行模加运算并将模加结果存储到第八缓存区中;
步骤S2-8:CPU将第六缓存区中当前位置上的数据与第二缓存区中第8字上的数字进行模加运算并将模加结果存储到第十八缓存区中;
步骤S2-9:CPU用第三缓存区中第5字上的数据作为参数调用第八函数得到的输出结果更新第二十七缓存区中的数据;用第二缓存区中第5字上的数据作为参数调用第八函数得到的输出结果更新第十七缓存区中的数据;
步骤S2-10:CPU将第二十七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数参数调用第四函数得到的输出结果与第八缓存区中的数据的进行模加运算并用模加结果更新第八缓存区中的数据;用第十八缓存区中的数据与第十七缓存区中的数据的模加运算结果更新第八缓存区中的数据;
步骤S2-11:CPU用第三缓存区中第5字上的数据、第6字上的数据、第7字上的数据和第二缓存区中第5字上的数据、第6字上的数据、第7字上的数据作为第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,调用第三函数得到的输出结果更新第二十七缓存区中的数据,用第二缓存区中第5字上的数据与第7字上的数据做异或运算的结果更新第十七缓存区中的数据;
步骤S2-12:CPU将第二十七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果与第八缓存区中的数据进行模加运算并用模加结果更新第八缓存区中的数据;用第十八缓存区中的数据与第十七缓存区中的数据进行模加运算并用模加结果更新第十八缓存区中的数据。
步骤S3:CPU用第三缓存区中的数据更新第七缓存区中的第三数据,用第二缓存区中的数据更新第十七缓存区中的数据,根据第二十七缓存区中的数据和第十七缓存区中的数据生成第二数值和第二结果并分别存储到第九缓存区和第十九缓存区中;根据第三缓存区中的数据和第二缓存区中的第一随机数更新第七缓存区中的数据和第十七缓存区中的数据;根据第十七缓存区中的数据和二十七缓存区中的数据更新第九缓存区中的数据和第十九缓存区中的数据;
具体的,在本实施例中,步骤S3包括:
步骤S3-1:CPU用第三缓存区中第1字上的数据作为参数调用第九函数得到的输出结果更新第二十七缓存区中的数据;用第二缓存区中第1字上的数据作为参数调用第九函数得到的输出结果更新第十七缓存区中的数据;
步骤S3-2:CPU用第二十七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果更新第九缓存区中的数据;用第十七缓存区中的数据更新第十九缓存区中的数据;
步骤S3-3:CPU用第三缓存区中第1字上的数据、第2字上的数据、第3字上的数据和第二缓存区中第1字上的数据、第2字上的数据、第3字上的数据作为第一参数、第二参数、第三参数、第四参数、第五参数、第六参数调用第二函数得到的输出结果更新第二十七缓存区中的数据,用第二缓存区中第2字上的数据更新第十七缓存区中的数据;
步骤S3-4:CPU用第二十七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果与第九缓存区中的数据进行模加运算并用模加结果更新第九缓存区中的数据;将第十九缓存区中的数据和第十七缓存区中的数据的进行模加运算并用模加结果更新第十九缓存区中的数据;
步骤S3-5:CPU用第三缓存区中第7字上的数据更新第三缓存区中第8字上的数据,用第二缓存区中第7字上的数据更新第二缓存区中第8字上的数据,用第三缓存区中中第6字上的数据更新第三缓存区中第7字上的数据,用第二缓存区中第6字上的数据更新第二缓存区中第7字上的数据,用第三缓存区中第5字上的数据更新第三缓存区中第6字上的数据,用第二缓存区中第5字上的数据更新第二缓存区中第6字上的数据;
步骤S3-6:CPU用第一缓存区中第4字上的数据和第二缓存区中第4字上的数据作为第一参数和第二参数,调用第四函数得到的输出结果更新第七缓存区中的数据,用第二缓存区中第4字上的数据更新第十七缓存区中的数据;
步骤S3-7:CPU用第七缓存区中的数据与第八缓存区中的数据的模加运算结果更新第三缓存区中第5字上的数据;用第十七缓存区中的数据与第十八缓存区中的数据的模加运算结果更新第二缓存区中第5字上的数据;
步骤S3-8:CPU用第三缓存区中第5字上的数据和第二缓存区中第5字上的数据作为第一参数和第二参数调用第五函数得到的输出结果更新第三缓存区中第5字上的数据;
步骤S4:CPU根据第八缓存区中的数据、第十八缓存区中的数据、第九缓存区中的数据、第十九缓存区中的数据、第七缓存区中的数据和第十七缓存区中的数据更新第三缓存区中的数据;
具体的,在本实施例中,步骤S4包括:
步骤S4-1:CPU用第三缓存区中第3字上的数据更新第三缓存区中第4字上的数据,用第二缓存区中第3字上的数据更新第二缓存区中第4字上的数据,用第三缓存区中第2字上的数据更新第三缓存区中第3字上的数据,用第二缓存区中第2字上的数据更新第二缓存区中第3字上的数据,用第三缓存区中第1字上的数据更新第三缓存区中第2字上的数据,用第二缓存区中第1字上的数据更新第二缓存区中第2字上的数据;
步骤S4-2:CPU将第八缓存区中的数据与第九缓存区中的数据进行模加运算并用模加结果更新第三缓存区中第1字上的数据;将第十八缓存区中的数据与第十九缓存区中的数据进行模加运算并用模加结果更新第二缓存区中第1字上的数据;
步骤S4-3:CPU用第三缓存区中第1字上的数据和第二缓存区中第1字上的数据作为第一参数和第二参数调用第五函数得到的输出结果更新第三缓存区中第1字上的数据;
步骤S5:CPU判断第五缓存区中的数据的长度和第六缓存区中数据的长度是否均为64个字,是则返回步骤S6,否则执行步骤S2;
具体的,在本实施中,步骤S5包括:
步骤S5-1:CPU分别判断第五缓存区和第六缓存区中的数据的长度与空闲长度之和是否为64个字,是则执行步骤S5-2,否则报错;
步骤S5-2:CPU判断第五缓存区和第六缓存区中的空闲长度是否均为0,是则执行步骤S6,否则返回步骤S2;
步骤S6:CPU用第三缓存区中的数据和第二缓存区中的高8字上的数据更新第一缓存区中的数据并将第一缓存区中的数据作为哈希分组计算结果。
在本实施例中,步骤S6中的用第三缓存区中的数据和第二缓存区中的高8字上的数据更新第一缓存区中的数据包括:步骤Y:依次将第三缓存区中的每一个字作为第一参数、第二缓存区中对应位置上数据作为第二参数调用第四函数得到的输出结果保存到第三十一寄存器中,将第三十一寄存器中的数据与第一缓存区中对应位置上的数据做模加运算,并用模加结果更新第一缓存区中对应位置上的数据;
步骤Y具体为:将第三缓存区中第1字上的数据和第二缓存区中第1字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十二寄存器中,用第三十二寄存器中的数据与第一缓存区中第1字上的数据做模加运算的结果更新第一缓存区中第1字上的数据;将第三缓存区中第2字上的数据和第二缓存区中第2字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十四寄存器中,用第三十四寄存器中数据与第一缓存区中第2字上的数据做模加运算的结果更新第一缓存区中第2字上的数据;将第三缓存区中第3字上的数据和第二缓存区中第3字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十五寄存器中,用第三十五寄存器中数据与第一缓存区中第3字上的数据做模加运算的结果更新第一缓存区中第3字上的数据;将第三缓存区中第4字上的数据和第二缓存区中第4字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十六寄存器中,用第三十六寄存器中数据与第一缓存区中第4字上的数据做模加运算的结果更新第一缓存区中第4字上的数据;将第三缓存区中第5字上的数据和第二缓存区中第5字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十七寄存器中,用第三十七寄存器中数据与第一缓存区中第5字上的数据做模加运算的结果更新第一缓存区中第5字上的数据;将第三缓存区中第6字上的数据和第二缓存区中第6字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十八寄存器中,用第三十八寄存器中数据与第一缓存区中第6字上的数据做模加运算的结果更新第一缓存区中第6字上的数据;将第三缓存区中第7字上的数据和第二缓存区中第7字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十九寄存器中,用第三十九寄存器中数据与第一缓存区中第7字上的数据做模加运算的结果更新第一缓存区中第7字上的数据;将第三缓存区中第8字上的数据和第二缓存区中第8字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第四十寄存器中,用第四十寄存器中数据与第一缓存区中第8字上的数据做模加运算的结果更新第一缓存区中第8字上的数据。
优选的,在本实施例中,步骤S1之前还包括:CPU判断输入数据的长度是否为预设长度,是则按照预设长度对输入数据进行分组并将第一个分组数据作为初始向量存储到第一缓存区中,否则使用0将输入数据填充至预设长度,然后按照预设长度对填充后的输入数据进行分组并将第一个分组数据作为初始向量存储到第一缓存区中;
相应的,步骤S6之后还包括:判断输入数据的所有分组数据是否全部处理完成,是则结束,否则将下一个未处理的分组数据作为初始向量存储到第一缓存区,返回步骤S1。
实施例二
本发明实施例二提供一种哈希分组计算的安全实现方法,如图2和图3所示,包括:
步骤101:CPU获取初始向量保存到第一缓存区中,获取原始数据保存到第四缓存区中;生成预设长度的第一随机数并保存到第二缓存区中;
具体的,在本实施例中,初始向量的长度为8个字,原始数据长度为16个字,第一随机数的长度为24个字;每个字为32bit;
例如,本实施例中的初始向量为0x6a09e667 0xbb67ae85 0x3c6ef3720xa54ff53a 0x510e527f 0x9b05688c 0x1f83d9ab 0x5be0cd19,原始数据为0XB505CD880X6E54FD04 0X4F7119A8 0X541922FB 0X665B3EDE 0XE7839780 0XE93C869A 0X44BE23060XD98E8B58 0XAFCD7BC8 0XFF9D83DE 0X165CB5A6 0XEC410A1B 0XD33C4EC2 0XBFADD5B30XF6CD5447,生成的第一随机数为0x09b7cbdd 0x5f253cc0 0xdbdae401 0xb8d57bbe0x14e6a026 0x64607bfd 0x63267a6f 0xd99c15dc 0XF0F12D43 0XB1BC1720 0X467820550X3F08FCDF 0X6CD35AB5 0XDDB4F36D 0XE2808227 0X0BAE7946 0X28F2044A 0X49E3FA9A0XBEECD013 0X17287389 0X24EABC95 0XF513FBF7 0XDA7772DC 0X63E2FE6B;
步骤102:CPU对第一缓存区中的初始向量和第二缓存区中的高8字上的数据进行异或运算并将计算结果存储到第三缓存区中,对第四缓存区中的原始数据和第二缓存区中的低16字上的数据进行模减运算并将计算结果存储到第五缓存区;
具体的,第三缓存区中的数据的长度为8个字,第五缓存区中的数据的长度为16个字;
例如,本实施例中的第三缓存区中的数据为0x63be2dba 0xe4429245 0xe7b417730x1d9a8e84 0x45e8f259 0xff651371 0x7ca5a3c4 0x827cd8c5,第五缓存区中的数据为:0X71D7DB98 0X4E3D4053 0XFA50A162 0X741D1ABC 0XB1006B72 0X798FE2A3 0XC1BA05B80XFE4474FB 0X8F899930 0X14D2987F 0XEBCC9720 0X8CE98D8F 0X56841FF7 0XDB413ACD0XE33B5DD9 0X8ACE71E4;
步骤103:CPU将第二缓存区中的低16字上的数据存储到第六缓存区中;
在本实施例中,第五缓存区和第六缓存区中存储数据从前向后依次存取;
步骤104:CPU将第五缓存区中的第一个空闲字作为当前位置,将第六缓存区中的第一个空闲字作为当前位置;
例如,本步骤中第五缓存区中第一空闲字为第五缓存区中从第1字开始的第17字,第六缓存区中第一空闲字为第六缓存区中从第1字开始的第17字;
步骤105:CPU用第五缓存区中当前位置向前2个字的位置上的数据作为第五函数的第一参数、将第六缓存区中当前位置向前2个字的位置上的数据作为第五函数的第二参数调用第五函数得到输出结果并存储到第七缓存区中;
具体的,在本实施例中,第五函数的实现过程为:
步骤a1:CPU生成第二随机数并保存到第一寄存器中,对第一寄存器中的第二随机数进行翻倍运算得到的结果保存到第二寄存器中,对第一寄存器中的数据与第二参数进行异或运算得到的结果保存到第三寄存器中,对第一寄存器中的数据与第三寄存器中的数据进行与运算得到的结果保存到第四寄存器中,对第二寄存器中的数据与第一参数进行异或运算得到的结果保存到第五寄存器中,对第一寄存器中的数据与第五寄存器中的数据进行异或运算得到的结果保存到第六寄存器中,对第六寄存器中的数据与第二参数进行与运算得到的结果保存到第七寄存器中,对第四寄存器中的数据与第七寄存器中的数据进行异或运算得到的结果保存到第八寄存器中,对第二寄存器中的数据与第二参数进行与运算得到的结果保存到第九寄存器中,对第八寄存器中的数据与第九寄存器中的数据进行异或运算得到的结果保存到第十寄存器中;
步骤a2:CPU对第二寄存器中的数据与第二参数进行与运算得到的结果保存到第十一寄存器中;用第十一寄存器中的数据与第十寄存器中的数据进行异或运算的结果更新第十一寄存器中的数据;用第二寄存器中的数据与第一参数进行与运算的结果更新第二寄存器中的数据;用第十一寄存器中的数据与第二寄存器中的数据进行异或运算的结果更新第十一寄存器中的数据,用第十一寄存器中的数据的翻倍运算结果更新第二寄存器中的数据;
步骤a3:CPU判断循环次数是否为预设值,是则执行步骤a4,否则更新循环次数,返回步骤a2;
在本实施例中,如循环次数的初始值为1,则预设值为31,更新循环次数具体为:循环次数自加1;如循环次数的初始值为31,则预设值为1,更新循环次数具体为:循环次数自减1;
步骤a4:CPU将第五寄存器中的数据与第二寄存器中的数据进行异或运算的结果作为第五函数的输出结果;
例如,该步骤中的第七缓存区中的数据为0x63dfa269;
步骤106:CPU用第七缓存区中的数据作为参数调用第六函数得到的输出结果更新第七缓存区中的数据,将第六缓存区中当前位置向前2个字的位置上的数据作为参数调用第六函数得到输出结果并保存到第十七缓存区中;
在本实施例中,第六函数的实现过程为:CPU将参数循环右移17位的结果、循环右移19位的结果和右移10位的结果做异或运算得到的结果作为第六函数的输出结果;
例如,该步骤中的第十七缓存区中的数据为0x25616a7c;
步骤107:CPU将第五缓存区中当前位置向前15个字的位置上的数据作为第一参数、第六缓存区中当前位置向前15个字的位置上的数据作为第二参数调用第五函数得到输出结果并存储到第十缓存区中;
例如,该步骤中的第十缓存区中的数据为0x4e4341b5;
步骤108:CPU用第十缓存区中的数据作为参数调用第七函数得到的输出结果更新第十缓存区中的数据,将第六缓存区中当前位置向前15个字的位置上的数据作为参数调用第七函数得到输出结果并存储到第二十缓存区中;
在本实施例中,第七函数的实现过程为:CPU将参数循环右移7位的结果、循环右移18位的结果、右移3位的结果做异或运算得到的结果作为第七函数的输出结果;
例如,该步骤中的第二十缓存区中的数据为0xb339bd25;
步骤109:CPU用第七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果、用第十缓存区中的数据和第二十缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果、第五缓存区中当前位置向前7个字的位置上的数据、第五缓存区中当前位置向前16个字的位置上的数据进行模加运算得到的结果顺序存储到第五缓存区中;
具体的,在本实施例中,第四函数的实现过程为:CPU生成第三随机数并保存到第十二寄存器中,对第一参数与第十二寄存器中的随机数进行异或运算得到的结果保存到第十二寄存器中,对第十二寄存器中的数据与第十二寄存器中的数据进行非运算得到的结果保存到第十三寄存器中;对第十三寄存器中的数据与第十二寄存器中的数据进行异或运算得到的结果保存到第十四寄存器中,对第十二寄存器中的数据与第二参数进行异或运算得到的结果保存到第十五寄存器中,对第一参数与第十五寄存器中的数据进行异或运算得到的结果保存到第十六寄存器中,对第十六寄存器中的数据与第十五寄存器中的数据进行非运算得到的结果保存到第十七寄存器中,对第十七寄存器中的数据与第十四寄存器中的数据进行异或运算得到的结果作为第四函数的输出结果;
例如,该步骤中存储到第五缓存区中的数据为0x12b22b28;
步骤110:CPU将第十七缓存区中的数据、第二十缓存区中的数据、第六缓存区中当前位置向前7个字的位置上的数据、第六缓存区中当前位置向前16个字的位置上的数据进行模加运算并将模加结果顺序存储到第六缓存区中;
例如,该步骤中存储到第六缓存区中的数据为0xdcb88f4d;
步骤111:CPU将第五缓存区中当前位置上的数据、预置常数和第三缓存区中第8字上的数据进行模加运算并将模加结果存储到第八缓存区中;
例如,该步骤中的第八缓存区中的数据为0x25e34e72;
步骤112:CPU将第六缓存区中当前位置上的数据与第二缓存区中第8字上的数字进行模加运算并将模加结果存储到第十八缓存区中;
在本实施例中,所有模加运算的模数均为2的32次方;
例如,该步骤中第十八缓存区中的数据为0x56ef8933;
步骤113:CPU用第三缓存区中第5字上的数据作为参数调用第八函数得到的输出结果更新第二十七缓存区中的数据;用第二缓存区中第5字上的数据作为参数调用第八函数得到的输出结果更新第十七缓存区中的数据;
具体的,在本实施例中,第八函数的实现过程为:CPU将参数循环右移6位的结果、循环右移11位的结果和循环右移25位的结果进行异或运算得到的结果作为第八函数的输出结果;
例如,该步骤中的第二十七缓存区中的数据为0xef679d54,第十七缓存区中的数据为0x741c7028;
步骤114:CPU将第二十七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果与第八缓存区中的数据进行模加运算并用模加结果更新第八缓存区中的数据;用第十八缓存区中的数据与第十七缓存区中的数据的模加运算结果更新第十八缓存区中的数据;
例如,该步骤中的第八缓存区中的数据为0xc70ac99e,第十八缓存区中的数据为0xd98328d4;
步骤115:CPU用第三缓存区中第5字上的数据、第6字上的数据、第7字上的数据和第二缓存区中第5字上的数据、第6字上的数据、第7字上的数据作为第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,调用第三函数得到的输出结果更新第二十七缓存区中的数据,用第二缓存区中第5字上的数据与第7字上的数据做异或运算的结果更新第十七缓存区中的数据;
具体的,在本实施例中,第三函数的实现过程为:CPU根据第一参数、第二参数、第四参数、第五参数调用第一函数得到的输出结果保存到第十八寄存器中;根据第三参数、第一参数的反码、第六参数、第四参数调用第一函数得到的结果保存到第十九寄存器中;将第十八寄存器中的数据和第十九寄存器中的数据进行异或运算得到的结果作为第三函数的输出结果;
第一函数包括第一参数、第二参数、第三参数和第四参数,第一函数的实现过程具体为:CPU对第四参数的反码与第三参数进行与运算得到的结果保存到第二十寄存器中,对第四参数与第一参数进行与运算得到的结果保存到第二十一寄存器中,对第二十寄存器中的数据与第二十一寄存器中的数据进行或运算得到的结果保存到第二十二寄存器中,对第二参数的反码与第二十二寄存器中的数据进行与运算得到的结果保存到第二十三寄存器中;对第四参数与第三参数进行与运算得到的结果保存到第二十四寄存器中,对第四参数的反码与第一参数进行与运算得到的结果保存到第二十五寄存器中,对第二十四寄存器中的数据与第二十五寄存器中的数据进行或运算得到的结果保存到第二十六寄存器中,将第二参数与第二十六寄存器中的数据进行与运算得到的结果保存到第二十七寄存器中;对第二十三寄存器中的数据与第二十七寄存器中进行或运算得到的结果作为第一函数的输出结果;
例如,该步骤中的第二十七缓存区中的数据为0x552dfee8,第十七缓存区中的数据为0x6a09e667;
步骤116:CPU将第二十七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果与第八缓存区中的数据进行模加运算并用模加结果更新第八缓存区中的数据;用第十八缓存区中的数据与第十七缓存区中的数据进行模加运算并用模加结果更新第十八缓存区中的数据;
例如,该步骤中的第八缓存区中的为0x7a367706,第十八缓存区中的数据为0x51fd78d8;
步骤117:CPU用第三缓存区中第1字上的数据作为参数调用第九函数得到的输出结果更新第二十七缓存区中的数据;用第二缓存区中第1字上的数据作为参数调用第九函数得到的输出结果更新第十七缓存区中的数据;
具体的,本实施例中的第九函数的实现过程为:CPU将参数循环右移2位的结果、循环右移13位的结果和循环右移22位的结果进行异或运算得到的结果作为第九函数的输出结果;
例如,该步骤中的第二十七缓存区中的数据为0xf9d83056,第十七缓存区中的数据为0xbf7de200;
步骤118:CPU用第二十七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果更新第九缓存区中的数据;用第十七缓存区中的数据更新第十九缓存区中的数据;
例如,该步骤中的第九缓存区中的数据为0x8727f056,第十九缓存区中的数据为0xbf7de200;
步骤119:CPU用第三缓存区中第1字上的数据、第2字上的数据、第3字上的数据和第二缓存区中第1字上的数据、第2字上的数据、第3字上的数据作为第一参数、第二参数、第三参数、第四参数、第五参数、第六参数调用第二函数得到的输出结果更新第二十七缓存区中的数据,用第二缓存区中第2字上的数据更新第十七缓存区中的数据;
在本实施例中,第二函数的具体实现过程为:CPU根据第一参数、第二参数、第三参数、第四参数调用第一函数得到的输出结果保存到第二十八寄存器中;根据第一参数、第三参数、第四参数、第六参数调用第一函数得到的输出结果保存到第二十九寄存器中;根据第二参数、第三参数、第五参数、第六参数调用第一函数得到的输出结果保存到第三十寄存器中;将第二十八寄存器中的数据、第二十九寄存器中的数据、第三十寄存器中的数据进行异或运算得到输出结果;
例如,该步骤中的第二十七缓存区中的数据为0x81d30a28,第十七缓存区中的数据为0x86affc98;
步骤120:CPU用第二十七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果与第九缓存区中的数据进行模加运算并用模加结果更新第九缓存区中的数据;用第十九缓存区中的数据和第十七缓存区中的数据的模加运算结果并用模加结果更新第十九缓存区中的数据;
例如,该步骤中的第九缓存区中的数据为0x07f4ea6e,第十九缓存区中的数据为0x462dde98;
步骤121:CPU用第三缓存区中第7字上的数据更新第三缓存区中第8字上的数据,用第二缓存区中第7字上的数据更新第二缓存区中第8字上的数据,用第三缓存区中第6字上的数据更新第三缓存区中第7字上的数据,用第二缓存区中第6字上的数据更新第二缓存区中第7字上的数据,用第三缓存区中第5字上的数据更新第三缓存区中第6字上的数据,用第二缓存区中第5字上的数据更新第二缓存区中第6字上的数据;
例如,该步骤中的第三缓存区中第6、7、8字上的数据分别为:0x8948672b、0x413370e1、0x9cf59dc3;第二缓存区中第6、7、8字上的数据分别为0xf9dc5033、0x45b6ee7c、0x205f78e7;
步骤122:CPU用第一缓存区中第4字上的数据和第二缓存区中第4字上的数据作为第一参数和第二参数,调用第四函数得到的输出结果更新第七缓存区中的数据,用第二缓存区中第4字上的数据更新第十七缓存区中的数据;
例如,该步骤中的第七缓存区中的数据为0xe728d34c,第十七缓存区中的数据为0x2509598f;
步骤123:CPU用第七缓存区中的数据与第八缓存区中的数据的模加运算结果更新第三缓存区中第5字上的数据;用第十七缓存区中的数据与第十八缓存区中的数据的模加运算结果更新第二缓存区中第5字上的数据;
例如,该步骤中的第三缓存区中第5字上的数据为0x615f4a52,第二缓存区中第5字上的数据为0x7706d267;
步骤124:CPU用第三缓存区中第5字上的数据和第二缓存区中第5字上的数据作为第一参数和第二参数调用第五函数得到的输出结果更新第三缓存区中第5字上的数据;
例如,该步骤中的第三缓存区中第5字上的数据为0xaf60cede;
步骤125:CPU用第三缓存区中第3字上的数据更新第三缓存区中第4字上的数据,用第二缓存区中第3字上的数据更新第二缓存区中第4字上的数据,用第三缓存区中第2字上的数据更新第三缓存区中第3字上的数据,用第二缓存区中第2字上的数据更新第二缓存区中第3字上的数据,用第三缓存区中第1字上的数据更新第三缓存区中第2字上的数据,用第二缓存区中第1字上的数据更新第二缓存区中第2字上的数据;
例如,该步骤中的第三缓存区中的第2、3、4字上的数据分别为:0x77444ea6、0x83892ae9、0x53223341;第二缓存区中的第2、3、4字上的数据分别为0x70b8f816、0x77444ea6、0xf97ec7e5;
步骤126:CPU用第八缓存区中的数据与第九缓存区中的数据的模加运算结果更新第三缓存区中第1字上的数据;用第十八缓存区中的数据与第十九缓存区中的数据的模加运算结果更新第二缓存区中第1字上的数据;
例如,该步骤中的第三缓存区中的第1字上的数据为0x822b6174,第二缓存区中的第1字上的数据为0x982b5770;
步骤127:CPU用第三缓存区中第1字上的数据和第二缓存区中第1字上的数据作为第一参数和第二参数调用第五函数得到的输出结果更新第三缓存区中第1字上的数据;
例如,该步骤中的第三缓存区中第1字上的数据为0x827def94;
步骤128:CPU分别判断第五缓存区和第六缓存区中的数据的长度与空闲长度之和是否为64个字,是则是则执行步骤129,否则报错;
步骤129:CPU判断第五缓存区和第六缓存区中的空闲长度是否均为0,是则执行步骤130,否则返回步骤104;
步骤130:CPU依次将第三缓存区中的每一个字作为第一参数、第二缓存区中对应位置上数据作为第二参数调用第四函数得到的输出结果保存到第三十一寄存器中,将第三十一寄存器中的数据与第一缓存区中对应位置上的数据做模加运算,并用模加结果更新第一缓存区中对应位置上的数据;
在本实施例中,步骤130包括:CPU将第三缓存区中第1字上的数据和第二缓存区中第1字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十二寄存器中,用第三十二寄存器中的数据与第一缓存区中第1字上的数据做模加运算的结果更新第一缓存区中第1字上的数据;将第三缓存区中第2字上的数据和第二缓存区中第2字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十四寄存器中,用第三十四寄存器中数据与第一缓存区中第2字上的数据做模加运算的结果更新第一缓存区中第2字上的数据;将第三缓存区中第3字上的数据和第二缓存区中第3字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十五寄存器中,用第三十五寄存器中数据与第一缓存区中第3字上的数据做模加运算的结果更新第一缓存区中第3字上的数据;将第三缓存区中第4字上的数据和第二缓存区中第4字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十六寄存器中,用第三十六寄存器中数据与第一缓存区中第4字上的数据做模加运算的结果更新第一缓存区中第4字上的数据;将第三缓存区中第5字上的数据和第二缓存区中第5字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十七寄存器中,用第三十七寄存器中数据与第一缓存区中第5字上的数据做模加运算的结果更新第一缓存区中第5字上的数据;将第三缓存区中第6字上的数据和第二缓存区中第6字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十八寄存器中,用第三十八寄存器中数据与第一缓存区中第6字上的数据做模加运算的结果更新第一缓存区中第6字上的数据;将第三缓存区中第7字上的数据和第二缓存区中第7字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十九寄存器中,用第三十九寄存器中数据与第一缓存区中第7字上的数据做模加运算的结果更新第一缓存区中第7字上的数据;将第三缓存区中第8字上的数据和第二缓存区中第8字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第四十寄存器中,用第四十寄存器中数据与第一缓存区中第8字上的数据做模加运算的结果更新第一缓存区中第8字上的数据。
步骤131:CPU将第一缓存区中的数据作为哈希分组计算结果。
在本实施例中,CPU得到哈希分组计算结果后可继续进行后续操作,例如签名操作。
本实施例中的第一缓存区、第二缓存区、第三缓存区、第四缓存区、第五缓存区、第六缓存区、第七缓存区、第八缓存区、第九缓存区、第十缓存区、第十七缓存区、第十八缓存区、第十九缓存区、第二十缓存区、第二十七缓存区可以是独立设置的存储器可以是整个存储芯片上的不同分区。
本发明技术方案能很好的保护哈希数据,通过随机掩码,在整个哈希过程中,所有的哈希数据及中间过程均未出现明文值,很好的抵御能量和电磁等功耗分析,每次分组计算完后均通过正反计数器求和判断是否受到错误攻击,当发生错误攻击时,对已有数据清零,有效防错误攻击。
实施例三
本发明实施例三提供一种哈希分组计算的安全实现设备,如图4所示,该设备包括CPU和存储器,存储器包括第一缓存区、第二缓存区、第三缓存区、第四缓存区、第五缓存区、第六缓存区、第七缓存区、第八缓存区、第九缓存区、第十七缓存区、第十八缓存区、第十九缓存区、第二十七缓存区,CPU包括第一计算模块、第二计算模块、第三计算模块、第四计算模块、第一判断模块和第五计算模块;
第一计算模块,用于对第一缓存区中的初始向量和第二缓存区中的高8字上的数据进行计算并将计算结果存储到第三缓存区中,对第四缓存区中的原始数据和第二缓存区中的低16字上的数据进行计算并将计算结果存储到第五缓存区;将第二缓存区中的低16字上的数据存储到第六缓存区中;
在本实施例中,第二缓存区的大小为24字;第五缓存区和第六缓存区的大小为64字;每个字为32bit;
第二计算模块,用于根据第五缓存区中的数据和第六缓存区中的数据计算生成第三数值和第三结果并分别保存在第七缓存区和第十七缓存区中,根据第七缓存区中的数据、第十七缓存区中的数据和第五缓存区中的数据进行计算并将计算结果顺序存储到第五缓存区中,根据第七缓存区中的数据和第十七缓存区中的数据、第六缓存区中的数据进行计算并将计算结果顺序存储到第六缓存区中,根据第五缓存区中的数据、第六缓存区中的数据、第七缓存区中的数据和第十七缓存区中的数据进行计算得到第一数值和第一结果并分别存储到第八缓存区和第十八缓存区中,根据第三缓存区中的数据计算生成第三数据并存储到第二十七缓存区中,用第二十七缓存区中的数据和第十七缓存区中的数据更新第八缓存区中的数据和第十八缓存区中的数据;
第三计算模块,用于用第三缓存区中的数据更新第七缓存区中的第三数据,用第二缓存区中的数据更新第十七缓存区中的数据,根据第二十七缓存区中的数据和第十七缓存区中的数据生成第二数值和第二结果并分别存储到第九缓存区和第十九缓存区中;根据第三缓存区中的数据和第二缓存区中的第一随机数更新第七缓存区中的数据和第十七缓存区中的数据;根据第十七缓存区中的数据和二十七缓存区中的数据更新第九缓存区中的数据和第十九缓存区中的数据;
第四计算模块,用于根据第八缓存区中的数据、第十八缓存区中的数据、第九缓存区中的数据、第十九缓存区中的数据、第七缓存区中的数据和第十七缓存区中的数据更新第三缓存区中的数据;
第一判断模块,用于判断第五缓存区中的数据的长度和第六缓存区中数据的长度是否均为64个字,是则触发第五计算模块,否则触发第二计算模块;
第五计算模块,用于用第三缓存区中的数据和第二缓存区中的高8字上的数据更新第一缓存区中的数据并将第一缓存区中的数据作为哈希分组计算结果。
可选的,本实施例中的CPU还包括第二判断模块,用于判断输入数据的长度是否为预设长度,是则按照预设长度对输入数据进行分组并将第一个分组数据作为初始向量存储到第一缓存区中,否则使用0将输入数据填充至预设长度,然后按照预设长度对填充后的输入数据进行分组并将第一个分组数据作为初始向量存储到第一缓存区中。
可选的,本实施例中的CPU还包括第三判断模块,用于判断输入数据的所有分组数据是否全部处理完成,是则结束,否则将下一个未处理的分组数据作为初始向量存储到第一缓存区,触发第一计算模块。
在本实施例中,第一计算模块具体用于对第一缓存区中的初始向量和第二缓存区中的高8字上的数据进行异或运算并将计算结果存储到第三缓存区中,对第四缓存区中的原始数据和第二缓存区中的低16字上的数据进行模减运算并将计算结果存储到第五缓存区;将第二缓存区中的低16字上的数据存储到第六缓存区中。
可选的,本实施例中的CPU还包括生成存储模块,用于生成长度为24字的第一随机数并存储到第二缓存区中。
可选的,本实施例中的CPU还包括作为模块,用于将第五缓存区中的第一个空闲字作为当前位置,将第六缓存区中的第一个空闲字作为当前位置。
本实施例中的存储器还包括第十缓存区和第二十缓存区,本实施例中的CPU还包括第一函数模块、第三函数模块、第四函数模块、第五函数模块、第六函数模块、第七函数模块、第八函数模块,则第二计算模块包括:
第一计算单元,用于将第五缓存区中当前位置向前2个字的位置上的数据作为第五函数的第一参数、第六缓存区中当前位置向前2个字的位置上的数据作为第五函数的第二参数调用第五函数得到输出结果并存储到第七缓存区中;
第二计算单元,用于用第七缓存区中的数据作为参数调用第六函数得到的输出结果更新第七缓存区中的数据,将第六缓存区中当前位置向前2个字的位置上的数据作为参数调用第六函数得到的输出结果更新第十七缓存区中的数据;
第三计算单元,用于将第五缓存区中当前位置向前15个字的位置上的数据作为第一参数、第六缓存区中当前位置向前15个字的位置上的数据作为第二参数调用第五函数得到的输出结果存储到第十缓存区中;
第四计算单元,用于用第五缓存区中当前位置向前15个字的位置上的数据作为参数调用第七函数得到的输出结果更新第十缓存区中的数据,将第六缓存区中当前位置向前15个字的位置上的数据作为参数调用第七函数得到输出结果并存储到第二十缓存区中;
第五计算单元,用于将第七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果、第十缓存区中的数据和第二十缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果、第五缓存区中当前位置向前7个字的位置上的数据、第五缓存区中当前位置向前16个字的位置上的数据进行模加运算并将模加结果顺序存储到第五缓存区中;
第六计算单元,用于将第十七缓存区中的数据、第二十缓存区中的数据、第六缓存区中当前位置向前7个字的位置上的数据、第六缓存区中当前位置向前16个字的位置上的数据进行模加运算并将模加结果并顺序存储到第六缓存区中;
第七计算单元,用于将第五缓存区中当前位置上的数据、预置常数和第三缓存区中第8字上的数据进行模加运算并将模加结果存储到第八缓存区中;
第八计算单元,用于将第六缓存区中当前位置上的数据与第二缓存区中第8字上的数字进行模加运算并将模加结果存储到第八缓存区中;
第九计算单元,用于用第三缓存区中第5字上的数据作为参数调用第八函数得到的输出结果更新第二十七缓存区中的数据;用第二缓存区中第5字上的数据作为参数调用第八函数得到的输出结果更新第十七缓存区中的数据;
第十计算单元,用于将第第二十七缓存区中的数据和第十七缓存区中的数据作为参数调用第四函数得到的输出结果与第八缓存区中的数据的进行模加运算并用模加结果更新第八缓存区中的数据;用第十八缓存区中的数据与第十七缓存区中的数据的模加运算结果更新第八缓存区中的数据;
第十一计算单元,用于用第三缓存区中第5字上的数据、第6字上的数据、第7字上的数据和第二缓存区中第5字上的数据、第6字上的数据、第7字上的数据作为第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,调用第三函数得到的输出结果更新第二十七缓存区中的数据,用第二缓存区中第5字上的数据与第7字上的数据做异或运算的结果更新第十七缓存区中的数据;
第十二计算单元,用于将第二十七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果与第八缓存区中的数据进行模加结果并用模加结果更新第八缓存区中的数据;用第十八缓存区中的数据与第十七缓存区中的数据进行模加运算并用模加结果更新第十八缓存区中的数据。
具体的,在本实施例中,第五函数模块包括:
第一生成保存单元,用于生成第二随机数并保存到第一寄存器中,对第一寄存器中的第二随机数进行翻倍运算得到的结果保存到第二寄存器中,对第一寄存器中的数据与第二参数进行异或运算得到的结果保存到第三寄存器中,对第一寄存器中的数据与第三寄存器中的数据进行与运算得到的结果保存到第四寄存器中,对第二寄存器中的数据与第一参数进行异或运算得到的结果保存到第五寄存器中,对第一寄存器中的数据与第五寄存器中的数据进行异或运算得到的结果保存到第六寄存器中,对第六寄存器中的数据与第二参数进行与运算得到的结果保存到第七寄存器中,对第四寄存器中的数据与第七寄存器中的数据进行异或运算得到的结果保存到第八寄存器中,对第二寄存器中的数据与第二参数进行与运算得到的结果保存到第九寄存器中,对第八寄存器中的数据与第九寄存器中的数据进行异或运算得到的结果保存到第十寄存器中;
第一保存更新单元,用于对第二寄存器中的数据与第二参数进行与运算得到的结果保存到第十一寄存器中;用第十一寄存器中的数据与第十寄存器中的数据进行异或运算的结果更新第十一寄存器中的数据;用第二寄存器中的数据与第一参数进行与运算的结果更新第二寄存器中的数据;用第十一寄存器中的数据与第二寄存器中的数据进行异或运算的结果更新第十一寄存器中的数据,用第十一寄存器中的数据的翻倍运算结果更新第二寄存器中的数据;
第一判断单元,用于判断循环次数是否为预设值,是则触发第一运算单元,否则更新循环次数,返回触发第一保存更新单元;
第一运算单元,用于将第五寄存器中的数据与第二寄存器中的数据进行异或运算的结果作为第五函数模块的输出结果。
在本实施例中,第六函数模块具体用于将参数循环右移17位的结果、循环右移19位的结果和右移10位的结果做异或运算得到的结果作为第六函数模块的输出结果。
在本实施例中,第七函数模块具体用于将参数循环右移7位的结果、循环右移18位的结果、右移3位的结果做异或运算得到的结果作为第七函数模块的输出结果。
在本实施例中,第四函数模块具体用于生成第三随机数并保存到第十二寄存器中,对第一参数与第十二寄存器中的随机数进行异或运算得到的结果保存到第十二寄存器中,对第十二寄存器中的数据与第十二寄存器中的数据进行非运算得到的结果保存到第十三寄存器中;对第十三寄存器中的数据与第十二寄存器中的数据进行异或运算得到的结果保存到第十四寄存器中,对第十二寄存器中的数据与第二参数进行异或运算得到的结果保存到第十五寄存器中,对第一参数与第十五寄存器中的数据进行异或运算得到的结果保存到第十六寄存器中,对第十六寄存器中的数据与第十五寄存器中的数据进行非运算得到的结果保存到第十七寄存器中,对第十七寄存器中的数据与第十四寄存器中的数据进行异或运算得到的结果作为第四函数模块的输出结果。
在本实施例中,第三函数模块具体用于根据第一参数、第二参数、第四参数、第五参数调用第一函数模块得到的输出结果保存到第十八寄存器中;根据第三参数、第一参数的反码、第六参数、第四参数调用第一函数模块得到的结果保存到第十九寄存器中;将第十八寄存器中的数据和第十九寄存器中的数据进行异或运算得到的结果作为第三函数模块的输出结果。
在本实施例中,第一函数模块具体用于对第四参数的反码与第三参数进行与运算得到的结果保存到第二十寄存器中,对第四参数与第一参数进行与运算得到的结果保存到第二十一寄存器中,对第二十寄存器中的数据与第二十一寄存器中的数据进行或运算得到的结果保存到第二十二寄存器中,对第二参数的反码与第二十二寄存器中的数据进行与运算得到的结果保存到第二十三寄存器中;对第四参数与第三参数进行与运算得到的结果保存到第二十四寄存器中,对第四参数的反码与第一参数进行与运算得到的结果保存到第二十五寄存器中,对第二十四寄存器中的数据与第二十五寄存器中的数据进行或运算得到的结果保存到第二十六寄存器中,将第二参数与第二十六寄存器中的数据进行与运算得到的结果保存到第二十七寄存器中;对第二十三寄存器中的数据与第二十七寄存器中进行或运算得到的结果作为第一函数模块的输出结果。
在本实施例中,第八函数模块具体用于将参数循环右移6位的结果、循环右移11位的结果和循环右移25位的结果进行异或运算得到的结果作为第八函数模块的输出结果。
本实施例中的CPU还包括第二函数模块和第九函数模块,第三计算模块包括:
第十三计算单元,用于用第三缓存区中第1字上的数据作为参数调用第九函数得到的输出结果更新第二十七缓存区中的数据;用第二缓存区中第1字上的数据作为参数调用第九函数得到的输出结果更新第十七缓存区中的第三结果;
第十四计算单元,用于用第二十七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果更新第九缓存区中的数据;用第十七缓存区中的数据更新第十九缓存区中的数据;
第十五计算单元,用于用第三缓存区中第1字上的数据、第2字上的数据、第3字上的数据和第二缓存区中第1字上的数据、第2字上的数据、第3字上的数据作为第一参数、第二参数、第三参数、第四参数、第五参数、第六参数调用第二函数得到的输出结果更新第二十七缓存区中的数据,用第二缓存区中第2字上的数据更新第十七缓存区中的数据;
第十六计算单元,用于用第二十七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果与第九缓存区中的数据进行模加运算并用模加结果更新第九缓存区中的数据;将第十九缓存区中的数据和第十七缓存区中的数据的进行模加运算并用模加结果更新第十九缓存区中的数据;
第十七计算单元,用于用第三缓存区中第7字上的数据更新第三缓存区中第8字上的数据,用第二缓存区中第7字上的数据更新第二缓存区中第8字上的数据,用第三缓存区中中第6字上的数据更新第三缓存区中第7字上的数据,用第二缓存区中第6字上的数据更新第二缓存区中第7字上的数据,用第三缓存区中第5字上的数据更新第三缓存区中第6字上的数据,用第二缓存区中第5字上的数据更新第二缓存区中第6字上的数据;
第十八计算单元,用于用第一缓存区中第4字上的数据和第二缓存区中第4字上的数据作为第一参数和第二参数,调用第四函数得到的输出结果更新第七缓存区中的数据,用第二缓存区中第4字上的数据更新第十七缓存区中的数据;
第十九计算单元,用于用第七缓存区中的数据与第八缓存区中的数据的模加运算结果更新第三缓存区中第5字上的数据;用第十七缓存区中的数据与第十八缓存区中的数据的模加运算结果更新第二缓存区中第5字上的数据;
第二十计算单元,用于用第三缓存区中第5字上的数据和第二缓存区中第5字上的数据作为第一参数和第二参数调用第五函数得到的输出结果更新第三缓存区中第5字上的数据。
在本实施例中,第九函数模块具体用于将参数循环右移2位的结果、循环右移13位的结果和循环右移22位的结果进行异或运算得到的结果作为第九函数模块的输出结果。
在本实施例中,第二函数模块具体用于根据第一参数、第二参数、第三参数、第四参数调用第一函数模块得到的输出结果保存到第二十八寄存器中;根据第一参数、第三参数、第四参数、第六参数调用第一函数模块得到的输出结果保存到第二十九寄存器中;根据第二参数、第三参数、第五参数、第六参数调用第一函数模块得到的输出结果保存到第三十寄存器中;将第二十八寄存器中的数据、第二十九寄存器中的数据、第三十寄存器中的数据进行异或运算得到输出结果。
在本实施例中,第四计算模块包括:
第二十一计算单元,用于用第三缓存区中第3字上的数据更新第三缓存区中第4字上的数据,用第二缓存区中第3字上的数据更新第二缓存区中第4字上的数据,用第三缓存区中第2字上的数据更新第三缓存区中第3字上的数据,用第二缓存区中第2字上的数据更新第二缓存区中第3字上的数据,用第三缓存区中第1字上的数据更新第三缓存区中第2字上的数据,用第二缓存区中第1字上的数据更新第二缓存区中第2字上的数据;
第二十二计算单元,用于将第八缓存区中的数据与第九缓存区中的数据进行模加运算并用模加结果更新第三缓存区中第1字上的数据;将第十八缓存区中的数据与第十九缓存区中的数据进行模加运算并用模加结果更新第二缓存区中第1字上的数据;
第二十三计算单元,用于用第三缓存区中第1字上的数据和第二缓存区中第1字上的数据作为第一参数和第二参数调用第五函数模块得到的输出结果更新第三缓存区中第1字上的数据。
在本实施例中,第一判断模块包括:
第二判断单元,用于分别判断第五缓存区和第六缓存区中的数据的长度与空闲长度之和是否为64个字,是则触发第三判断单元,否则报错;
第三判断单元,用于判断第五缓存区和第六缓存区中的空闲长度是否均为0,是则触发第五计算模块,否则触发第二计算模块。
在本实施例中,第五计算模块包括:
第二十四计算单元,用于依次将第三缓存区中的每一个字作为第一参数、第二缓存区中对应位置上数据作为第二参数调用第四函数模块得到的输出结果保存到第三十一寄存器中,将第三十一寄存器中的数据与第一缓存区中对应位置上的数据做模加运算,并用模加结果更新第一缓存区中对应位置上的数据;
第一作为单元,用于将第一缓存区中的数据作为哈希分组计算结果。
在本实施例中,第二十四计算单元具体用于将第三缓存区中第1字上的数据和第二缓存区中第1字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十二寄存器中,用第三十二寄存器中的数据与第一缓存区中第1字上的数据做模加运算的结果更新第一缓存区中第1字上的数据;将第三缓存区中第2字上的数据和第二缓存区中第2字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十四寄存器中,用第三十四寄存器中数据与第一缓存区中第2字上的数据做模加运算的结果更新第一缓存区中第2字上的数据;将第三缓存区中第3字上的数据和第二缓存区中第3字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十五寄存器中,用第三十五寄存器中数据与第一缓存区中第3字上的数据做模加运算的结果更新第一缓存区中第3字上的数据;将第三缓存区中第4字上的数据和第二缓存区中第4字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十六寄存器中,用第三十六寄存器中数据与第一缓存区中第4字上的数据做模加运算的结果更新第一缓存区中第4字上的数据;将第三缓存区中第5字上的数据和第二缓存区中第5字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十七寄存器中,用第三十七寄存器中数据与第一缓存区中第5字上的数据做模加运算的结果更新第一缓存区中第5字上的数据;将第三缓存区中第6字上的数据和第二缓存区中第6字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十八寄存器中,用第三十八寄存器中数据与第一缓存区中第6字上的数据做模加运算的结果更新第一缓存区中第6字上的数据;将第三缓存区中第7字上的数据和第二缓存区中第7字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十九寄存器中,用第三十九寄存器中数据与第一缓存区中第7字上的数据做模加运算的结果更新第一缓存区中第7字上的数据;将第三缓存区中第8字上的数据和第二缓存区中第8字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第四十寄存器中,用第四十寄存器中数据与第一缓存区中第8字上的数据做模加运算的结果更新第一缓存区中第8字上的数据。
本实施例中的第一缓存区、第二缓存区、第三缓存区、第四缓存区、第五缓存区、第六缓存区、第七缓存区、第八缓存区、第九缓存区、第十缓存区、第十七缓存区、第十八缓存区、第十九缓存区、第二十缓存区、第二十七缓存区可以是独立设置的存储器可以是整个存储芯片上的不同分区。
本发明技术方案能很好的保护哈希数据,通过随机掩码,在整个哈希过程中,所有的哈希数据及中间过程均未出现明文值,很好的抵御能量和电磁等功耗分析,每次分组计算完后均通过正反计数器求和判断是否受到错误攻击,当发生错误攻击时,对已有数据清零,有效防错误攻击。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (42)
1.一种哈希分组计算的安全实现方法,其特征在于,包括:
步骤S1:CPU对第一缓存区中的初始向量和第二缓存区中的高8字上的数据进行计算并将计算结果存储到第三缓存区中,对第四缓存区中的原始数据和所述第二缓存区中的低16字上的数据进行计算并将计算结果存储到第五缓存区;将所述第二缓存区中的低16字上的数据存储到第六缓存区中;所述第二缓存区的大小为24字;所述第五缓存区和第六缓存区的大小为64字;
步骤S2:所述CPU根据所述第五缓存区中的数据和所述第六缓存区中的数据计算生成第三数值和第三结果并分别保存在第七缓存区和第十七缓存区中,根据所述第七缓存区中的数据、所述第十七缓存区中的数据和所述第五缓存区中的数据进行计算并将计算结果顺序存储到所述第五缓存区中,根据所述第七缓存区中的数据和所述第十七缓存区中的数据、所述第六缓存区中的数据进行计算并将计算结果顺序存储到所述第六缓存区中,根据所述第五缓存区中的数据、所述第六缓存区中的数据、所述第七缓存区中的数据和所述第十七缓存区中的数据进行计算得到第一数值和第一结果并分别存储到第八缓存区和第十八缓存区中,根据所述第三缓存区中的数据计算生成第三数据并存储到第二十七缓存区中,用所述第二十七缓存区中的数据和第十七缓存区中的数据更新所述第八缓存区中的数据和第十八缓存区中的数据;
步骤S3:所述CPU用所述第三缓存区中的数据更新所述第七缓存区中的第三数据,用所述第二缓存区中的数据更新所述第十七缓存区中的数据,根据所述第二十七缓存区中的数据和所述第十七缓存区中的数据生成第二数值和第二结果并分别存储到第九缓存区和第十九缓存区中;根据所述第三缓存区中的数据和所述第二缓存区中的第一随机数更新所述第七缓存区中的数据和所述第十七缓存区中的数据;根据所述第十七缓存区中的数据和所述二十七缓存区中的数据更新所述第九缓存区中的数据和所述第十九缓存区中的数据;
步骤S4:所述CPU根据所述第八缓存区中的数据、所述第十八缓存区中的数据、所述第九缓存区中的数据、第十九缓存区中的数据、所述第七缓存区中的数据和所述第十七缓存区中的数据更新所述第三缓存区中的数据;
步骤S5:所述CPU判断所述第五缓存区中的数据的长度和所述第六缓存区中数据的长度是否均为64个字,是则执行步骤S6,否则执行步骤S2;
步骤S6:所述CPU用所述第三缓存区中的数据和所述第二缓存区中的高8字上的数据更新所述第一缓存区中的数据并将所述第一缓存区中的数据作为哈希分组计算结果。
2.如权利要求1所述的方法,其特征在于,步骤S1之前还包括:所述CPU判断输入数据的长度是否为预设长度,是则按照所述预设长度对所述输入数据进行分组并将第一个分组数据作为初始向量存储到所述第一缓存区中,否则使用0将输入数据填充至预设长度,然后按照预设长度对填充后的输入数据进行分组并将第一个分组数据作为初始向量存储到所述第一缓存区中。
3.如权利要求2所述的方法,其特征在于,所述步骤S6之后还包括:判断所述输入数据的所有分组数据是否全部处理完成,是则结束,否则将下一个未处理的分组数据作为初始向量存储到所述第一缓存区,返回步骤S1。
4.如权利要求1所述的方法,其特征在于,所述步骤S1包括:所述CPU对第一缓存区中的初始向量和第二缓存区中的高8字上的数据进行异或运算并将计算结果存储到第三缓存区中,对所述第四缓存区中的原始数据和所述第二缓存区中的低16字上的数据进行模减运算并将计算结果存储到第五缓存区;将所述第二缓存区中的低16字上的数据存储到第六缓存区中。
5.如权利要求4所述的方法,其特征在于,所述步骤S1之前还包括:所述CPU生成长度为24字的第一随机数并存储到所述第二缓存区中。
6.如权利要求1所述的方法,其特征在于,所述步骤S2之前还包括:所述CPU将所述第五缓存区中的第一个空闲字作为当前位置,将所述第六缓存区中的第一个空闲字作为当前位置。
7.如权利要求6所述的方法,其特征在于,所述步骤S2包括:
步骤S2-1:所述CPU将所述第五缓存区中当前位置向前2个字的位置上的数据作为第五函数的第一参数、所述第六缓存区中当前位置向前2个字的位置上的数据作为第五函数的第二参数调用第五函数得到输出结果并存储到所述第七缓存区中;
步骤S2-2:所述CPU用所述第七缓存区中的数据作为参数调用第六函数得到的输出结果更新所述第七缓存区中的数据,将所述第六缓存区中当前位置向前2个字的位置上的数据作为参数调用第六函数得到的输出结果更新所述第十七缓存区中的数据;
步骤S2-3:所述CPU将所述第五缓存区中当前位置向前15个字的位置上的数据作为第一参数、所述第六缓存区中当前位置向前15个字的位置上的数据作为第二参数调用第五函数得到的输出结果存储到第十缓存区中;
步骤S2-4:所述CPU用所述第五缓存区中当前位置向前15个字的位置上的数据作为参数调用第七函数得到的输出结果更新所述第十缓存区中的数据,将所述第六缓存区中当前位置向前15个字的位置上的数据作为参数调用第七函数得到输出结果并存储到第二十缓存区中;
步骤S2-5:所述CPU将所述第七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果、所述第十缓存区中的数据和第二十缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果、所述第五缓存区中当前位置向前7个字的位置上的数据、所述第五缓存区中当前位置向前16个字的位置上的数据进行模加运算并将模加结果顺序存储到所述第五缓存区中;
步骤S2-6:所述CPU将所述第十七缓存区中的数据、所述第二十缓存区中的数据、所述第六缓存区中当前位置向前7个字的位置上的数据、所述第六缓存区中当前位置向前16个字的位置上的数据进行模加运算并将模加结果并顺序存储到所述第六缓存区中;
步骤S2-7:所述CPU将所述第五缓存区中当前位置上的数据、预置常数和所述第三缓存区中第8字上的数据进行模加运算并将模加结果存储到所述第八缓存区中;
步骤S2-8:所述CPU将所述第六缓存区中当前位置上的数据与所述第二缓存区中第8字上的数字进行模加运算并将模加结果存储到所述第八缓存区中;
步骤S2-9:所述CPU用所述第三缓存区中第5字上的数据作为参数调用第八函数得到的输出结果更新所述第二十七缓存区中的数据;用所述第二缓存区中第5字上的数据作为参数调用第八函数得到的输出结果更新所述第十七缓存区中的数据;
步骤S2-10:所述CPU将所述第二十七缓存区中的数据和第十七缓存区中的数据作为参数调用第四函数得到的输出结果与所述第八缓存区中的数据的进行模加运算并用模加结果更新所述第八缓存区中的数据;用所述第十八缓存区中的数据与所述第十七缓存区中的数据的模加运算结果更新所述第八缓存区中的数据;
步骤S2-11:所述CPU用所述第三缓存区中第5字上的数据、第6字上的数据、第7字上的数据和所述第二缓存区中第5字上的数据、第6字上的数据、第7字上的数据作为第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,调用第三函数得到的输出结果更新所述第二十七缓存区中的数据,用所述第二缓存区中第5字上的数据与第7字上的数据做异或运算的结果更新所述第十七缓存区中的数据;
步骤S2-12:所述CPU将所述第二十七缓存区中的数据和所述第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果与所述第八缓存区中的数据进行模加结果并用模加结果更新所述第八缓存区中的数据;用所述第十八缓存区中的数据与所述第十七缓存区中的数据进行模加运算并用模加结果更新所述第十八缓存区中的数据。
8.如权利要求7所述的方法,其特征在于,所述第五函数的实现过程为:
步骤a1:所述CPU生成第二随机数并保存到第一寄存器中,对所述第一寄存器中的第二随机数进行翻倍运算得到的结果保存到第二寄存器中,对所述第一寄存器中的数据与第二参数进行异或运算得到的结果保存到第三寄存器中,对所述第一寄存器中的数据与所述第三寄存器中的数据进行与运算得到的结果保存到第四寄存器中,对所述第二寄存器中的数据与第一参数进行异或运算得到的结果保存到第五寄存器中,对所述第一寄存器中的数据与所述第五寄存器中的数据进行异或运算得到的结果保存到第六寄存器中,对所述第六寄存器中的数据与所述第二参数进行与运算得到的结果保存到第七寄存器中,对所述第四寄存器中的数据与所述第七寄存器中的数据进行异或运算得到的结果保存到第八寄存器中,对所述第二寄存器中的数据与所述第二参数进行与运算得到的结果保存到第九寄存器中,对所述第八寄存器中的数据与所述第九寄存器中的数据进行异或运算得到的结果保存到第十寄存器中;
步骤a2:所述CPU对所述第二寄存器中的数据与所述第二参数进行与运算得到的结果保存到第十一寄存器中;用所述第十一寄存器中的数据与所述第十寄存器中的数据进行异或运算的结果更新所述第十一寄存器中的数据;用所述第二寄存器中的数据与所述第一参数进行与运算的结果更新所述第二寄存器中的数据;用所述第十一寄存器中的数据与所述第二寄存器中的数据进行异或运算的结果更新所述第十一寄存器中的数据,用所述第十一寄存器中的数据的翻倍运算结果更新所述第二寄存器中的数据;
步骤a3:所述CPU判断循环次数是否为预设值,是则执行步骤a4,否则更新循环次数,返回步骤a2;
步骤a4:所述CPU将所述第五寄存器中的数据与所述第二寄存器中的数据进行异或运算的结果作为第五函数的输出结果。
9.如权利要求7所述的方法,其特征在于,所述第六函数的实现过程为:所述CPU将参数循环右移17位的结果、循环右移19位的结果和右移10位的结果做异或运算得到的结果作为第六函数的输出结果。
10.如权利要求7所述的方法,其特征在于,所述第七函数的实现过程为:所述CPU将参数循环右移7位的结果、循环右移18位的结果、右移3位的结果做异或运算得到的结果作为第七函数的输出结果。
11.如权利要求7所述的方法,其特征在于,所述第四函数的实现过程为:所述CPU生成第三随机数并保存到第十二寄存器中,对第一参数与所述第十二寄存器中的随机数进行异或运算得到的结果保存到第十二寄存器中,对所述第十二寄存器中的数据与所述第十二寄存器中的数据进行非运算得到的结果保存到第十三寄存器中;对所述第十三寄存器中的数据与所述第十二寄存器中的数据进行异或运算得到的结果保存到第十四寄存器中,对所述第十二寄存器中的数据与第二参数进行异或运算得到的结果保存到第十五寄存器中,对所述第一参数与所述第十五寄存器中的数据进行异或运算得到的结果保存到第十六寄存器中,对第十六寄存器中的数据与所述第十五寄存器中的数据进行非运算得到的结果保存到第十七寄存器中,对所述第十七寄存器中的数据与所述第十四寄存器中的数据进行异或运算得到的结果作为第四函数的输出结果。
12.如权利要求7所述的方法,其特征在于,所述第三函数的实现过程为:所述CPU根据第一参数、第二参数、第四参数、第五参数调用第一函数得到的输出结果保存到第十八寄存器中;根据第三参数、第一参数的反码、第六参数、第四参数调用第一函数得到的结果保存到第十九寄存器中;将所述第十八寄存器中的数据和所述第十九寄存器中的数据进行异或运算得到的结果作为第三函数的输出结果。
13.如权利要求12所述的方法,其特征在于,所述第一函数的实现过程具体为:所述CPU对所述第四参数的反码与第三参数进行与运算得到的结果保存到第二十寄存器中,对所述第四参数与所述第一参数进行与运算得到的结果保存到第二十一寄存器中,对所述第二十寄存器中的数据与所述第二十一寄存器中的数据进行或运算得到的结果保存到第二十二寄存器中,对所述第二参数的反码与所述第二十二寄存器中的数据进行与运算得到的结果保存到第二十三寄存器中;对所述第四参数与所述第三参数进行与运算得到的结果保存到第二十四寄存器中,对所述第四参数的反码与所述第一参数进行与运算得到的结果保存到第二十五寄存器中,对所述第二十四寄存器中的数据与所述第二十五寄存器中的数据进行或运算得到的结果保存到第二十六寄存器中,将所述第二参数与所述第二十六寄存器中的数据进行与运算得到的结果保存到第二十七寄存器中;对所述第二十三寄存器中的数据与所述第二十七寄存器中进行或运算得到的结果作为第一函数的输出结果。
14.如权利要求7所述的方法,其特征在于,所述第八函数的实现过程为:所述CPU将参数循环右移6位的结果、循环右移11位的结果和循环右移25位的结果进行异或运算得到的结果作为第八函数的输出结果。
15.如权利要求7所述的方法,其特征在于,所述步骤S3包括:
步骤S3-1:所述CPU用第三缓存区中第1字上的数据作为参数调用第九函数得到的输出结果更新所述第二十七缓存区中的数据;用第二缓存区中第1字上的数据作为参数调用第九函数得到的输出结果更新所述第十七缓存区中的第三结果;
步骤S3-2:所述CPU用所述第二十七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果更新所述第九缓存区中的数据;用所述第十七缓存区中的数据更新所述第十九缓存区中的数据;
步骤S3-3:所述CPU用第三缓存区中第1字上的数据、第2字上的数据、第3字上的数据和所述第二缓存区中第1字上的数据、第2字上的数据、第3字上的数据作为第一参数、第二参数、第三参数、第四参数、第五参数、第六参数调用第二函数得到的输出结果更新所述第二十七缓存区中的数据,用所述第二缓存区中第2字上的数据更新所述第十七缓存区中的数据;
步骤S3-4:所述CPU用所述第二十七缓存区中的数据和所述第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果与所述第九缓存区中的数据进行模加运算并用模加结果更新所述第九缓存区中的数据;将所述第十九缓存区中的数据和所述第十七缓存区中的数据的进行模加运算并用模加结果更新所述第十九缓存区中的数据;
步骤S3-5:所述CPU用所述第三缓存区中第7字上的数据更新所述第三缓存区中第8字上的数据,用所述第二缓存区中第7字上的数据更新所述第二缓存区中第8字上的数据,用所述第三缓存区中中第6字上的数据更新所述第三缓存区中第7字上的数据,用所述第二缓存区中第6字上的数据更新所述第二缓存区中第7字上的数据,用所述第三缓存区中第5字上的数据更新所述第三缓存区中第6字上的数据,用所述第二缓存区中第5字上的数据更新所述第二缓存区中第6字上的数据;
步骤S3-6:所述CPU用所述第一缓存区中第4字上的数据和所述第二缓存区中第4字上的数据作为第一参数和第二参数,调用第四函数得到的输出结果更新所述第七缓存区中的数据,用所述第二缓存区中第4字上的数据更新所述第十七缓存区中的数据;
步骤S3-7:所述CPU用所述第七缓存区中的数据与所述第八缓存区中的数据的模加运算结果更新所述第三缓存区中第5字上的数据;用所述第十七缓存区中的数据与所述第十八缓存区中的数据的模加运算结果更新所述第二缓存区中第5字上的数据;
步骤S3-8:所述CPU用所述第三缓存区中第5字上的数据和所述第二缓存区中第5字上的数据作为第一参数和第二参数调用第五函数得到的输出结果更新所述第三缓存区中第5字上的数据。
16.如权利要求15所述的方法,其特征在于,所述第九函数的实现过程为:所述CPU将参数循环右移2位的结果、循环右移13位的结果和循环右移22位的结果进行异或运算得到的结果作为第九函数的输出结果。
17.如权利要求15所述的方法,其特征在于,所述第二函数的具体实现过程为:所述CPU根据第一参数、第二参数、第三参数、第四参数调用第一函数得到的输出结果保存到第二十八寄存器中;根据第一参数、第三参数、第四参数、第六参数调用第一函数得到的输出结果保存到第二十九寄存器中;根据第二参数、第三参数、第五参数、第六参数调用第一函数得到的输出结果保存到第三十寄存器中;将所述第二十八寄存器中的数据、所述第二十九寄存器中的数据、所述第三十寄存器中的数据进行异或运算得到输出结果。
18.如权利要求15所述的方法,其特征在于,所述步骤S4包括:
步骤S4-1:所述CPU用所述第三缓存区中第3字上的数据更新所述第三缓存区中第4字上的数据,用所述第二缓存区中第3字上的数据更新所述第二缓存区中第4字上的数据,用所述第三缓存区中第2字上的数据更新所述第三缓存区中第3字上的数据,用所述第二缓存区中第2字上的数据更新所述第二缓存区中第3字上的数据,用所述第三缓存区中第1字上的数据更新所述第三缓存区中第2字上的数据,用所述第二缓存区中第1字上的数据更新所述第二缓存区中第2字上的数据;
步骤S4-2:所述CPU将所述第八缓存区中的数据与所述第九缓存区中的数据进行模加运算并用模加结果更新所述第三缓存区中第1字上的数据;将所述第十八缓存区中的数据与所述第十九缓存区中的数据进行模加运算并用模加结果更新所述第二缓存区中第1字上的数据;
步骤S4-3:所述CPU用所述第三缓存区中第1字上的数据和所述第二缓存区中第1字上的数据作为第一参数和第二参数调用第五函数得到的输出结果更新所述第三缓存区中第1字上的数据。
19.如权利要求18所述的方法,其特征在于,所述步骤S5包括:
步骤S5-1:所述CPU分别判断所述第五缓存区和所述第六缓存区中的数据的长度与空闲长度之和是否为64个字,是则执行步骤S5-2,否则报错;
步骤S5-2:所述CPU判断第五缓存区和第六缓存区中的空闲长度是否均为0,是则执行步骤S6,否则返回步骤S2。
20.如权利要求18所述的方法,其特征在于,所述步骤S6中的用第三缓存区中的数据和所述第二缓存区中的高8字上的数据更新所述第一缓存区中的数据包括:
步骤Y:所述CPU依次将所述第三缓存区中的每一个字作为第一参数、所述第二缓存区中对应位置上数据作为第二参数调用第四函数得到的输出结果保存到第三十一寄存器中,将所述第三十一寄存器中的数据与所述第一缓存区中对应位置上的数据做模加运算,并用模加结果更新所述第一缓存区中对应位置上的数据。
21.如权利要求20所述的方法,其特征在于,所述步骤Y具体为:所述CPU将所述第三缓存区中第1字上的数据和所述第二缓存区中第1字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十二寄存器中,用所述第三十二寄存器中的数据与所述第一缓存区中第1字上的数据做模加运算的结果更新所述第一缓存区中第1字上的数据;将所述第三缓存区中第2字上的数据和所述第二缓存区中第2字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十四寄存器中,用所述第三十四寄存器中数据与所述第一缓存区中第2字上的数据做模加运算的结果更新所述第一缓存区中第2字上的数据;将所述第三缓存区中第3字上的数据和所述第二缓存区中第3字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十五寄存器中,用所述第三十五寄存器中数据与所述第一缓存区中第3字上的数据做模加运算的结果更新所述第一缓存区中第3字上的数据;将所述第三缓存区中第4字上的数据和所述第二缓存区中第4字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十六寄存器中,用所述第三十六寄存器中数据与所述第一缓存区中第4字上的数据做模加运算的结果更新所述第一缓存区中第4字上的数据;将所述第三缓存区中第5字上的数据和所述第二缓存区中第5字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十七寄存器中,用所述第三十七寄存器中数据与所述第一缓存区中第5字上的数据做模加运算的结果更新所述第一缓存区中第5字上的数据;将所述第三缓存区中第6字上的数据和所述第二缓存区中第6字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十八寄存器中,用所述第三十八寄存器中数据与所述第一缓存区中第6字上的数据做模加运算的结果更新所述第一缓存区中第6字上的数据;将所述第三缓存区中第7字上的数据和所述第二缓存区中第7字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第三十九寄存器中,用所述第三十九寄存器中数据与所述第一缓存区中第7字上的数据做模加运算的结果更新所述第一缓存区中第7字上的数据;将所述第三缓存区中第8字上的数据和所述第二缓存区中第8字上的数据作为第一参数和第二参数调用第四函数得到的输出结果保存到第四十寄存器中,用所述第四十寄存器中数据与所述第一缓存区中第8字上的数据做模加运算的结果更新所述第一缓存区中第8字上的数据。
22.一种哈希分组计算的安全实现设备,其特征在于,所述设备包括CPU和存储器,所述存储器包括第一缓存区、第二缓存区、第三缓存区、第四缓存区、第五缓存区、第六缓存区、第七缓存区、第八缓存区、第九缓存区、第十七缓存区、第十八缓存区、第十九缓存区、第二十七缓存区,所述CPU包括第一计算模块、第二计算模块、第三计算模块、第四计算模块、第一判断模块和第五计算模块;
所述第一计算模块,用于对第一缓存区中的初始向量和第二缓存区中的高8字上的数据进行计算并将计算结果存储到第三缓存区中,对第四缓存区中的原始数据和所述第二缓存区中的低16字上的数据进行计算并将计算结果存储到第五缓存区;将所述第二缓存区中的低16字上的数据存储到第六缓存区中;所述第二缓存区的大小为24字;所述第五缓存区和第六缓存区的大小为64字;
所述第二计算模块,用于根据所述第五缓存区中的数据和所述第六缓存区中的数据计算生成第三数值和第三结果并分别保存在第七缓存区和第十七缓存区中,根据所述第七缓存区中的数据、所述第十七缓存区中的数据和所述第五缓存区中的数据进行计算并将计算结果顺序存储到所述第五缓存区中,根据所述第七缓存区中的数据和所述第十七缓存区中的数据、所述第六缓存区中的数据进行计算并将计算结果顺序存储到所述第六缓存区中,根据所述第五缓存区中的数据、所述第六缓存区中的数据、所述第七缓存区中的数据和所述第十七缓存区中的数据进行计算得到第一数值和第一结果并分别存储到第八缓存区和第十八缓存区中,根据所述第三缓存区中的数据计算生成第三数据并存储到第二十七缓存区中,用所述第二十七缓存区中的数据和第十七缓存区中的数据更新所述第八缓存区中的数据和第十八缓存区中的数据;
所述第三计算模块,用于用所述第三缓存区中的数据更新所述第七缓存区中的第三数据,用所述第二缓存区中的数据更新所述第十七缓存区中的数据,根据所述第二十七缓存区中的数据和所述第十七缓存区中的数据生成第二数值和第二结果并分别存储到第九缓存区和第十九缓存区中;根据所述第三缓存区中的数据和所述第二缓存区中的第一随机数更新所述第七缓存区中的数据和所述第十七缓存区中的数据;根据所述第十七缓存区中的数据和所述二十七缓存区中的数据更新所述第九缓存区中的数据和所述第十九缓存区中的数据;
所述第四计算模块,用于根据所述第八缓存区中的数据、所述第十八缓存区中的数据、所述第九缓存区中的数据、第十九缓存区中的数据、所述第七缓存区中的数据和所述第十七缓存区中的数据更新所述第三缓存区中的数据;
所述第一判断模块,用于判断所述第五缓存区中的数据的长度和所述第六缓存区中数据的长度是否均为64个字,是则触发第五计算模块,否则触发所述第二计算模块;
所述第五计算模块,用于用所述第三缓存区中的数据和所述第二缓存区中的高8字上的数据更新所述第一缓存区中的数据并将所述第一缓存区中的数据作为哈希分组计算结果。
23.如权利要求22所述的设备,其特征在于,所述CPU还包括第二判断模块,用于判断输入数据的长度是否为预设长度,是则按照所述预设长度对所述输入数据进行分组并将第一个分组数据作为初始向量存储到所述第一缓存区中,否则使用0将输入数据填充至预设长度,然后按照预设长度对填充后的输入数据进行分组并将第一个分组数据作为初始向量存储到所述第一缓存区中。
24.如权利要求23所述的设备,其特征在于,所述CPU还包括第三判断模块,用于判断所述输入数据的所有分组数据是否全部处理完成,是则结束,否则将下一个未处理的分组数据作为初始向量存储到所述第一缓存区,触发第一计算模块。
25.如权利要求22所述的设备,其特征在于,所述第一计算模块具体用于对第一缓存区中的初始向量和第二缓存区中的高8字上的数据进行异或运算并将计算结果存储到第三缓存区中,对所述第四缓存区中的原始数据和所述第二缓存区中的低16字上的数据进行模减运算并将计算结果存储到第五缓存区;将所述第二缓存区中的低16字上的数据存储到第六缓存区中。
26.如权利要求25所述的设备,其特征在于,所述CPU还包括生成存储模块,用于生成长度为24字的第一随机数并存储到所述第二缓存区中。
27.如权利要求22所述的设备,其特征在于,所述CPU还包括作为模块,用于将所述第五缓存区中的第一个空闲字作为当前位置,将所述第六缓存区中的第一个空闲字作为当前位置。
28.如权利要求27所述的设备,其特征在于,所述存储器还包括第十缓存区和第二十缓存区,所述CPU还包括第一函数模块、第三函数模块、第四函数模块、第五函数模块、第六函数模块、第七函数模块、第八函数模块,所述第二计算模块包括:
第一计算单元,用于将所述第五缓存区中当前位置向前2个字的位置上的数据作为第五函数的第一参数、所述第六缓存区中当前位置向前2个字的位置上的数据作为第五函数的第二参数调用第五函数得到输出结果并存储到所述第七缓存区中;
第二计算单元,用于用所述第七缓存区中的数据作为参数调用第六函数得到的输出结果更新所述第七缓存区中的数据,将所述第六缓存区中当前位置向前2个字的位置上的数据作为参数调用第六函数得到的输出结果更新所述第十七缓存区中的数据;
第三计算单元,用于将所述第五缓存区中当前位置向前15个字的位置上的数据作为第一参数、所述第六缓存区中当前位置向前15个字的位置上的数据作为第二参数调用第五函数得到的输出结果存储到第十缓存区中;
第四计算单元,用于用所述第五缓存区中当前位置向前15个字的位置上的数据作为参数调用第七函数得到的输出结果更新所述第十缓存区中的数据,将所述第六缓存区中当前位置向前15个字的位置上的数据作为参数调用第七函数得到输出结果并存储到第二十缓存区中;
第五计算单元,用于将所述第七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果、所述第十缓存区中的数据和第二十缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果、所述第五缓存区中当前位置向前7个字的位置上的数据、所述第五缓存区中当前位置向前16个字的位置上的数据进行模加运算并将模加结果顺序存储到所述第五缓存区中;
第六计算单元,用于将所述第十七缓存区中的数据、所述第二十缓存区中的数据、所述第六缓存区中当前位置向前7个字的位置上的数据、所述第六缓存区中当前位置向前16个字的位置上的数据进行模加运算并将模加结果并顺序存储到所述第六缓存区中;
第七计算单元,用于将所述第五缓存区中当前位置上的数据、预置常数和所述第三缓存区中第8字上的数据进行模加运算并将模加结果存储到所述第八缓存区中;
第八计算单元,用于将所述第六缓存区中当前位置上的数据与所述第二缓存区中第8字上的数字进行模加运算并将模加结果存储到所述第八缓存区中;
第九计算单元,用于用所述第三缓存区中第5字上的数据作为参数调用第八函数得到的输出结果更新所述第二十七缓存区中的数据;用所述第二缓存区中第5字上的数据作为参数调用第八函数得到的输出结果更新所述第十七缓存区中的数据;
第十计算单元,用于将所述第二十七缓存区中的数据和第十七缓存区中的数据作为参数调用第四函数得到的输出结果与所述第八缓存区中的数据的进行模加运算并用模加结果更新所述第八缓存区中的数据;用所述第十八缓存区中的数据与所述第十七缓存区中的数据的模加运算结果更新所述第八缓存区中的数据;
第十一计算单元,用于用所述第三缓存区中第5字上的数据、第6字上的数据、第7字上的数据和所述第二缓存区中第5字上的数据、第6字上的数据、第7字上的数据作为第一参数、第二参数、第三参数、第四参数、第五参数、第六参数,调用第三函数得到的输出结果更新所述第二十七缓存区中的数据,用所述第二缓存区中第5字上的数据与第7字上的数据做异或运算的结果更新所述第十七缓存区中的数据;
第十二计算单元,用于将所述第二十七缓存区中的数据和所述第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果与所述第八缓存区中的数据进行模加结果并用模加结果更新所述第八缓存区中的数据;用所述第十八缓存区中的数据与所述第十七缓存区中的数据进行模加运算并用模加结果更新所述第十八缓存区中的数据。
29.如权利要求28所述的设备,其特征在于,所述第五函数模块包括:
第一生成保存单元,用于生成第二随机数并保存到第一寄存器中,对所述第一寄存器中的第二随机数进行翻倍运算得到的结果保存到第二寄存器中,对所述第一寄存器中的数据与第二参数进行异或运算得到的结果保存到第三寄存器中,对所述第一寄存器中的数据与所述第三寄存器中的数据进行与运算得到的结果保存到第四寄存器中,对所述第二寄存器中的数据与第一参数进行异或运算得到的结果保存到第五寄存器中,对所述第一寄存器中的数据与所述第五寄存器中的数据进行异或运算得到的结果保存到第六寄存器中,对所述第六寄存器中的数据与所述第二参数进行与运算得到的结果保存到第七寄存器中,对所述第四寄存器中的数据与所述第七寄存器中的数据进行异或运算得到的结果保存到第八寄存器中,对所述第二寄存器中的数据与所述第二参数进行与运算得到的结果保存到第九寄存器中,对所述第八寄存器中的数据与所述第九寄存器中的数据进行异或运算得到的结果保存到第十寄存器中;
第一保存更新单元,用于对所述第二寄存器中的数据与所述第二参数进行与运算得到的结果保存到第十一寄存器中;用所述第十一寄存器中的数据与所述第十寄存器中的数据进行异或运算的结果更新所述第十一寄存器中的数据;用所述第二寄存器中的数据与所述第一参数进行与运算的结果更新所述第二寄存器中的数据;用所述第十一寄存器中的数据与所述第二寄存器中的数据进行异或运算的结果更新所述第十一寄存器中的数据,用所述第十一寄存器中的数据的翻倍运算结果更新所述第二寄存器中的数据;
第一判断单元,用于判断循环次数是否为预设值,是则触发第一运算单元,否则更新循环次数,触发所述第一保存更新单元;
所述第一运算单元,用于将所述第五寄存器中的数据与所述第二寄存器中的数据进行异或运算的结果作为第五函数模块的输出结果。
30.如权利要求28所述的设备,其特征在于,所述第六函数模块具体用于将参数循环右移17位的结果、循环右移19位的结果和右移10位的结果做异或运算得到的结果作为第六函数模块的输出结果。
31.如权利要求28所述的设备,其特征在于,所述第七函数模块具体用于将参数循环右移7位的结果、循环右移18位的结果、右移3位的结果做异或运算得到的结果作为第七函数模块的输出结果。
32.如权利要求28所述的设备,其特征在于,所述第四函数模块具体用于生成第三随机数并保存到第十二寄存器中,对第一参数与所述第十二寄存器中的随机数进行异或运算得到的结果保存到第十二寄存器中,对所述第十二寄存器中的数据与所述第十二寄存器中的数据进行非运算得到的结果保存到第十三寄存器中;对所述第十三寄存器中的数据与所述第十二寄存器中的数据进行异或运算得到的结果保存到第十四寄存器中,对所述第十二寄存器中的数据与第二参数进行异或运算得到的结果保存到第十五寄存器中,对所述第一参数与所述第十五寄存器中的数据进行异或运算得到的结果保存到第十六寄存器中,对第十六寄存器中的数据与所述第十五寄存器中的数据进行非运算得到的结果保存到第十七寄存器中,对所述第十七寄存器中的数据与所述第十四寄存器中的数据进行异或运算得到的结果作为第四函数模块的输出结果。
33.如权利要求28所述的设备,其特征在于,所述第三函数模块具体用于根据第一参数、第二参数、第四参数、第五参数调用第一函数模块得到的输出结果保存到第十八寄存器中;根据第三参数、第一参数的反码、第六参数、第四参数调用第一函数模块得到的结果保存到第十九寄存器中;将所述第十八寄存器中的数据和所述第十九寄存器中的数据进行异或运算得到的结果作为第三函数模块的输出结果。
34.如权利要求33所述的设备,其特征在于,所述第一函数模块具体用于对所述第四参数的反码与第三参数进行与运算得到的结果保存到第二十寄存器中,对所述第四参数与所述第一参数进行与运算得到的结果保存到第二十一寄存器中,对所述第二十寄存器中的数据与所述第二十一寄存器中的数据进行或运算得到的结果保存到第二十二寄存器中,对所述第二参数的反码与所述第二十二寄存器中的数据进行与运算得到的结果保存到第二十三寄存器中;对所述第四参数与所述第三参数进行与运算得到的结果保存到第二十四寄存器中,对所述第四参数的反码与所述第一参数进行与运算得到的结果保存到第二十五寄存器中,对所述第二十四寄存器中的数据与所述第二十五寄存器中的数据进行或运算得到的结果保存到第二十六寄存器中,将所述第二参数与所述第二十六寄存器中的数据进行与运算得到的结果保存到第二十七寄存器中;对所述第二十三寄存器中的数据与所述第二十七寄存器中进行或运算得到的结果作为第一函数模块的输出结果。
35.如权利要求28所述的设备,其特征在于,所述第八函数模块具体用于将参数循环右移6位的结果、循环右移11位的结果和循环右移25位的结果进行异或运算得到的结果作为第八函数模块的输出结果。
36.如权利要求28所述的设备,其特征在于,所述CPU还包括第二函数模块和第九函数模块,所述第三计算模块包括:
第十三计算单元,用于用第三缓存区中第1字上的数据作为参数调用第九函数得到的输出结果更新所述第二十七缓存区中的数据;用第二缓存区中第1字上的数据作为参数调用第九函数得到的输出结果更新所述第十七缓存区中的第三结果;
第十四计算单元,用于用所述第二十七缓存区中的数据和第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果更新所述第九缓存区中的数据;用所述第十七缓存区中的数据更新所述第十九缓存区中的数据;
第十五计算单元,用于用第三缓存区中第1字上的数据、第2字上的数据、第3字上的数据和所述第二缓存区中第1字上的数据、第2字上的数据、第3字上的数据作为第一参数、第二参数、第三参数、第四参数、第五参数、第六参数调用第二函数得到的输出结果更新所述第二十七缓存区中的数据,用所述第二缓存区中第2字上的数据更新所述第十七缓存区中的数据;
第十六计算单元,用于用所述第二十七缓存区中的数据和所述第十七缓存区中的数据作为第一参数和第二参数调用第四函数得到的输出结果与所述第九缓存区中的数据进行模加运算并用模加结果更新所述第九缓存区中的数据;将所述第十九缓存区中的数据和所述第十七缓存区中的数据的进行模加运算并用模加结果更新所述第十九缓存区中的数据;
第十七计算单元,用于用所述第三缓存区中第7字上的数据更新所述第三缓存区中第8字上的数据,用所述第二缓存区中第7字上的数据更新所述第二缓存区中第8字上的数据,用所述第三缓存区中中第6字上的数据更新所述第三缓存区中第7字上的数据,用所述第二缓存区中第6字上的数据更新所述第二缓存区中第7字上的数据,用所述第三缓存区中第5字上的数据更新所述第三缓存区中第6字上的数据,用所述第二缓存区中第5字上的数据更新所述第二缓存区中第6字上的数据;
第十八计算单元,用于用所述第一缓存区中第4字上的数据和所述第二缓存区中第4字上的数据作为第一参数和第二参数,调用第四函数得到的输出结果更新所述第七缓存区中的数据,用所述第二缓存区中第4字上的数据更新所述第十七缓存区中的数据;
第十九计算单元,用于用所述第七缓存区中的数据与所述第八缓存区中的数据的模加运算结果更新所述第三缓存区中第5字上的数据;用所述第十七缓存区中的数据与所述第十八缓存区中的数据的模加运算结果更新所述第二缓存区中第5字上的数据;
第二十计算单元,用于用所述第三缓存区中第5字上的数据和所述第二缓存区中第5字上的数据作为第一参数和第二参数调用第五函数得到的输出结果更新所述第三缓存区中第5字上的数据。
37.如权利要求36所述的设备,其特征在于,所述第九函数模块具体用于将参数循环右移2位的结果、循环右移13位的结果和循环右移22位的结果进行异或运算得到的结果作为第九函数模块的输出结果。
38.如权利要求36所述的设备,其特征在于,所述第二函数模块具体用于根据第一参数、第二参数、第三参数、第四参数调用第一函数模块得到的输出结果保存到第二十八寄存器中;根据第一参数、第三参数、第四参数、第六参数调用第一函数模块得到的输出结果保存到第二十九寄存器中;根据第二参数、第三参数、第五参数、第六参数调用第一函数模块得到的输出结果保存到第三十寄存器中;将所述第二十八寄存器中的数据、所述第二十九寄存器中的数据、所述第三十寄存器中的数据进行异或运算得到输出结果。
39.如权利要求36所述的设备,其特征在于,所述第四计算模块包括:
第二十一计算单元,用于用所述第三缓存区中第3字上的数据更新所述第三缓存区中第4字上的数据,用所述第二缓存区中第3字上的数据更新所述第二缓存区中第4字上的数据,用所述第三缓存区中第2字上的数据更新所述第三缓存区中第3字上的数据,用所述第二缓存区中第2字上的数据更新所述第二缓存区中第3字上的数据,用所述第三缓存区中第1字上的数据更新所述第三缓存区中第2字上的数据,用所述第二缓存区中第1字上的数据更新所述第二缓存区中第2字上的数据;
第二十二计算单元,用于将所述第八缓存区中的数据与所述第九缓存区中的数据进行模加运算并用模加结果更新所述第三缓存区中第1字上的数据;将所述第十八缓存区中的数据与所述第十九缓存区中的数据进行模加运算并用模加结果更新所述第二缓存区中第1字上的数据;
第二十三计算单元,用于用所述第三缓存区中第1字上的数据和所述第二缓存区中第1字上的数据作为第一参数和第二参数调用第五函数模块得到的输出结果更新所述第三缓存区中第1字上的数据。
40.如权利要求39所述的设备,其特征在于,所述第一判断模块包括:
第二判断单元,用于分别判断所述第五缓存区和所述第六缓存区中的数据的长度与空闲长度之和是否为64个字,是则触发第三判断单元,否则报错;
所述第三判断单元,用于判断第五缓存区和第六缓存区中的空闲长度是否均为0,是则触发所述第五计算模块,否则触发所述第二计算模块。
41.如权利要求39所述的设备,其特征在于,所述第五计算模块包括:
第二十四计算单元,用于依次将所述第三缓存区中的每一个字作为第一参数、所述第二缓存区中对应位置上数据作为第二参数调用第四函数模块得到的输出结果保存到第三十一寄存器中,将所述第三十一寄存器中的数据与所述第一缓存区中对应位置上的数据做模加运算,并用模加结果更新所述第一缓存区中对应位置上的数据;
第一作为单元,用于将所述第一缓存区中的数据作为哈希分组计算结果。
42.如权利要求41所述的设备,其特征在于,所述第二十四计算单元具体用于将所述第三缓存区中第1字上的数据和所述第二缓存区中第1字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十二寄存器中,用所述第三十二寄存器中的数据与所述第一缓存区中第1字上的数据做模加运算的结果更新所述第一缓存区中第1字上的数据;将所述第三缓存区中第2字上的数据和所述第二缓存区中第2字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十四寄存器中,用所述第三十四寄存器中数据与所述第一缓存区中第2字上的数据做模加运算的结果更新所述第一缓存区中第2字上的数据;将所述第三缓存区中第3字上的数据和所述第二缓存区中第3字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十五寄存器中,用所述第三十五寄存器中数据与所述第一缓存区中第3字上的数据做模加运算的结果更新所述第一缓存区中第3字上的数据;将所述第三缓存区中第4字上的数据和所述第二缓存区中第4字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十六寄存器中,用所述第三十六寄存器中数据与所述第一缓存区中第4字上的数据做模加运算的结果更新所述第一缓存区中第4字上的数据;将所述第三缓存区中第5字上的数据和所述第二缓存区中第5字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十七寄存器中,用所述第三十七寄存器中数据与所述第一缓存区中第5字上的数据做模加运算的结果更新所述第一缓存区中第5字上的数据;将所述第三缓存区中第6字上的数据和所述第二缓存区中第6字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十八寄存器中,用所述第三十八寄存器中数据与所述第一缓存区中第6字上的数据做模加运算的结果更新所述第一缓存区中第6字上的数据;将所述第三缓存区中第7字上的数据和所述第二缓存区中第7字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第三十九寄存器中,用所述第三十九寄存器中数据与所述第一缓存区中第7字上的数据做模加运算的结果更新所述第一缓存区中第7字上的数据;将所述第三缓存区中第8字上的数据和所述第二缓存区中第8字上的数据作为第一参数和第二参数调用第四函数模块得到的输出结果保存到第四十寄存器中,用所述第四十寄存器中数据与所述第一缓存区中第8字上的数据做模加运算的结果更新所述第一缓存区中第8字上的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911302812.0A CN111143893B (zh) | 2019-12-17 | 2019-12-17 | 一种哈希分组计算的安全实现方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911302812.0A CN111143893B (zh) | 2019-12-17 | 2019-12-17 | 一种哈希分组计算的安全实现方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111143893A CN111143893A (zh) | 2020-05-12 |
CN111143893B true CN111143893B (zh) | 2023-04-07 |
Family
ID=70518570
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911302812.0A Active CN111143893B (zh) | 2019-12-17 | 2019-12-17 | 一种哈希分组计算的安全实现方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111143893B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101894229A (zh) * | 2010-06-30 | 2010-11-24 | 华南理工大学 | 一种兼容三种sha标准的装置及其实现方法 |
CN104753684A (zh) * | 2015-04-15 | 2015-07-01 | 飞天诚信科技股份有限公司 | 一种实现数字签名和验签的方法 |
CN106650240A (zh) * | 2016-11-22 | 2017-05-10 | 深圳大学 | 并行哈希函数的构造方法 |
CN109429222A (zh) * | 2017-08-22 | 2019-03-05 | 马鞍山明阳通信科技有限公司 | 一种对无线网络设备升级程序及通讯数据加密的方法 |
CN110471924A (zh) * | 2019-08-14 | 2019-11-19 | 紫光展锐(重庆)科技有限公司 | 数据处理方法、装置、计算机设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7266703B2 (en) * | 2001-06-13 | 2007-09-04 | Itt Manufacturing Enterprises, Inc. | Single-pass cryptographic processor and method |
-
2019
- 2019-12-17 CN CN201911302812.0A patent/CN111143893B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101894229A (zh) * | 2010-06-30 | 2010-11-24 | 华南理工大学 | 一种兼容三种sha标准的装置及其实现方法 |
CN104753684A (zh) * | 2015-04-15 | 2015-07-01 | 飞天诚信科技股份有限公司 | 一种实现数字签名和验签的方法 |
CN106650240A (zh) * | 2016-11-22 | 2017-05-10 | 深圳大学 | 并行哈希函数的构造方法 |
CN109429222A (zh) * | 2017-08-22 | 2019-03-05 | 马鞍山明阳通信科技有限公司 | 一种对无线网络设备升级程序及通讯数据加密的方法 |
CN110471924A (zh) * | 2019-08-14 | 2019-11-19 | 紫光展锐(重庆)科技有限公司 | 数据处理方法、装置、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111143893A (zh) | 2020-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10038561B2 (en) | Method and device for generating digital signature | |
CN108322304B (zh) | 工作量证明的计算方法和装置、电子设备、程序和介质 | |
Bernstein et al. | Non-uniform cracks in the concrete: the power of free precomputation | |
CN100579006C (zh) | 一种实现快速大素数生成的rsa加密方法 | |
While | A new analysis of the LebMeasure algorithm for calculating hypervolume | |
US20110075836A1 (en) | Method and apparatus for elliptic curve cryptographic processing | |
CN111143893B (zh) | 一种哈希分组计算的安全实现方法及设备 | |
US20220385466A1 (en) | Prime number generation for encryption | |
CN112737778B (zh) | 数字签名生成、验证方法及装置、电子设备及存储介质 | |
Hua et al. | Nearly optimal distributed algorithm for computing betweenness centrality | |
US9613229B2 (en) | Method for generating coordinate point in embedded system | |
US20160043863A1 (en) | Elliptic curve encryption method comprising an error detection | |
CN112800476A (zh) | 一种数据脱敏方法、装置及电子设备 | |
CN102739531B (zh) | 流量整形方法和流量整形设备 | |
CN108306730B (zh) | 一种在嵌入式***中生成密钥对的实现方法和装置 | |
CN104579651A (zh) | 椭圆曲线密码点乘运算的方法和装置 | |
KR102241252B1 (ko) | 모듈러 연산 방법, 장치 및 시스템 | |
JP2009169473A (ja) | モジュール配置装置並びにモジュール配置方法並びにプログラム | |
CN102591618B (zh) | 一种在嵌入式***中生成大素数的方法 | |
Chen et al. | Equivalent nondegenerate L‐shapes of double‐loop networks | |
US20050033785A1 (en) | Random number string output apparatus, random number string output method, program, and information recording medium | |
Yu et al. | Efficient software implementation of ZUC stream cipher | |
KR100294781B1 (ko) | 무선통신망에서의인증응답생성방법 | |
CN111126978B (zh) | 一种区块链上快速处理事务的实现方法及装置 | |
JP5276526B2 (ja) | ビット列生成装置、ビット列生成方法及びプログラム |
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 |