CN101894229A - 一种兼容三种sha标准的装置及其实现方法 - Google Patents

一种兼容三种sha标准的装置及其实现方法 Download PDF

Info

Publication number
CN101894229A
CN101894229A CN2010102156675A CN201010215667A CN101894229A CN 101894229 A CN101894229 A CN 101894229A CN 2010102156675 A CN2010102156675 A CN 2010102156675A CN 201010215667 A CN201010215667 A CN 201010215667A CN 101894229 A CN101894229 A CN 101894229A
Authority
CN
China
Prior art keywords
value
register
data
module
sha
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.)
Pending
Application number
CN2010102156675A
Other languages
English (en)
Inventor
陈虎
何建华
黄华强
奚建清
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
South China University of Technology SCUT
Original Assignee
South China University of Technology SCUT
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by South China University of Technology SCUT filed Critical South China University of Technology SCUT
Priority to CN2010102156675A priority Critical patent/CN101894229A/zh
Publication of CN101894229A publication Critical patent/CN101894229A/zh
Pending legal-status Critical Current

Links

Images

Abstract

本发明公开子一种兼容三种SHA标准的装置,包括依次相连的数据填充模块、Wt生成模块和哈希运算模块。本发明还公开了一种兼容三种SHA标准装置的实现方法,包括以下步骤:(I)数据填充模块接收明文数据,并生成填充数据,将数据输出至Wt生成模块;(II)Wt生成模块,生成新的Wt算子并输入到哈希运算模块;(III)哈希运算模块在SHA-1模式下生成160位的数据摘要,在SHA-256模式下生成256位的数据摘要,或者在SHA-512模式生成512位的数据摘要。本发明具有普遍适用性、兼容性好、功耗低,以及占用额外的资源少等优点。

Description

一种兼容三种SHA标准的装置及其实现方法
技术领域
本发明涉及基于FPGA(Field-Programmable Gate Array)的SHA系列算法(SHA-1、SHA-256及SHA-512)的综合设计领域,尤其涉及一种兼容三种SHA标准的装置及其实现方法。
背景技术
SHA-1算法是目前流行的哈希散列加密算法,也是可信计算规范中规定使用的加密算法。但是在近年,SHA-1算法的缺陷已经被曝露出来,而具有更高安全性的SHA-256及SHA-512算法正是替代SHA-1的最佳方案。为了在下一代可信计算规范发布之时,可信计算模块(Trusted Platform Module,TPM)能提供兼容上一代规范的服务,一种实用的SHA算法综合实现方案显得尤为必要。
现有技术中还没有针对三种SHA标准同时实现的设计方案。若TPM芯片不能向上兼容SHA-1,向下兼容SHA-256或SHA-512,那么不仅会增加更换设备的资金花费,同时在更换设备的时间内,还会因为TPM芯片不能提供安全服务而造成安全隐患。
发明内容
本发明的目的之一在于克服上述的缺点和不足,提供一种兼容三种SHA标准的装置。本发明具有普遍适用性、兼容性好、功耗低,以及占用额外的资源少等优点,特别适合为可信计算中可信计算模块(TPM)芯片提供SHA加密服务。
本发明的目的之二在于提供一种兼容三种SHA标准的实现方法。
本发明的目的之一是通过下述技术方案实现的:一种兼容三种SHA标准的装置,包括依次相连的数据填充模块、Wt生成模块和哈希运算模块,其中
所述数据填充模块,用于接收明文数据,并生成填充数据,将明文数据与填充数据输出至Wt生成模块;
所述Wt生成模块,用于接收数据填充模块输出的数据,在SHA-1模式中通过异或运算连接各操作数,在SHA-256及SHA-512模式中通过算术加操作对各操作数进行连接,生成新的Wt算子并输入到哈希运算模块;
所述哈希运算模块,用于接收Wt生成模块的Wt算子,进行散列运算,生成160位、256位或者512位的数据摘要。
为更好的实现本发明,所述数据填充模块主要包括寄存器、减法器和多路开关;
所述Wt生成模块主要包括寄存器、移位寄存器组、左循环移位逻辑、多路开关、加法器和异或运算器。
所述哈希运算模块主要包括寄存器和逻辑运算模块:
所述哈希运算模块中的逻辑运算模块主要包括左循环移位逻辑、算术左移逻辑、多路开关、加法器和异或运算器;
所述哈希运算模块中的寄存器为8个64位寄存器,在不同模式,寄存器的初始值不同。
优选的,所述Wt生成模块中的寄存器、移位寄存器组分为上下两行,每行的数据深度是16,具体为:
上面一行包括依次相连的一个32位位宽深度为2的移位寄存器、一个32位位宽深度为5的移位寄存器、一个32位位宽深度为8的移位寄存器和一个32位位宽寄存器;
下面一行包括依次相连的一个32位位宽深度为2的移位寄存器、一个32位位宽寄存器、一个32位位宽深度为4的移位寄存器、一个32位位宽寄存器、一个32位位宽深度为6的移位寄存器,一个32位位宽寄存器,一个32位位宽寄存器;
所述哈希运算模块中的寄存器为8个64位寄存器,所述每个64位寄存器都被定义为低32位及高32位。
本发明的目的之二是通过下述技术方案实现的:一种兼容三种SHA标准的装置的实现方法,包括以下步骤:
(I)数据填充模块接收明文数据,并生成填充数据,将明文数据与填充数据输出至Wt生成模块;
(II)Wt生成模块接收数据填充模块输出的数据,在SHA-1模式中通过异或运算连接各操作数,在SHA-256及SHA-512模式中通过算术加操作对各操作数进行连接,生成新的Wt算子并输入到哈希运算模块;
(III)哈希运算模块接收Wt生成模块的Wt算子,进行散列运算,在SHA-1模式下生成160位的数据摘要,在SHA-256模式下生成256位的数据摘要,或者在SHA-512模式下生成512位的数据摘要。
为更好的实现本发明目的,SHA-1模式具体包括以下步骤:
S1、用64位二进制数表示明文数据长度,设为M,若代表数据长度的数据不足64位,则以0补足最高位;将M值输入数据填充模块的专用寄存器中存储;进入步骤S2;
S2、待加密的明文以512位为一组,输入数据填充模块,进入步骤S3;
S3、Wt生成模块选取下面一行的寄存器组用于生成Wt算子;512位的明文从高位到低位被分成16组,每组32位,按顺序从数据填充模块输入到Wt生成模块的寄存器组中,进入S4;
S4、随后进入系统的下一个时钟周期,Wt生成模块中第0、2、8、15个寄存器上的数据会被输出做异或操作;异或操作得出的数在左循环移位一位后,作为新的Wt算子,进入步骤S5;
S5、队列中原有的16个Wt算子依次前移一位,在第0个寄存器的Wt算子被移出,作为该轮的Wt算子送入到哈希运算模块,同时步骤S4中新的Wt算子被输入到第15个寄存器的位置,进入S6;
S6、哈希运算模块由下至上,设这八个寄存器所存储的数据从第一个寄存器到第八个寄存器依次分别是A值、B值、C值、D值、B值、C值、D值、E值,哈希运算模块接收Wt生成模块输出的Wt算子,并判断当前散列运算正在进行的轮数,若在0到19轮散列运算中,则进入步骤S7;若在20到39轮或60到79轮的散列运算中,则进入步骤S8;若在40到59的散列轮运算中,则进入步骤S9;
S7、在0到19轮散列运算中,哈希运算模块使用第五、六、七个寄存器的值,及步骤S5中Wt生成模块输出的Wt算子,求出用于更新第一个寄存器所需要的T值,进入步骤S10;
步骤S8、在20到39轮或60到79轮的散列运算中,哈希运算模块使用第五、六、七个寄存器的值,或第二、三、四个寄存器的值,及步骤S5中Wt生成模块输出的Wt算子求出用于更新第1寄存器所需要的T值,进入步骤S10;
步骤S9、在40到59轮的散列轮运算中,哈希运算模块使用第二、三、四个寄存器的值,及步骤S5中Wt生成模块输出的Wt算子,求出用于更新第一个寄存器所需要的T值,进入步骤S10;
S10、哈希运算模块中,第四个及第七个寄存器中的D值一致,用第七个寄存器中的D值更新第八寄存器中的E值,第三寄存器及第六寄存器中的C值更新第四及第七寄存器中的D值,第二寄存器及第五寄存器中的B值更新第三及第六寄存器中的C值,第一个寄存器中的A更新第二及第五寄存器中的B值,用求得的T值更新第一个寄存器中存储的A值,进入S11;
S11、哈希运算模块判断是否已经完成80轮散列计算,若不是,则返回步骤S4;若是,则哈希运算模块选择第一、第二、第三、第四及第八个寄存器的值作为输出,进入步骤S12;
S12、数据填充模块的寄存器的值减一,进入步骤S13;
S13、数据填充模块判断寄存器的值是否等于0:
若寄存器的值不等于0,则数据填充模块将明文直接输出到Wt生成模块,返回到S2;
若寄存器的值等于0,则数据填充模块在明文后面补充填充数据并一同输出至Wt生成模块,进入步骤S14;
S14、数据填充模块结束本次运算操作,或等待下一次运算操作并返回到步骤S1。
SHA-256模式具体包括以下步骤:
S1、用64位二进制数表示明文数据长度,设为M,若代表数据长度的数据不足64位,则以0补足最高位;将M值输入数据填充模块的专用寄存器中存储;进入步骤S2;
S2、待加密的明文以512位为一组,输入数据填充模块,进入步骤S3;
S3、Wt生成模块选取下面一行的寄存器组用于生成Wt算子;512位的明文从高位到低位被分成16组,每组32位,按顺序从数据填充模块输入到Wt生成模块的寄存器组中,进入S4;
S4、随后进入系统的下一个时钟周期,Wt生成模块中第0、1、9、14个寄存器上的数据会被输出并用于生成新的Wt算子,进入步骤S5;
S5、队列中原有的16个Wt算子依次前移一位,在第0个寄存器的Wt算子被移出,作为该轮的Wt算子送入到哈希运算模块,同时步骤S4中新的Wt算子被输入到第15个寄存器的位置,进入S6;
S6、哈希运算模块接收Wt生成模块输出的Wt算子,设哈希运算模块由下至上这八个寄存器所存储的数据从第一个寄存器到第八个寄存器依次分别是A值、B值、C值、D值、E值、F值、G值、H值;使用这八个寄存器所存储的数据计算用于更新哈希运算模块中寄存器所需要的T1值与T2值:
S7、哈希运算模块中,第七个寄存器中的G值更新第八个寄存器中的H值,第六个寄存器中的F值更新第七个寄存器中的G值,第五个寄存器中的E值更新第六个寄存器中的F值,第四个寄存器中的D值与T1值相加后更新第五个寄存器中的E值,第三个寄存器中的C值更新第四个寄存器中的D值,第二个寄存器中的B值更新第三个寄存器中的C值,第一个寄存器中的A值更新第二个寄存器中的B值,T1与T2相加的结果更新第一个寄存器中的A值,进入S8;
S8、哈希运算模块判断是否已经完成64轮散列计算,若不是,则返回步骤S4;若是,则哈希运算模块选择第一、第二、第三、第四、第五、第六、第七及第八个寄存器的值作为输出,进入步骤S9;
S9、数据填充模块的寄存器的值减一,进入步骤S10;
S10、数据填充模块判断寄存器的值是否等于0:
若寄存器的值不等于0,则数据填充模块将明文直接输出到Wt生成模块,返回到S2;
若寄存器的值等于0,则数据填充模块在明文后面补充填充数据并一同输出到Wt生成模块,进入步骤S11;
S11、数据填充模块结束本次运算操作,或等待下一次运算操作并返回到步骤S1。
优选的,SHA-1模式及SHA-256模式中所述填充数据的生成方法,包括以下步骤:
S4.1、判断明文数据长度M值能否被512整除,若可以,则进入步骤S4.2;若不能,则进入步骤S4.3;
S4.2、数据填充模块为明文填充1位‘1’,447位‘0’以及M值;
S4.3、数据填充模块为余下的一组不足512位的数据块填充1位‘1’以及若干位‘0’,使其成为512位的数据块;并且再填充一个512位的数据块,其组成为448位的‘0’以及M值。
SHA-512模式具体包括以下步骤:
S1、用128位二进制数表示明文数据长度,设为M,若代表数据长度的数据不足128位,则以0补足最高位;将M值输入数据填充模块的专用寄存器中存储,进入步骤S2;
S2、待加密的明文以1024位为一组,输入数据填充模块,进入步骤S3;
S3、Wt生成模块选取上下两行的寄存器组用于生成Wt算子;1024位的明文从高位到低位被分为16组,每组64位数据,高32位的数据存储于上面一行的寄存器组中,低32位的数据存储于下面一行的寄存器组中,按顺序从数据填充模块输入到Wt生成模块的寄存器组中,进入S4;
S4、随后进入系统的下一个时钟周期,Wt生成模块中第0、1、9、14个寄存器上的数据会被输出用于生成新的Wt算子,进入步骤S5;
S5、队列中原有的16个Wt算子依次前移一位,在第0个寄存器的Wt算子被移出,作为该轮的Wt算子送入到哈希运算模块,同时步骤S4中新的Wt算子被输入到第15个寄存器的位置,进入S6;
S6、设哈希运算模块由下至上这八个寄存器所存储的数据从第一个寄存器到第八个寄存器依次分别是A值、B值、C值、D值、E值、F值、G值、H值;哈希运算模块接收Wt生成模块输出的Wt算子,并计算用于更新哈希运算模块中寄存器所需要的T1值与T2值;
S7、哈希运算模块中,第七个寄存器中的G值更新第八个寄存器中的H值,第六个寄存器中的F值更新第七个寄存器中的G值,第五个寄存器中的E值更新第六个寄存器中的F值,第四个寄存器中的D值与T1值相加后更新第五个寄存器中的E值,第三个寄存器中的C值更新第四个寄存器中的D值,第二个寄存器中的B值更新第三个寄存器中的C值,第一个寄存器中的A值更新第二个寄存器中的B值,T1与T2相加的结果更新第一个寄存器中的A值,进入S8;
S8、哈希运算模块判断是否已经完成80轮散列计算,若不是,则返回步骤S4;若是,则选择第一、第二、第三、第四、第五、第六、第七及第八个寄存器的值作为输出,进入步骤S9;
S9、数据填充模块的寄存器的值减一,进入步骤S10;
S10、数据填充模块判断寄存器的值是否等于0:
若寄存器的值不等于0,则数据填充模块将明文直接输出到Wt生成模块,返回到S2;
若寄存器的值等于0,则数据填充模块在明文后面补充填充数据并一同输出到Wt生成模块,进入步骤S11;
S11、数据填充模块结束本次运算操作,或等待下一次运算操作并返回到步骤S1。
优选的,所述SHA-512的步骤S10中填充数据的生成方法,具体包括以下步骤:
S4.1、判断明文数据长度M值能否被1024整除,若可以,则进入步骤S4.2;若不能,则进入步骤S4.3;
S4.2、数据填充模块为明文填充1位‘1’,895位‘0’以及M值;
S4.3、数据填充模块为余下的一组不足1024位的数据块填充1位‘1’以及若干位‘0’,使其成为1024位的数据块;并且再填充一个1024位的数据块,其组成为896位的‘0’以及M值。
本发明实现兼容三种SHA标准的装置及其实现方法,必须解决的问题以及解决思路如下:
1、问题:SHA-1和SHA-256的数据宽度是32位,SHA-512的数据宽度是64位。解决方案:Wt生成模块的移位寄存器组分两行,每行32位位宽实现。在SHA-1,SHA-256模式下,下面一行的寄存器组用于数据的存储与处理,上面一行的寄存器组不工作。在SHA-512模式下,两行寄存器组同时工作,为SHA-512模式提供64位宽度的数据存储及数据处理。在哈希运算模块涉及的第一到第八个寄存器,其数据宽度都是64位,在SHA-1、SHA-256模式下,只用低32位存储A、B、C、D、E(SHA-1模式)及A、B、C、D、E、F、G、H(SHA-256模式)的值,高32位不参与数据存储。在SHA-512模式下,每个寄存器的全部64位都参与数据的存储。这样设计的好处是:1、提供了数据宽度的兼容。2、在SHA-1、SHA-256模式下,不需要的寄存器不参与数据存储,可以减低设计功耗。
2、问题:SHA-1模式中,参与生成新的Wt算子所使用的旧Wt算子选取与SHA-256、SHA-512不同。在SHA-1模式的Wt生成模块中,是第0、2、8、13个寄存器中的数据用于新Wt算子的生成。在SHA-256及SHA-512模式的Wt生成模块中,是第0、1、9、14个寄存器中的数据用于新Wt算子的生成。解决方案:在FPGA中,使用同样数量的资源实现一个移位寄存器组能提供的数据容量是实现一个寄存器的容量的16倍(移位寄存器组16位,单个寄存器1位),但是其缺点就是,不在移位寄存器组的输入、输出端的数据,不能被采样用于数据处理。这样就不能满足Wt模块需要在队列之中抽取数据用于新Wt生成的需要。所以本设计采用了移位寄存器组与单个寄存器组合实现的方法,平衡了资源消耗及功能实现要求。下面一行寄存器组在第13、8、1的位置使用寄存器对数据进行存储,其目的是满足SHA-1模式在第2、8、13的位置对数据进行采样的需要。而对于SHA-256模式,第1、9、14位置的数据依然能够被采样。这样就满足了SHA-1、SHA-256模式对旧Wt数据采样的需求。而对于SHA-512模式,上下两行的Wt寄存器组在第0、1、9、14位置的数据能被采用。综上所述,移位寄存组与寄存器组合实现的方案解决了这一个问题。
3、问题:SHA-1、SHA-256和SHA-512模式中的Ch运算逻辑、Maj运算逻辑设计的资源重用。在SHA-1与SHA-256、SHA-512中,都涉及Ch函数及Maj函数的逻辑操作,但是它们的输入值却不一样:SHA-1中;B、C、D的值始终作为这两个函数的输入。而在SHA-256、SHA-512中,对于Ch函数,输入是E、F、G;Maj函数输入的是A、B、C。一般的解决思路是在设计中加入多路开关,根据不同的模式选择不同的输入。但是多路开关本身也对资源进行消耗。根据前期的测试,目前解决的方案有:1)分别为SHA-1、SHA-256、SHA-512独立实现Ch与Maj函数;2)使用多路开关,对Maj函数及Ch函数的逻辑单元进行复用。由于多路开关的增加,两个方案的资源消耗是一样的,即过往的解决思路都不能很好地实现资源复用的目的。解决方案:第二、第三个寄存器的B值、C值,连接到Maj函数的输入,第一个寄存器的A值和第四个寄存器的D值增加一个2选1的多路开关,在SHA-1模式下,D值作为Maj函数的输入,SHA-256及SHA-512模式下,A值作为Maj函数的输入。第四、第五、第六个寄存器的E值、F值、G值连接到Ch函数的输入。在SHA-1模式下,第二、第三、第四个寄存器的值分别与第五,第六,第七个寄存器的值一致。在第0-19轮,会使用Ch函数的计算值更新T,在第40-59轮会使用Maj函数的计算值更新T。而在SHA-256及SHA-512模式,每个周期,Maj与Ch都参与更新T1及T2。这样设计的优势在于:SHA-1模式充分利用了SHA-256及SHA-512模式增加的第五、第六、第七个寄存器进行冗余计算,再根据轮数取合适的结果对数据进行更新,不需要增加过多的额外资源,就可以完成Ch和Maj函数的逻辑复用。
本发明相对于现有技术具有如下的优点及效果:
第一、兼容性好:在可预见的将来,存在缺陷的SHA-1算法将会被可靠性更高的加密算法取代。而作为可信计算的基础——可信平台模块(TPM)中的SHA算法服务的前后兼容性问题是一个还未引起重视的问题。而本发明提供了一种额外开销小,但是能同时实现三种SHA算法的系统,以有利于可信计算规范的发展。
第二、通过资源复用,额外的逻辑单元使用较少:本发明利用SHA算法之间的算法相似性,首次解决了SHA系列算法之间的数据宽度不相同、数据处理方式不一致等的冲突问题,并在哈希运算核心中使用了冗余计算的方法减少逻辑资源的消耗。此发明为其余的安全芯片提供了灵活的多安全服务实现方案。
第三、兼顾了效率及功耗:本发明功耗低,占用额外的资源较少,可以为计算机系统提供廉价的具兼容性的SHA服务。同时也可以避免因为规范升级造成的芯片更新换代的额外开销。经验证,在Xilinx Virtex5系列芯片上运行,发明可达到90Mhz的速度,占用的逻辑单元为1151Slice。
第四、普遍适用:本发明可以应用到个人电脑的可信计算芯片,或者是作为嵌入式系统的安全协处理器的SHA算法模块的实现,又或者是在现场可编程门阵列(FPGA)的片上系统(SOC)中作为可选的安全服务知识产权软核,为系统提供更高的安全保障。
附图说明
图1是本实施例兼容三种SHA标准的装置的结构方框图;
图2是本实施例中数据填充模块的结构方框图;
图3是本实施例中哈希运算模块的结构方框图;
图4是本实施例中Wt生成模块与哈希运算模块的内部逻辑结构示意图;
图5是本实施例兼容三种SHA标准装置的工作流程图;
图6是本实施例在SHA-1模式下工作的流程图;
图7是本实施例在SHA-256模式下工作的流程图;
图8是本实施例在SHA-512模式下工作的流程图。
具体实施方式
下面结合实施例及附图,对本发明作进一步地详细说明,但本发明的实施方式不限于此。
实施例
如图1所示,一种兼容三种SHA标准的装置,主要包括依次相连的数据填充模块、Wt生成模块和哈希运算模块。
所述数据填充模块,用于接收明文数据,并生成填充数据,将明文数据写填充数据输出至Wt生成模块;
所述Wt生成模块,用于接收数据填充模块输出的数据,在SHA-1模式中通过异或运算连接各操作数,在SHA-256及SHA-512模式中通过算术加操作对各操作数进行连接,生成新的Wt算子并输入到哈希运算模块;
所述哈希运算模块,用于接收Wt生成模块的Wt算子,进行散列运算,生成160位、256位或者512位的数据摘要。
如图2所示,所述数据填充模块主要包括寄存器、减法器和多路开关;
所述Wt生成模块主要包括寄存器、移位寄存器组、左循环移位逻辑、多路开关、加法器和异或运算器;
如图3所示,所述哈希运算模块主要包括寄存器和逻辑运算模块;
所述哈希运算模块中的逻辑运算模块主要包括左循环移位逻辑、算术左移逻辑、多路开关、加法器和异或运算器;
所述哈希运算模块中的寄存器为8个64位寄存器,在不同SHA标准模式下,寄存器的初始值不同。
其中所述Wt生成模块的结构见图4中的虚线框I,寄存器类型分为两类,标注为①的是移位寄存器组,标注为②的是独立的32位寄存器。同时寄存器分为上下两行,每一行的数据宽度都是32位,数据深度都是16位。“①”为移位寄存器组,移位寄存器组两端的数字表示输入端或输出端的数据在本16数据深度寄存器组中的位置。Wt生成模块中从输出端到输入端的方向,寄存器从0到15依次标号,如8表示第8个寄存器,9表示第9个寄存器内。在三种SHA模式中,数据都会首先从15处输入,并且每一个时钟周期数据都会向左移动一个寄存器位。上面一行寄存器从左到右分别是:32位位宽深度为2的移位寄存器,32位位宽深度为5的移位寄存器,32位位宽深度为8的移位寄存器,1个32位位宽寄存器。下面一行寄存器从左到右分别是:32位位宽深度为2的移位寄存器,一个32位位宽寄存器,一个32位位宽深度为4的移位寄存器,一个32位位宽寄存器,一个32位位宽深度为6的移位寄存器,一个32位位宽寄存器,一个32位位宽寄存器。寄存器组分两行,每行的数据深度是16。
其中所述哈希运算模块中逻辑运算模块的结构见图4中的虚线框III;所述哈希运算模块中寄存器的结构见图4中的虚线框II。所述哈希运算模块中的寄存器为8个64位寄存器,图中的8个64位寄存器都被定义为低32位(1l、2l、3l、4l、5l、6l、7l、8l)及高32位(1h、2h、3h、4h、5h、6h、7h、8h),所示的两列寄存器组表示的是同一列寄存器,这样构图的目的是为了更清晰说明在哈希计算过程中,寄存器的值传递更新的特性。此构图方式已被众多教科书及论文采用。
上述兼容三种SHA标准的装置的实现方法,如图5所示,包括以下步骤:
(I)数据填充模块接收明文数据,并生成填充数据,将明文数据与填充数据输出至Wt生成模块;
(II)Wt生成模块接收数据填充模块输出的数据,在SHA-1模式中通过异或运算连接各操作数,在SHA-256及SHA-512模式中通过算术加操作对各操作数进行连接,生成新的Wt算子并输入到哈希运算模块;
(III)哈希运算模块接收Wt生成模块的Wt算子,进行散列运算,在SHA-1模式下生成160位的数据摘要,在SHA-256模式下生成256位的数据摘要,或者在SHA-512模式下生成512位的数据摘要。
上述步骤,具体可以分解为:
S1、系统确认进行散列计算模块,若是进行SHA-1模式或SHA-256模式,则进入步骤S2;若是进行SHA-512模式,则进入步骤S6;
S2、用64位二进制数表示明文数据长度,设为M,若代表数据长度的数据不足64位,则以0补足最高位;将M值输入数据填充模块的专用寄存器中存储,进入步骤S3;
S3、待加密的明文以512位为一组,输入数据填充模块,Wt生成模块选取下面一行的寄存器组用于生成Wt算子;512位的明文从高位到低位被分成16组,每组32位,按顺序输入到Wt生成模块的寄存器组中;若是进行SHA-1模式,则进入S4;若是进行SHA-256模式,则进入S5;
S4、随后进入系统的下一个时钟周期,Wt生成模块中第0、2、8、15个寄存器上的数据会被输出做异或操作;异或操作得出的数在左循环移位一位后,生成新的Wt算子,进入步骤S9;
S5、随后进入系统的下一个时钟周期,Wt生成模块中第0、1、9、14个寄存器上的数据会被输出,生成新的Wt算子,进入步骤S9;
S6、用128位二进制数表示明文数据长度,设为M,若代表数据长度的数据不足128位,则以0补足最高位;将M值输入数据填充模块的专用寄存器中存储,进入步骤S7;
S7、待加密的明文以1024位为一组,输入数据填充模块;Wt生成模块选取上下两行的寄存器组用于生成Wt算子;1024位的明文从高位到低位被分为16组,每组64位数据,高32位的数据存储于上面一行的寄存器组中,低32位的数据存储于下面一行的寄存器组中,按顺序从数据填充模块输入到Wt生成模块的寄存器组中,进入S8;
S8、随后进入系统的下一个时钟周期,Wt生成模块中第0、1、9、14个寄存器上的数据会被输出,生成新的Wt算子,进入步骤S9;
S9、队列中原有的16个Wt算子依次前移一位,在第0个寄存器的Wt算子被移出,作为该轮的Wt算子送入到哈希运算模块,同时新的Wt算子被输入到15寄存器的位置;若是进行SHA-1模式,进入S10;若是进行SHA-256模式或SHA-512模式,进入S12;
S10、设哈希运算模块由下至上这八个寄存器所存储的数据从第一个寄存器到第八个寄存器依次分别是A值、B值、C值、D值、B值、C值、D值、E值;
哈希运算模块接收Wt生成模块输出的Wt算子,在0到19轮散列运算中,哈希运算模块使用第五、六、七个寄存器计算更新值T;在20到39轮和60到79轮的散列运算中,哈希运算模块使用第五、六、七个寄存器的值或第二、三、四个寄存器的值计算更新值T;在40到59的散列轮运算中,哈希运算模块使用第二、三、四个寄存器的值计算更新值T,进入S11;
S11、哈希运算模块中,用第七个寄存器中的D值更新第八个寄存器中的E值,第三个寄存器及第六个寄存器中的C值更新第四个及第七个寄存器中的D值,第二个寄存器及第五寄存器中的B值更新第三个及第六个寄存器中的C值,第一个寄存器中的A更新第二及第五个寄存器的B值,用求得的T值更新第一个寄存器中存储的A值,进入S14;
S12、设哈希运算模块由下至上这八个寄存器所存储的数据从第一个寄存器到第八个寄存器依次分别是A值、B值、C值、D值、E值、F值、G值、H值;哈希运算模块使用第一个寄存器到第八个寄存器的值通过散列运算计算更新值T,进入S13;
S13、哈希运算模块中,第七个寄存器中的G值更新第八个寄存器中的H值,第六个寄存器中的F值更新第七个寄存器中的G值,第五个寄存器中的E值更新第六个寄存器中的F值,第四个寄存器中的D值与T1值相加后更新第五个寄存器中的E值,第三个寄存器中的C值更新第四个寄存器中的D值,第二个寄存器中的B值更新第三个寄存器中的C值,第一个寄存器中的A值更新第二个寄存器中的B值,T1与T2相加的结果更新第一个寄存器中的A值,进入S14;
S14、哈希运算模块判断是否已经完成散列计算,若不是,在SHA-1模式下返回步骤S4;在SHA-256模式下返回步骤S5;在SHA-512模式下返回步骤S8;
若是,在SHA-1模式下,选择第一、第二、第三、第四及第八个寄存器的值作为输出,进入S15;在SHA-256模式和SHA-512模式下选择第一、第二、第三、第四、第五、第六、第七及第八个寄存器的值作为输出,进入步骤S15;
S15、数据填充模块的寄存器的值减一,进入步骤S16;
S16、数据填充模块判断寄存器的值是否等于0:
若寄存器的值不等于0,则数据填充模块将明文直接输出到Wt生成模块,在SHA-1模式下,返回步骤S3;在SHA-256模式下,返回步骤S3;在SHA-512模式下,返回步骤S7;
若寄存器的值等于0,则数据填充模块在明文后面补充填充数据并一同输出至Wt生成模块,进入步骤S17;
S17、数据填充模块结束本次运算操作,等待下一次运算操作并返回到步骤S1。
以下分别为SHA-1、SHA-256及SHA-512三种运行模式对本装置的运行过程进行说明:
SHA-1模式:
哈希运算模块的寄存器从下往上分别是第一到第八个寄存器,1、2、3、4、5、6、7、8表示其物理位置。
明文从数据填充模块输出后,进入Wt生成模块,Wt生成模块在SHA-1模式中通过异或运算对各操作数进行连接,生成新的80个Wt算子输入到哈希运算模块,同时经过80轮的散列运算后,生成160位的数据摘要。
在SHA-1中模式中,哈希运算模块的寄存器中只有低32位被选中进行数据存储,高32位不参与任何运算。哈希运算模块由下至上,设这八个寄存器所存储的数据从第一个寄存器到第八个寄存器依次分别是A值、B值、C值、D值、B值、C值、D值、E值。设置寄存器的初始值:A值的初始值是十六进制数67452301,B值的初始值是十六进制数efcdab89,C值的初始值是十六进制数98badcfe,D值的初始值是十六进制数10325476,E值的初始值是十六进制数c3d2e1f0;在进行散列运算的过程中及初始值,哈希运算模块中第二、三、四个寄存器的内容与第五、六、七个寄存器的内容依次一样;
在SHA-1模式下,本装置的工作流程如图6所示,包括:
S1、用64位二进制数表示明文数据长度,设为M,若代表数据长度的数据不足64位,则以0补足最高位;将M值输入数据填充模块的专用寄存器中存储;进入步骤S2;
S2、待加密的明文以512位为一组,输入数据填充模块,进入步骤S3;
S3、Wt生成模块选取下面一行的寄存器组用于生成Wt算子;512位的明文从高位到低位被分成16组,每组32位,按顺序从数据填充模块输入到Wt生成模块的寄存器组中,进入S4;
S4、随后进入系统的下一个时钟周期,Wt生成模块中第0、2、8、15个寄存器上的数据会被输出做异或操作;异或操作得出的数在左循环移位一位后,作为新的Wt算子,进入步骤S5;
S5、队列中原有的16个Wt算子依次前移一位,在第0个寄存器的Wt算子被移出,作为该轮的Wt算子送入到哈希运算模块,同时步骤S4中新的Wt算子被输入到第15个寄存器的位置,进入S6;
S6、哈希运算模块接收Wt生成模块输出的Wt算子,并判断当前散列运算正在进行的轮数,若在0到19轮散列运算中,则进入步骤S7;若在20到39轮或60到79轮的散列运算中,则进入步骤S8;若在40到59轮的散列运算中,则进入步骤S9;
S7、在0到19轮散列运算中,求出用于更新第一个寄存器所需要的T值,具体为:
T=(A<<5)+Ch(x,y,z)+E+Kt+Wt
Ch ( x , y , z ) = ( x ^ y ) ⊕ ( ⫬ x ^ z )
变量x、y、z分别对应第五、六、七个寄存器的值,“^”代表异或运算,
Figure BSA00000193863000142
代表算术加运算;“<<”表示为循环左移操作,运算符右边的数字代表需要移位的位数;Wt表示步骤S5中Wt生成模块输出的Wt算子,E表示第八个寄存器中存储的E值;Kt表示32位常量,具体为5a827999;进入步骤S10;
步骤S8、在20到39轮和60到79轮的散列运算中,求出用于更新第一个寄存器所需要的T值,具体为:
T=(A<<5)+P(x,y,z)+E+Kt+Wt
P ( x , y , z ) = x ⊕ y ⊕ z
其中变量x、y、z分别对应第五、六、七个寄存器的值,或变量x,y,z分别对应第二、三、四个寄存器的值,
Figure BSA00000193863000152
代表算术加运算(在这些轮数的运算中,第二、三、四个寄存器或者第五、六、七个寄存器的值都可以分别代入,两种选择的运算结果无差异);“<<”为循环左移操作,运算符右边的数字代表需要移位的位数;Wt表示步骤S5中Wt生成模块输出的Wt算子,E表示第八个寄存器中存储的E值;在20到39轮中Kt表示为6ed9eba1,在60到79轮中Kt表示为ca62c1d6;进入步骤S10;
步骤S9、在40到59轮的散列轮运算中,求出用于更新第一个寄存器所需要的T值,具体为:
T=(A<<5)+Fun(x,y,z)+E+Kt+Wt
Maj ( x , y , z ) = ( x ^ y ) ⊕ ( x ^ z ) ⊕ ( y ^ z )
其中变量x,y,z分别对应第二、三、四个寄存器的值,“^”代表异或运算,
Figure BSA00000193863000154
代表算术加运算;“<<”为循环左移操作,运算符右边的数字代表需要移位的位数;Wt表示步骤S5中Wt生成模块输出的Wt算子,E表示第八个寄存器中存储的E值;在40到59轮中Kt表示为8f1bbcdc;进入步骤S10;
S10、哈希运算模块中,第四个及第七个寄存器中的D值一致,用第七个寄存器中的D值更新第八寄存器中的E值,第三寄存器及第六寄存器中的C值更新第四及第七个寄存器中的D值,第二寄存器及第五个寄存器中的B值更新第三及第六个寄存器中的C值,第一个寄存器中的A更新第二及第五个寄存器的B值,用求得的T值更新第一个寄存器中存储的A值,(每一轮计算中,第二个寄存器与第五个寄存器的值一致,第三个寄存器与第六个寄存器的值一致,第四个寄存器与第七个寄存器的值一致),进入S11;
S11、哈希运算模块判断是否已经完成80轮散列计算,若不是,则返回步骤S4;若是,则由于第二个寄存器与第五个寄存器的值一致,第三个寄存器与第六个寄存器的值一致,第四个寄存器与第七个寄存器的值一致,所以选择第一、第二、第三、第四及第八个寄存器的值作为输出,进入步骤S12;
S12、数据填充模块的寄存器的值减一,进入步骤S13;
S13、数据填充模块判断寄存器的值是否等于0:
若寄存器的值不等于0,则数据填充模块将明文直接输出到Wt生成模块,返回到S2;
若寄存器的值等于0,则数据填充模块在明文后面补充填充数据并一同输出至Wt生成模块,进入步骤S14;
S14、数据填充模块结束本次运算操作,等待下一次运算操作并返回到步骤S1。
在SHA-1模式中的步骤S13,所述填充数据的生成方法,包括以下步骤:
S4.1、判断明文数据长度(M值)能否被512整除,若可以,则进入步骤S4.2;若不能,则进入步骤S4.3;
S4.2、数据填充模块为明文填充1位‘1’,447位‘0’以及M值(所述M值为用64位二进制数表示的明文数据长度);
S4.3、数据填充模块为余下的一组不足512位的数据块填充1位‘1’以及若干位‘0’,使其成为512位的数据块;并且再填充一个512位的数据块,其组成为448位的‘0’以及M值。
SHA-256模式:
哈希运算模块的寄存器从下往上分别是第一到第八个寄存器,1、2、3、4、5、6、7、8表示其物理位置。
明文从数据填充模块输出后,进入Wt生成模块,Wt生成模块通过算术加操作对各操作数进行连接,生成新64个Wt算子输入到哈希运算模块,同时经过64轮的散列运算后,生成256位的数据摘要。
在SHA-256中模式中,哈希运算模块的寄存器中只有低32位被选中进行数据存储,高32位不参与任何运算。哈希运算模块由下至上,设这八个寄存器所存储的数据从第一个寄存器到第八个寄存器依次分别是A值、B值、C值、D值、E值、F值、G值、H值。(A值、B值、C值、D值、E值、F值、G值、H值分别表示其对应的寄存器所存储的数据总和,并不随更新后数据的实际改变而改变,例如在寄存器的数据经过多次更新后,原来第一个寄存器中存储的数据1变成数据2,但都是用A值表示第一个寄存器里存储的数据。)设置寄存器的初始值:B值的初始值是十六进制数bb67ae85,C值的初始值是十六进制数3c6ef372,D值的初始值是十六进制数a54ff53a,E值的初始值是十六进制数510e527f,F值的初始值是十六进制数9b05688c,G值的初始值是十六进制数1f83d9ab,H值的初始值是十六进制数5be0cd19;
在SHA-256模式下,本装置的工作流程如图7所示,包括:
S1、用64位二进制数表示明文数据长度,设为M,若代表数据长度的数据不足64位,则以0补足最高位;将M值输入数据填充模块的专用寄存器中存储;进入步骤S2;
S2、待加密的明文以512位为一组,输入数据填充模块,进入步骤S3;
S3、Wt生成模块选取下面一行的寄存器组用于生成Wt算子;512位的明文从高位到低位被分成16组,每组32位,按顺序从数据填充模块输入到Wt生成模块的寄存器组中,进入S4;
S4、随后进入系统的下一个时钟周期,Wt生成模块中第0、1、9、14个寄存器上的数据会被输出,分别进行下列运算逻辑:
(a)第1个寄存器的数据会作为变量x被输入到以下运算逻辑:
σ0(x)=(x>>7)^(x>>18)^(x>>>3)
其中“>>”为循环右移操作,符号右侧的数字代表需要移动的位数,“>>>”为算术右移操作,符号右侧的数字代表需要移动的位数,“^”为异或操作;
(b)第14个寄存器的数据会作为变量x被输入到以下运算逻辑:
σ1(x)=(x>>17)^(x>>19)^(x>>>10)
其中“>>”为循环右移操作,符号右侧的数字代表需要移动的位数,“>>>”为算术右移操作,符号右侧的数字代表需要移动的位数,“^”为异或操作;
将上述两个运算逻辑操作生成的值,与第0个寄存器、第9个寄存器的值进行加法操作,生成的值作为新的Wt算子,进入步骤S5;
S5、队列中原有的16个Wt算子依次前移一位,在第0个寄存器的Wt算子被移出,作为该轮的Wt算子送入到哈希运算模块,同时步骤S4中新的Wt算子被输入到第15个寄存器的位置,进入S6;
S6、哈希运算模块接收Wt生成模块输出的Wt算子,并计算用于更新哈希运算模块中寄存器所需要的T1值与T2值:
T1=H+∑256(1)(E)+Ch(E,F,G)+Kt+Wt;
T2=∑256(0)(A)+Maj(A,B,C);
其中∑256(1)(E)=(E>>6)^(E>>11)^(E>>25)
∑256(0)(A)=(A>>2)^(A>>13)^(A>>22)
Maj ( A , B , C ) = ( A ^ B ) ⊕ ( A ^ C ) ⊕ ( B ^ C )
Ch ( E , F , G ) = ( E ^ F ) ⊕ ( ⫬ E ^ G )
其中“^”代表异或运算,
Figure BSA00000193863000173
代表算术加运算;“<<”表示为循环左移操作,运算符右边的数字代表需要移位的位数;“
Figure BSA00000193863000181
”表示取反操作;“>>”为循环右移操作,符号右侧的数字代表需要移动的位数,Wt表示步骤S5中Wt生成模块输出的Wt算子,A值、B值、C值、D值、E值、F值、G值、H值分别对应哈希运算模块中从第一个寄存器到第八个寄存器依次存储的数据;其中Kt为64个Kt算子,是已定义的32位常量,其值如下:
428a2f98 71374491 b5c0fbcf e9b5dba5 3956c25b 59f111f1 923f82a4 ab1c5ed5
d807aa98 12835b01 243185be 550c7dc3 72be5d74 80deb1fe 9bdc06a7 c19bf174
e49b69c1 efbe4786 0fc19dc6 240ca1cc 2de92c6f 4a7484aa 5cb0a9dc 76f988da
983e5152 a831c66d b00327c8 bf597fc7 c6e00bf3 d5a79147 06ca6351 14292967
27b70a85 2e1b2138 4d2c6dfc 53380d13 650a7354 766a0abb 81c2c92e 92722c85
a2bfe8a1 a81a664b c24b8b70 c76c51a3 d192e819 d6990624 f40e3585 106aa070
19a4c116 1e376c08 2748774c 34b0bcb5 391c0cb3 4ed8aa4a 5b9cca4f 682e6ff3
748f82ee 78a5636f 84c87814 8cc70208 90befffa a4506ceb bef9a3f7 c67178f2
S7、哈希运算模块中,第七个寄存器中的G值更新第八个寄存器中的H值,第六个寄存器中的F值更新第七个寄存器中的G值,第五个寄存器中的E值更新第六个寄存器中的F值,第四个寄存器中的D值与T1值相加后更新第五个寄存器中的E值,第三个寄存器中的C值更新第四个寄存器中的D值,第二个寄存器中的B值更新第三个寄存器中的C值,第一个寄存器中的A值更新第二个寄存器中的B值,T1与T2相加的结果更新第一个寄存器中的A值;进入S8;
S8、哈希运算模块判断是否已经完成64轮散列计算,若不是,则返回步骤S4;若是,则选择第一、第二、第三、第四、第五、第六、第七及第八个寄存器的值作为输出,进入步骤S9;
S9、数据填充模块的寄存器的值减一,进入步骤S10;
S10、数据填充模块判断寄存器的值是否等于0:
若寄存器的值不等于0,则数据填充模块将明文直接输出到Wt生成模块,返回到S2;
若寄存器的值等于0,则数据填充模块在明文后面补充填充数据并一同输出到Wt生成模块,进入步骤S11;
S11、数据填充模块结束本次运算操作,等待下一次运算操作并返回到步骤S1。
在SHA-256的步骤S10中,所述填充数据的生成方法,包括以下步骤:
S4.1、判断明文数据长度(M值)能否被512整除,若可以,则进入步骤S4.2;若不能,则进入步骤S4.3;
S4.2、数据填充模块为明文填充1位‘1’,447位‘0’以及M值(所述M值为用64位二进制数表示明文数据长度);
S4.3、数据填充模块为余下的一组不足512位的数据块填充1位‘1’以及若干位‘0’,使其成为512位的数据块;并且再填充一个512位的数据块,其组成为448位的‘0’以及M值。
SHA-512模式:
哈希运算模块的寄存器从下往上分别是第一到第八个寄存器,1、2、3、4、5、6、7、8表示其物理位置。
明文从数据填充模块输出后,进入Wt生成模块,Wt生成模块通过算术加操作对各操作数进行连接,生成新的80个Wt算子输入到哈希运算模块,同时经过80轮的散列运算后,生成512位的数据摘要。
在SHA-512中模式中,哈希运算模块的寄存器中高32位及低32位都被选中进行数据存储。哈希运算模块由下至上,设这八个寄存器所存储的数据从第一个寄存器到第八个寄存器依次分别是A值、B值、C值、D值、E值、F值、G值、H值。设置寄存器的初始值:A值的初始值是十六进制数6a09e667f3bcc908,B值的初始值是十六进制数bb67ae8584caa73b,C值的初始值是十六进制数3c6ef372fe94f82b,D值的初始值是十六进制数a54ff53a5f1d36f1,E值的初始值是十六进制数510e527fade682d1,F值的初始值是十六进制数9b05688c2b3e6c1f,G值的初始值是十六进制数1f83d9abfb41bd6b,H值的初始值是十六进制数5be0cd19137e2179;
在SHA-512模式下,本装置的工作流程如图8所示,包括:
S1、用128位二进制数表示明文数据长度,设为M,若代表数据长度的数据不足128位,则以0补足最高位;将M值输入数据填充模块的专用寄存器中存储;进入步骤S2;
S2、待加密的明文以1024位为一组,输入数据填充模块,进入步骤S3;
S3、Wt生成模块选取上下两行的寄存器组用于生成Wt算子;1024位的明文从高位到低位被分为16组,每组64位数据,高32位的数据存储于上面一行的寄存器组中,低32位的数据存储于下面一行的寄存器组中,按顺序从数据填充模块输入到Wt生成模块的寄存器组中,进入S4;
S4、随后进入系统的下一个时钟周期,Wt生成模块中第0、1、9、14个寄存器上的数据会被输出,分别进行下列运算逻辑:
(a)第1个寄存器的数据会作为变量x被输入到以下运算逻辑:
σ0(x)=(x>>1)^(x>>8)^(x>>>7)
其中“>>”为循环右移操作,符号右侧的数字代表需要移动的位数,“>>>”为算术右移操作,符号右侧的数字代表需要移动的位数,“^”为异或操作;
(b)第14个寄存器的数据会作为变量x被输入到运算逻辑:
σ1(x)=(x>>19)^(x>>61)^(x>>>6)
其中“>>”为循环右移操作,符号右侧的数字代表需要移动的位数,“>>>”为算术右移操作,符号右侧的数字代表需要移动的位数,“^”为异或操作;
上述两个运算逻辑生成的值,与第0个寄存器,第9个寄存器的值进行加法操作,生成的值作为新的Wt算子,进入步骤S5;
S5、队列中原有的16个Wt算子依次前移一位,在第0个寄存器的Wt算子被移出,作为该轮的Wt算子送入到哈希运算模块,同时步骤S4中新的Wt算子被输入到第15个寄存器的位置,进入S6;
S6、哈希运算模块接收Wt生成模块输出的Wt算子,并计算用于更新哈希运算模块中寄存器所需要的T1值与T2值:
T1=H+∑512(1)(E)+Ch(E,F,G)+Kt+Wt;
T2=∑512(0)(A)+Maj(A,B,C)
其中∑512(1)(E)=(E>>14)^(E>>18)^(E>>41)
∑512(0)(A)=(A>>28)^(A>>34)^(A>>39)
Maj ( A , B , C ) = ( A ^ B ) ⊕ ( A ^ C ) ⊕ ( B ^ C )
Ch ( E , F , G ) = ( E ^ F ) ⊕ ( ⫬ E ^ G )
其中“^”代表异或运算,
Figure BSA00000193863000203
代表算术加运算;“<<”表示为循环左移操作,运算符右边的数字代表需要移位的位数;
Figure BSA00000193863000204
表示取反操作;“>>”为循环右移操作,符号右侧的数字代表需要移动的位数,Wt表示步骤S5中Wt生成模块输出的Wt算子,A值、B值、C值、D值、E值、F值、G值、H值分别对应哈希运算模块中从第一个寄存器到第八个寄存器依次存储的数据;其中Kt为64个Kt算子,是已定义的32位常量,其值如下:
428a2f98d728ae22 7137449123ef65cd b5c0fbcfec4d3b2f e9b5dba58189dbbc
3956c25bf348b538 59f111f1b605d019 923f82a4af194f9b ab1c5ed5da6d8118
d807aa98a3030242 12835b0145706fbe 243185be4ee4b28c 550c7dc3d5ffb4e2
72be5d74f27b896f 80deb1fe3b1696b1 9bdc06a725c71235 c19bf174cf692694
e49b69c19ef14ad2 efbe4786384f25e3 0fc19dc68b8cd5b5 240ca1cc77ac9c65
2de92c6f592b0275 4a7484aa6ea6e483 5cb0a9dcbd41fbd4 76f988da831153b5
983e5152ee66dfab a831c66d2db43210 b00327c898fb213f bf597fc7beef0ee4
c6e00bf33da88fc2 d5a79147930aa725 06ca6351e003826f 142929670a0e6e70
27b70a8546d22ffc 2e1b21385c26c926 4d2c6dfc5ac42aed 53380d139d95b3df
650a73548baf63de 766a0abb3c77b2a8 81c2c92e47edaee6 92722c851482353b
a2bfe8a14cf10364 a81a664bbc423001 c24b8b70d0f89791 c76c51a30654be30
d192e819d6ef5218 d69906245565a910 f40e35855771202a 106aa07032bbd1b8
19a4c116b8d2d0c8 1e376c085141ab53 2748774cdf8eeb99 34b0bcb5e19b48a8
391c0cb3c5c95a63 4ed8aa4ae3418acb 5b9cca4f7763e373 682e6ff3d6b2b8a3
748f82ee5defb2fc 78a5636f43172f60 84c87814a1f0ab72 8cc702081a6439ec
90befffa23631e28 a4506cebde82bde9 bef9a3f7b2c67915 c67178f2e372532b
ca273eceea26619c d186b8c721c0c207 eada7dd6cde0eb1e f57d4f7fee6ed178
06f067aa72176fba 0a637dc5a2c898a6 113f9804bef90dae 1b710b35131c471b
28db77f523047d84 32caab7b40c72493 3c9ebe0a15c9bebc 431d67c49c100d4c
4cc5d4becb3e42b6 597f299cfc657e2a 5fcb6fab3ad6faec 6c44198c4a475817
S7、哈希运算模块中,第七个寄存器中的G值更新第八个寄存器中的H值,第六个寄存器中的F值更新第七个寄存器中的G值,第五个寄存器中的E值更新第六个寄存器中的F值,第四个寄存器中的D值与T1值相加后更新第五个寄存器中的E值,第三个寄存器中的C值更新第四个寄存器中的D值,第二个寄存器中的B值更新第三个寄存器中的C值,第一个寄存器中的A值更新第二个寄存器中的B值,T1与T2相加的结果更新第一个寄存器中的A值;进入S8;
S8、哈希运算模块判断是否已经完成80轮散列计算,若不是,则返回步骤S4;若是,则选择第一、第二、第三、第四、第五、第六、第七及第八个寄存器的值作为输出,进入步骤S9;
S9、数据填充模块的寄存器的值减一,进入步骤S10;
S10、数据填充模块判断寄存器的值是否等于0:
若寄存器的值不等于0,则数据填充模块将明文直接输出到Wt生成模块,返回到S2;
若寄存器的值等于0,则数据填充模块在明文后面补充填充数据并一同输出到Wt生成模块,进入步骤S11;
S11、数据填充模块结束本次运算操作,等待下一次运算操作并返回到步骤S1。
在SHA-512的步骤S10中,所述填充数据的生成方法,包括以下步骤:
S4.1、判断明文数据长度(M值)能否被1024整除,若可以,则进入步骤S4.2;若不能,则进入步骤S4.3;
S4.2、数据填充模块为明文填充1位‘1’,895位‘0’以及M值(所述M值为用128位二进制数表示明文数据长度);
S4.3、数据填充模块为余下的一组不足1024位的数据块填充1位‘1’以及若干位‘0’,使其成为1024位的数据块;并且再填充一个1024位的数据块,其组成为896位的‘0’以及M值。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受所述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

Claims (10)

1.一种兼容三种SHA标准的装置,其特征在于,包括依次相连的数据填充模块、Wt生成模块和哈希运算模块,其中
所述数据填充模块,用于接收明文数据,并生成填充数据,将明文数据与填充数据输出至Wt生成模块;
所述Wt生成模块,用于接收数据填充模块输出的数据,在SHA-1模式中通过异或运算连接各操作数,在SHA-256及SHA-512模式中通过算术加操作对各操作数进行连接,生成新的Wt算子并输入到哈希运算模块;
所述哈希运算模块,用于接收Wt生成模块的Wt算子,进行散列运算,生成160位、256位或者512位的数据摘要。
2.根据权利要求1所述一种兼容三种SHA标准的装置,其特征在于:
所述数据填充模块包括寄存器、减法器和多路开关;
所述Wt生成模块包括寄存器、移位寄存器组、左循环移位逻辑、多路开关、加法器和异或运算器。
3.根据权利要求2所述一种兼容三种SHA标准的装置,其特征在于,所述哈希运算模块包括寄存器和逻辑运算模块:
所述哈希运算模块中的逻辑运算模块包括左循环移位逻辑、算术左移逻辑、多路开关、加法器和异或运算器;
所述哈希运算模块中的寄存器为8个64位寄存器,在不同模式,寄存器的初始值不同。
4.根据权利要求3所述一种兼容三种SHA标准的装置,其特征在于,所述Wt生成模块中的寄存器、移位寄存器组分为上下两行,每行的数据深度是16,具体为:
上面一行包括依次相连的一个32位位宽深度为2的移位寄存器、一个32位位宽深度为5的移位寄存器、一个32位位宽深度为8的移位寄存器和一个32位位宽寄存器;
下面一行包括依次相连的一个32位位宽深度为2的移位寄存器、一个32位位宽寄存器、一个32位位宽深度为4的移位寄存器、一个32位位宽寄存器、一个32位位宽深度为6的移位寄存器,一个32位位宽寄存器和一个32位位宽寄存器;
所述哈希运算模块中的寄存器为8个64位寄存器,所述每个64位寄存器都被定义为低32位及高32位。
5.根据权利要求4所述兼容三种SHA标准的装置的实现方法,其特征在于,包括以下步骤:
(I)数据填充模块接收明文数据,并生成填充数据,将明文数据与填充数据输出至Wt生成模块;
(II)Wt生成模块接收数据填充模块输出的数据,在SHA-1模式中通过异或运算连接各操作数,在SHA-256及SHA-512模式中通过算术加操作对各操作数进行连接,生成新的Wt算子并输入到哈希运算模块;
(III)哈希运算模块接收Wt生成模块的Wt算子,进行散列运算,在SHA-1模式下生成160位的数据摘要,在SHA-256模式下生成256位的数据摘要,或者在SHA-512模式下生成512位的数据摘要。
6.根据权利要求5所述兼容三种SHA标准的装置的实现方法,其特征在于,SHA-1模式具体包括以下步骤:
S1、用64位二进制数表示明文数据长度,设为M,若代表数据长度的数据不足64位,则以0补足最高位;将M值输入数据填充模块的专用寄存器中存储;进入步骤S2;
S2、待加密的明文以512位为一组,输入数据填充模块,进入步骤S3;
S3、Wt生成模块选取下面一行的寄存器组用于生成Wt算子;512位的明文从高位到低位被分成16组,每组32位,按顺序从数据填充模块输入到Wt生成模块的寄存器组中,进入S4;
S4、随后进入系统的下一个时钟周期,Wt生成模块中第0、2、8、15个寄存器上的数据会被输出做异或操作;异或操作得出的数在左循环移位一位后,作为新的Wt算子,进入步骤S5;所述0、2、8、15表示寄存器在本16数据深度寄存器组中的位置;
S5、队列中原有的16个Wt算子依次前移一位,在第0个寄存器的Wt算子被移出,作为该轮的Wt算子送入到哈希运算模块,同时步骤S4中新的Wt算子被输入到第15个寄存器的位置,进入S6;
S6、哈希运算模块由下至上,设这八个寄存器所存储的数据从第一个寄存器到第八个寄存器依次分别是A值、B值、C值、D值、B值、C值、D值、E值,哈希运算模块接收Wt生成模块输出的Wt算子,并判断当前散列运算正在进行的轮数,若在0到19轮散列运算中,则进入步骤S7;若在20到39轮或60到79轮的散列运算中,则进入步骤S8;若在40到59的散列轮运算中,则进入步骤S9;
S7、在0到19轮散列运算中,哈希运算模块使用第五、六、七个寄存器的值,及步骤S5中Wt生成模块输出的Wt算子,求出用于更新第一个寄存器所需要的T值,进入步骤S10;
步骤S8、在20到39轮或60到79轮的散列运算中,哈希运算模块使用第五、六、七个寄存器的值,或第二、三、四个寄存器的值,及步骤S5中Wt生成模块输出的Wt算子求出用于更新第1寄存器所需要的T值,进入步骤S10;
步骤S9、在40到59轮的散列轮运算中,哈希运算模块使用第二、三、四个寄存器的值,及步骤S5中Wt生成模块输出的Wt算子,求出用于更新第一个寄存器所需要的T值,进入步骤S10;
S10、哈希运算模块中,第四个及第七个寄存器中的D值一致,用第七个寄存器中的D值更新第八个寄存器中的E值,第三个寄存器及第六个寄存器中的C值更新第四及第七个寄存器中的D值,第二个寄存器及第五个寄存器中的B值更新第三及第六个寄存器中的C值,第一个寄存器中的A更新第二及第五个寄存器中的B值,用求得的T值更新第一个寄存器中存储的A值,进入S11;
S11、哈希运算模块判断是否已经完成80轮散列计算,若不是,则返回步骤S4;若是,则哈希运算模块选择第一、第二、第三、第四及第八个寄存器的值作为输出,进入步骤S12;
S12、数据填充模块的寄存器的值减一,进入步骤S13;
S13、数据填充模块判断寄存器的值是否等于0:
若寄存器的值不等于0,则数据填充模块将明文直接输出到Wt生成模块,返回到S2;
若寄存器的值等于0,则数据填充模块在明文后面补充填充数据并一同输出至Wt生成模块,进入步骤S14;
S14、数据填充模块结束本次运算操作,或等待下一次运算操作并返回到步骤S1。
7.根据权利要求5所述兼容三种SHA标准的装置的实现方法,其特征在于,SHA-256模式具体包括以下步骤:
S1、用64位二进制数表示明文数据长度,设为M,若代表数据长度的数据不足64位,则以0补足最高位;将M值输入数据填充模块的专用寄存器中存储;进入步骤S2;
S2、待加密的明文以512位为一组,输入数据填充模块,进入步骤S3;
S3、Wt生成模块选取下面一行的寄存器组用于生成Wt算子;512位的明文从高位到低位被分成16组,每组32位,按顺序从数据填充模块输入到Wt生成模块的寄存器组中,进入S4;
S4、随后进入系统的下一个时钟周期,Wt生成模块中第0、1、9、14个寄存器上的数据会被输出并用于生成新的Wt算子,进入步骤S5;所述0、1、9、14表示寄存器在本16数据深度寄存器组中的位置;
S5、队列中原有的16个Wt算子依次前移一位,在第0个寄存器的Wt算子被移出,作为该轮的Wt算子送入到哈希运算模块,同时步骤S4中新的Wt算子被输入到第15个寄存器的位置,进入S6;
S6、哈希运算模块接收Wt生成模块输出的Wt算子,设哈希运算模块由下至上,这八个寄存器所存储的数据从第一个寄存器到第八个寄存器依次分别是A值、B值、C值、D值、E值、F值、G值、H值;使用这八个寄存器所存储的数据计算用于更新哈希运算模块中寄存器所需要的T1值与T2值:
S7、哈希运算模块中,第七个寄存器中的G值更新第八个寄存器中的H值,第六个寄存器中的F值更新第七个寄存器中的G值,第五个寄存器中的E值更新第六个寄存器中的F值,第四个寄存器中的D值与T1值相加后更新第五个寄存器中的E值,第三个寄存器中的C值更新第四个寄存器中的D值,第二个寄存器中的B值更新第三个寄存器中的C值,第一个寄存器中的A值更新第二个寄存器中的B值,T1与T2相加的结果更新第一个寄存器中的A值,进入S8;
S8、哈希运算模块判断是否已经完成64轮散列计算,若不是,则返回步骤S4;若是,则哈希运算模块选择第一、第二、第三、第四、第五、第六、第七及第八个寄存器的值作为输出,进入步骤S9;
S9、数据填充模块的寄存器的值减一,进入步骤S10;
S10、数据填充模块判断寄存器的值是否等于0:
若寄存器的值不等于0,则数据填充模块将明文直接输出到Wt生成模块,返回到S2;
若寄存器的值等于0,则数据填充模块在明文后面补充填充数据并一同输出到Wt生成模块,进入步骤S11;
S11、数据填充模块结束本次运算操作,或等待下一次运算操作并返回到步骤S1。
8.根据权利要求6或7所述兼容三种SHA标准的装置的实现方法,其特征在于,所述填充数据,其生成方法包括以下步骤:
S4.1、判断明文数据长度M值能否被512整除,若可以,则进入步骤S4.2;若不能,则进入步骤S4.3;
S4.2、数据填充模块为明文填充1位‘1’,447位‘0’以及M值;
S4.3、数据填充模块为余下的一组不足512位的数据块填充1位‘1’以及若干位‘0’,使其成为512位的数据块;并且再填充一个512位的数据块,其组成为448位的‘0’以及M值。
9.根据权利要求5所述兼容三种SHA标准的装置的实现方法,其特征在于,SHA-512模式具体包括以下步骤:
S1、用128位二进制数表示明文数据长度,设为M,若代表数据长度的数据不足128位,则以0补足最高位;将M值输入数据填充模块的专用寄存器中存储,进入步骤S2;
S2、待加密的明文以1024位为一组,输入数据填充模块,进入步骤S3;
S3、Wt生成模块选取上下两行的寄存器组用于生成Wt算子;1024位的明文从高位到低位被分为16组,每组64位数据,高32位的数据存储于上面一行的寄存器组中,低32位的数据存储于下面一行的寄存器组中,按顺序从数据填充模块输入到Wt生成模块的寄存器组中,进入S4;
S4、随后进入系统的下一个时钟周期,Wt生成模块中第0、1、9、14个寄存器上的数据会被输出用于生成新的Wt算子,进入步骤S5;所述0、1、9、14表示寄存器在本16数据深度寄存器组中的位置;
S5、队列中原有的16个Wt算子依次前移一位,在第0个寄存器的Wt算子被移出,作为该轮的Wt算子送入到哈希运算模块,同时步骤S4中新的Wt算子被输入到第15个寄存器的位置,进入S6;
S6、设哈希运算模块由下至上这八个寄存器所存储的数据从第一个寄存器到第八个寄存器依次分别是A值、B值、C值、D值、E值、F值、G值、H值;哈希运算模块接收Wt生成模块输出的Wt算子,并计算用于更新哈希运算模块中寄存器所需要的T1值与T2值;
S7、哈希运算模块中,第七个寄存器中的G值更新第八个寄存器中的H值,第六个寄存器中的F值更新第七个寄存器中的G值,第五个寄存器中的E值更新第六个寄存器中的F值,第四个寄存器中的D值与T1值相加后更新第五个寄存器中的E值,第三个寄存器中的C值更新第四个寄存器中的D值,第二个寄存器中的B值更新第三个寄存器中的C值,第一个寄存器中的A值更新第二个寄存器中的B值,T1与T2相加的结果更新第一个寄存器中的A值,进入S8;
S8、哈希运算模块判断是否已经完成80轮散列计算,若不是,则返回步骤S4;若是,则选择第一、第二、第三、第四、第五、第六、第七及第八个寄存器的值作为输出,进入步骤S9;
S9、数据填充模块的寄存器的值减一,进入步骤S10;
S10、数据填充模块判断寄存器的值是否等于0:
若寄存器的值不等于0,则数据填充模块将明文直接输出到Wt生成模块,返回到S2;
若寄存器的值等于0,则数据填充模块在明文后面补充填充数据并一同输出到Wt生成模块,进入步骤S11;
S11、数据填充模块结束本次运算操作,或等待下一次运算操作并返回到步骤S1。
10.根据权利要求9所述兼容三种SHA标准的装置的实现方法,其特征在于,所述SHA-512的步骤S10中填充数据,其生成方法具体包括以下步骤:
S4.1、判断明文数据长度M值能否被1024整除,若可以,则进入步骤S4.2;若不能,则进入步骤S4.3;
S4.2、数据填充模块为明文填充1位‘1’,895位‘0’以及M值;
S4.3、数据填充模块为余下的一组不足1024位的数据块填充1位‘1’以及若干位‘0’,使其成为1024位的数据块;并且再填充一个1024位的数据块,其组成为896位的‘0’以及M值。
CN2010102156675A 2010-06-30 2010-06-30 一种兼容三种sha标准的装置及其实现方法 Pending CN101894229A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010102156675A CN101894229A (zh) 2010-06-30 2010-06-30 一种兼容三种sha标准的装置及其实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010102156675A CN101894229A (zh) 2010-06-30 2010-06-30 一种兼容三种sha标准的装置及其实现方法

Publications (1)

Publication Number Publication Date
CN101894229A true CN101894229A (zh) 2010-11-24

Family

ID=43103418

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010102156675A Pending CN101894229A (zh) 2010-06-30 2010-06-30 一种兼容三种sha标准的装置及其实现方法

Country Status (1)

Country Link
CN (1) CN101894229A (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102819706A (zh) * 2012-07-26 2012-12-12 重庆大学 在现有嵌入式设备上实现可信嵌入式系统的装置和方法
CN106878021A (zh) * 2012-03-30 2017-06-20 英特尔公司 用于处理sha‑2安全散列算法的方法和设备
CN108512647A (zh) * 2017-02-24 2018-09-07 深圳市中兴微电子技术有限公司 一种安全哈希算法sha256值的生成装置
CN108768656A (zh) * 2018-04-17 2018-11-06 无锡科技职业学院 一种应用于数据校验的哈希算法
CN111064561A (zh) * 2019-12-11 2020-04-24 北京雍鼎智能科技有限公司 消息加密方法及装置
CN111143893A (zh) * 2019-12-17 2020-05-12 北京宏思电子技术有限责任公司 一种哈希分组计算的安全实现方法及设备
US10725779B2 (en) 2013-06-26 2020-07-28 Intel Corporation Method and apparatus to process SHA-2 secure hashing algorithm
CN112988235A (zh) * 2021-02-06 2021-06-18 华中科技大学 一种高效率第三代安全散列算法的硬件实现电路及方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101178861A (zh) * 2006-11-08 2008-05-14 冲电气工业株式会社 Sha运算方法及sha运算装置
US20100086127A1 (en) * 2008-10-07 2010-04-08 Mikhail Grinchuk Efficient implementation of arithmetical secure hash techniques
CN101753291A (zh) * 2008-11-28 2010-06-23 佳能株式会社 哈希值计算装置及其方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101178861A (zh) * 2006-11-08 2008-05-14 冲电气工业株式会社 Sha运算方法及sha运算装置
US20100086127A1 (en) * 2008-10-07 2010-04-08 Mikhail Grinchuk Efficient implementation of arithmetical secure hash techniques
CN101753291A (zh) * 2008-11-28 2010-06-23 佳能株式会社 哈希值计算装置及其方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
《电子技术应用》 20061231 杨晓辉等 一种基于FPGA的可重构密码芯片的设计与实现 , 第8期 2 *

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106878021A (zh) * 2012-03-30 2017-06-20 英特尔公司 用于处理sha‑2安全散列算法的方法和设备
CN106878021B (zh) * 2012-03-30 2020-04-10 英特尔公司 用于处理sha-2安全散列算法的方法和设备
CN102819706A (zh) * 2012-07-26 2012-12-12 重庆大学 在现有嵌入式设备上实现可信嵌入式系统的装置和方法
US11550582B2 (en) 2013-06-26 2023-01-10 Intel Corporation Method and apparatus to process SHA-2 secure hashing algorithm
US10725779B2 (en) 2013-06-26 2020-07-28 Intel Corporation Method and apparatus to process SHA-2 secure hashing algorithm
CN108512647A (zh) * 2017-02-24 2018-09-07 深圳市中兴微电子技术有限公司 一种安全哈希算法sha256值的生成装置
CN108768656A (zh) * 2018-04-17 2018-11-06 无锡科技职业学院 一种应用于数据校验的哈希算法
CN111064561A (zh) * 2019-12-11 2020-04-24 北京雍鼎智能科技有限公司 消息加密方法及装置
CN111064561B (zh) * 2019-12-11 2023-04-25 北京雍鼎智能科技有限公司 消息加密方法及装置
CN111143893A (zh) * 2019-12-17 2020-05-12 北京宏思电子技术有限责任公司 一种哈希分组计算的安全实现方法及设备
CN111143893B (zh) * 2019-12-17 2023-04-07 北京宏思电子技术有限责任公司 一种哈希分组计算的安全实现方法及设备
CN112988235B (zh) * 2021-02-06 2022-06-14 华中科技大学 一种高效率第三代安全散列算法的硬件实现电路及方法
CN112988235A (zh) * 2021-02-06 2021-06-18 华中科技大学 一种高效率第三代安全散列算法的硬件实现电路及方法

Similar Documents

Publication Publication Date Title
CN101894229A (zh) 一种兼容三种sha标准的装置及其实现方法
CN106610813B (zh) 用于在乘法器累加器块中执行乘积级数运算的方法和装置
CN101111834A (zh) 动态可重配置处理器
US20070157131A1 (en) System and method for incremental synthesis
CN106484366B (zh) 一种二元域位宽可变模乘运算器
CN108491269A (zh) 一种工作量证明运算芯片优化的方法和电路
CN104679474A (zh) 有限域gf(2^227)上的乘法器及模乘算法
CN1503936A (zh) 部分逐位置换
CN112200713B (zh) 一种联邦学习中的业务数据处理方法、装置以及设备
CN102301325A (zh) 具有预加法器级的数字信号处理块
CN105335331A (zh) 一种基于大规模粗粒度可重构处理器的sha256实现方法及系统
CN107633298A (zh) 一种基于模型压缩的递归神经网络加速器的硬件架构
CN104461449A (zh) 基于向量指令的大整数乘法实现方法及装置
CN109284083A (zh) 一种乘法运算装置及方法
CN106712928A (zh) 基于大数据彩虹表的解密方法和装置
CN105631013A (zh) 生成哈希值的装置和方法
CN109478996A (zh) 用于执行混淆算术的设备和方法
CN101021777B (zh) 基于除数(2n-1)的有效求模操作运算
CN101295237B (zh) 求商和余数的高速除法器
CN114063973B (zh) 伽罗华域乘法器及纠删编解码系统
CN107704335B (zh) 一种基于fpga的crc并行运算ip核
CN104580017A (zh) 基于rss的网络会话分发方法及系统
CN112162723B (zh) 一种量子减法运算方法、装置、电子装置及存储介质
CN102884505B (zh) 数据处理装置和数据处理方法
CN107066900A (zh) 面向分组密码算法的可重构s盒、可重构计算阵列及门控方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication

Open date: 20101124