专利名称:一种硬件快速实现杂凑算法的方法
技术领域:
本发明涉及一种通过硬件设计实现信息加密的方法,特别是涉及一种通过集成电路硬件快速实现杂凑算法(hash函数又称单向散列函数)的方法。
背景技术:
在信息化高度发达的今天,信息传输的高速性和安全性越来越得到人们的重视。信息的安全性既包含了信息的保密性,又包含了信息的完整性和信息能被认证。杂凑函数(hash函数、单向散列函数)能够对任意长度(<2^64bit)的消息进行运算,产生固定长度的消息摘要作为消息的标识。由于hash函数具有单向性,所以根据hash函数计算结果难以反向推算出原消息,同时如果原消息有微小改动,所计算得出的消息摘要也将有相当大的不同,基于这一特性,hash函数在信息安全的数字签名等领域占据了重要的一席之地。在利用hash函数对消息进行单向运算的方面,可行的方法有软件实现和硬件实现两种。其中软件实现比较简单,但速度较慢,效率低,不适应信息传输高速性的要求。为了适应数据高速传输的要求,人们提出了hash函数硬件化的要求。但是基于hash函数硬件化设计方法的困难,目前国内包含杂凑算法的专用集成电路还是空白。
发明内容
本发明的目的是为设计高速通用型的杂凑算法集成电路处理提供一套设计方法,即提供一种硬件快速实现杂凑算法的方法,在保证硬件高速处理输入数据流和输入数据流稳定性的同时尽可能地减少逻辑门数。
为了实现发明目的,所采用的技术方案一种硬件快速实现杂凑算法的方法,按杂凑算法的流水作业操作顺序将集成电路的硬件进行如下的部署一、使数据首先经过接口模块,该接口模块设置有一个是处理器的控制接口,连接处理器对各个寄存器进行读写,另外设置一个数据输入接口;二、使数据填充和数据的收集和处理在数据处理模块中完成,该数据处理模块设置2个数据缓冲器,对与MD5函数,一个缓冲器向处理核输出数据时,另一个缓冲器收集下一个512位数据块,对于SHA-1函数,先由二号缓冲器收集满512位数据,第一轮运算由二号缓冲器由低到高给出数据,同时一号缓冲器收集这些数据并进行移位,第二轮运算开始由一号缓冲器取特定位置的数据进行计算得到输出到处理核的数据,同时把输出数据作为一号缓冲器的移位输入,另外,在该数据处理模块设置A、B、C、D、E5个寄存器分别代表hash运算中使用的CVR从低到高的五个32位域,在A寄存器与Adder1之间设置一个S2单元,当函数是sha1时其输出是输入的循环左移5位的值,否则直接输出输入数据,在Adder1与Adder2之间引入S1单元,当函数是sha1是直接输出输入数据,否则根据hashcore输入的S进行循环左移再输出,设置一个数据选择器MUX6为Adder2从B和E中选择一个输入数据,当函数是md5时选B,当函数是sha1时选E,同时,在该数据处理模块中设置MUX1、MUX2、MUX3、MUX4、MUX55个数据选择单元,依次对应所述A、B、C、D、E5个寄存器,并分别为对应的寄存器提供下一时钟上升沿所需的数据,所述每个数据选择单元在有写CVR信号时输出所要写的相应数据,在有写OMR信号时输出CVR的初始化数据,除此之外输出各自的上一时钟沿之后,根据CVR运算所得的数据,当最后的512位数据处理完毕,所述CVR寄存器中的值就是集成电路硬件实现的hash结果,通过所述接口模块中的处理器的控制接口输出;三、使数据适应多种处理器的存储映射模式,设置一个存储映射转换模块,根据所选hash函数以及OMR综ER寄存器的设置,对写入HU单元中指定寄存器的值和从CVR中读出的值进行big-endian与little-endian之间的相互转换。
本发明采用的技术方案与现有技术或产品相比,具有明显的优点和积极效果本发明的设计思路是按照算法的操作顺序采取流水作业,数据首先经过接口模块,再到数据预处理模块,接着进入是处理单元,最后结果通过接口输出。其接口模块的设计既考虑了使用的方便性,也考虑了高速数据输入的方便性。两个接口一个是处理器的控制接口用于处理器对各个寄存器进行读写进而控制的工作,另一个是数据输入接口,这样硬件模块的数据就不需要由外部处理器进行输入了,一方面减轻了处理器的负担,另一方面又可以使得数据处理的速度不受处理器的影响。根据hash算法的要求,每一次处理都必须集齐512位数据,所以数据首先进入消息数据缓冲器,集齐512位数据后选择处理核所需的32位数据送交处理核处理。为了不出现一次处理后要等待集齐下一个512位数据块,本发明设计在集成电路硬件中采用两个数据缓冲器,这样就可以即满足两个函数的计算要求,同时又使得数据的收集和数据的处理同时工作,提高速度。本发明利用md5函数与sha1函数运算中的共同点和不同点,设计了两个函数共用的hashcore处理核,使两个函数共用了CVR寄存器,Adder1,Adder2等单元,实现了两函数共用数据处理核的设想。所以,本发明在保证硬件高速处理输入数据流和输入数据流稳定性的同时尽可能地减少了逻辑门数,减少了集成电路芯片的面积,实现了发明目的。应用本发明设计的杂凑算法集成电路芯片可以作为一款协处理器芯片使用,也可以作为IP核提供给其它的更大的芯片或者FPGA开发板等使用。
图1为hashcore设计硬件部署流程图;图2为接口模块与数据处理模块连接关系示意图;图3为接口模块控制单元框图;图4为数据处理单元框图;图5为数据填充单元框图;图6为数据填充单元状态转换图;图7为数据压缩单元框图;图8为消息数据缓冲器框图;图9为压缩单元状态控制器框图;图10为压缩单元状态转换图;图11为hashcore框图。
具体实施例方式
下面结合各个附图,对本发明进一步详细描述一种硬件快速实现杂凑算法的方法,按杂凑算法的流水作业操作顺序将集成电路的硬件进行如下的部署,如图2所示,一、使数据首先经过接口模块,该接口模块设置有一个是处理器的控制接口,连接处理器对各个寄存器进行读写,另外设置一个数据输入接口,本方法实现的硬件电路模块的工作需要有一个外部32位处理器的控制,为了不占用过多处理器的时间,本方法实现的接口模块设计了两个接口,一个处理器的控制接口,用于和外部处理器通信,一个数据输入接口,用于接受大量处理数据,其中,处理器的控制接口包含一个数据输入输出双向接口、地址总线、异步复位信号、读写允许信号、读写控制信号以及模块各状态位输出信号(如模块使能、输入数据允许、输入数据请求、Hash不可操作工作标志、模块忙状态标志、模块出错标志、Hash操作退出标志、操作完成信号),数据输入接口包含一个32位数据输入接口、输入数据时钟、输入队列数据预写允许信号、数据队列写允许信号以及队列状态输出信号(如输入队列空、输入队列满、输入队列半满);二、使数据填充和数据的收集和处理在数据处理模块中完成,该数据处理模块设置2个数据缓冲器,对与MD5函数,一个缓冲器向处理核输出数据时,另一个缓冲器收集下一个512位数据块,对于SHA-1函数,先由二号缓冲器收集满512位数据,第一轮运算由二号缓冲器由低到高给出数据,同时一号缓冲器收集这些数据并进行移位,第二轮运算开始由一号缓冲器取特定位置的数据进行计算得到输出到处理核的数据,同时把输出数据作为一号缓冲器的移位输入,另外,在该数据处理模块设置A、B、C、D、E 5个寄存器分别代表hash运算中使用的CVR从低到高的五个32位域,在A寄存器与Adder1之间设置一个S2单元,当函数是sha1时其输出是输入的循环左移5位的值,否则直接输出输入数据,在Adder1与Adder2之间引入S1单元,当函数是sha1是直接输出输入数据,否则根据hashcore输入的S进行循环左移再输出,设置一个数据选择器MUX6为Adder2从B和E中选择一个输入数据,当函数是md5时选B,当函数是sha1时选E,同时,在该数据处理模块中设置MUX1、MUX2、MUX3、MUX4、MUX5 5个数据选择单元,依次对应所述A、B、C、D、E5个寄存器,并分别为对应的寄存器提供下一时钟上升沿所需的数据,所述每个数据选择单元在有写CVR信号时输出所要写的相应数据,在有写OMR信号时输出CVR的初始化数据,除此之外输出各自的上一时钟沿之后,根据CVR运算所得的数据,当最后的512位数据处理完毕,所述CVR寄存器中的值就是集成电路硬件实现的hash结果,通过所述接口模块中的处理器的控制接口输出;三、使数据适应多种处理器的存储映射模式,设置一个存储映射转换模块,根据所选hash函数以及OMR综ER寄存器的设置,对写入HU单元中指定寄存器的值和从CVR中读出的值进行big-endian与little-endian之间的相互转换。
在步骤二中所述的A、B、C、D、E5个寄存器设置复位信号,当复位信号置低,CVR立即置0,否则就在时钟上升沿置为各自对应的所述MUX1、MUX2、MUX3、MUX4、MUX5数据选择单元的输出值。
1.接口模块本方法实现的硬件电路模块有两个接口数据输入接口和控制接口。数据输入接口直接与输入队列相连,由外界输入数据;控制接口与外部处理器相连,根据处理器给出的地址和读写信号读写内部各个寄存器。本模块的数据输入既可以由数据输入接口输入也可以由外部处理器从控制接口输入到datainreg中,供hash单元处理。接口模块包括控制单元(HU Control),输入队列(input fifo)、32位数据选择单元(mux32)以及数据转换单元(d32to64conv)。控制单元管理着处于接口模块中的各个寄存器(STAT、HCR、ERR、datainreg),控制整个接口数据的输入与输出,并将datainreg的数据传输到数据选择单元;输入队列从数据输入接口接受数据,并将数据传输到数据选择单元;数据选择单元根据控制单元给出的选择信号对datainreg和输入队列的数据进行选择,实现两个接口都可以输入数据的功能;数据转换单元将连续输入的两个32位数据转换成一个64位数据,作为hash处理模块的输入。
1.1接口模块中的控制单元(HUControl)为实现上述控制单元的功能,设计时在控制单元中引入地址译码单元(addrdec)、寄存器单元(HUregs、datainreg)和Husm,如图3所示。
1.1.1接口模块中的控制单元中的寄存器单元接口模块中的寄存器单元有HUregs和datainreg两个,HUregs中包含了STAT、ERR、HCR寄存器。其中,STAT寄存器中包含了模块的各种状态信息,其中有模块忙状态信号、模块出错信号、模块不可操作信号、输入请求信号、模块使能信号、输入队列空、满、半满信号。ERR寄存器中包含了模块具体出错的信息,如填充出错、工作时改写操作寄存器的值、所写入的hash函数选择数据不对。HCR寄存器中包含控制模块运作的信号数据输入使能、单元使能、单元复位。datainreg是从控制接口接收数据的寄存器,当该寄存器空时,就向HUregs单元给出输入请求信号,并最终输出到模块IRF引脚上,以提示处理器可以对从控制接口输入数据;当该寄存器满时,就向hash处理单元发出输出请求信号,以提示有数据可供处理。
1.1.2接口模块中的控制单元中的地址译码单元(addrdec)地址解析单元对控制接口输入的地址进行译码,输出各寄存器的选择信号,具体设计中,模块规定控制接口读写数据的周期为两个时钟周期,为了避免数据被重复读写两次,在接口处设置一个mimsb引脚,在addrdec单元中设置了一个AccessReg信号,当有数据读写操作时,应将mimsb引脚置低,在时钟上升沿如果AccessReg=’0’则AccessReg=NOT mimsb否则AccessReg=’0’。如此,AccessReg在数据读写的两个时钟周期中只有一个周期有效,从而既保证了与工作频率较低的外部处理器正常通信又避免了多次读写数据。
1.1.3接口模块中的控制单元中的HUsm单元HUsm对模块实施控制,如模块使能,数据输入允许等,同时还给出模块是否处于忙状态的标志,以示hash处理是否完成。
1.2接口模块中的数据输入队列(input fifo)为了适应多种与外界的数据传输模式,模块在接口处引入了一个输入队列,使得外界可以一次性写入多组数据供模块压缩,从而可以提高整个系统的工作效率。具体实现上,inputfifo可以分为存储单元和输入输出控制单元。inputfifo的存储单元以双口RAM为基础,根据本模块的需要封装而成。封装后,存储单元提供读写时钟、读写地址、读写数据以及写允许等接口供输入输出控制单元操作。Inputfifo的输入输出控制单元在设计中引入了写控制器和读控制器对双口RAM数据的输入输出进行管理,通过内部机制将双口RAM作为一个循环队列来使用。写控制器负责向双口RAM提供写数据允许信号和写数据地址(gray码)。其输入时钟是外部写数据时钟,同时还输入读控制器输出的读地址信号(gray码)。内设状态机、计数器、gray码转换器等单元。Gray码转换器将输入的读地址转换成普通二进制码;将内部的写地址转换成gray码。状态机比较RAM的写地址和读地址的普通二进制码,进行状态转换并向外界提供队列的状态信息(IFF,IFHF,IFE),同时,还控制着计数器的增加允许信号(队列不满,增加允许);当增加允许时,加法器作以128为周期的加法运算。读控制器负责向双口RAM提供读数据地址,以及向内部输出数据输出允许信号OAF。其输入时钟是模块内部时钟,同时还输入写控制器输出的写地址信号(gray码)。实现上和写控制器基本相似。
1.3接口模块中的数据转换(d32to64conv)32位的输入数据首先填入数据转换单元中64位寄存器的高位,接下来的32位数据填入低位,之后根据pad unit单元的输入请求信号再输出已填充好的64位数据。与前后单元的通信机制当64位寄存器未满时,d32to64conv传递一个输入请求信号IRF给输入队列,当输入队列给出输出允许信号OAF时,d32to64conv开始读取数据。当d32to64conv中数据已满时,输出输出允许信号给填充单元。
2.数据处理模块根据hash算法的规则,设计中将hash处理单元(HU)划分成状态控制模块,填充模块、数据压缩模块三部分,如图4所示2.1数据处理模块中的状态控制模块整个hash处理单元的状态控制基本都是基于操作模式寄存器(OMR)来管理数据的压缩运算的。对OMR的操作,设计中引入OMRReg单元进行管理。该单元负责对OMR寄存器进行读写,并把写入到OMR中的值以及根据该值产生的状态信息输出到各个功能模块中以控制模块的工作。值得一提的是HFW信号,该信号在pad unit和hashcell中都将用到,在每次对OMR进行写操作以后,该信号被置高,表示一次hash压缩开始,此高电平将一直保持到所有此次压缩所需数据填充完成;完成后,pad unit单元输出ResetHFW信号,使HFW信号置低,一次数据输入结束。
OMR包含如下寄存器HU_EH规定在出现错误以后HU如何对数据进行处理;HU_DIS位规定了HU的数据接口;
HMTR是一个一位寄存器,规定输入的hash消息是否是已经填充好了的数据;ER是一个2-bit寄存器,规定在CVR寄存器中的数据和数据流之间的转换方式;HFR是一个3-bit寄存器,规定hash运算中所使用的hash函数。
2.2数据处理模块中的数据填充(pad unit)如图5所示,由数据转换单元输出的64位数据首先进入pad unit中的数据缓冲器databuffer,同时对输入的64位进行高低位置换。由填充规则可知有4种可能的填充数据数据本身(数据不是最后的64位数据块,或数据本身不需要填充);数据结尾加上一个1后再填0的64位数据块(最后一个数据块,或紧跟最后一块数据块的附加填充块);全零数据块(输入数据已填充完,但填充所得数据未满448位);长度数据块。根据以上填充数据的特性,模块引入一个数据选择器selector,由databuffer单元、padder单元、zero单元以及长度计算单元提供被选数据,同时databuffer单元还向padder单元提供被填充数据。此外,引入控制单元来产生数据选择信号。
在具体的实现上padder对其输出数据的每一位做3种可能的处理1、如果数据位处于输入数据长度之内,则该输出数据位等于输入数据位。2、如果数据位紧跟输入数据的最后一位,则该数据位输出1。3、如果数据位超出输入数据两位以上,则该数据位输出0。其中padder单元填充数据1的位置信息由数据长度寄存器HMLR的低6位提供,当输出位置等于HMLR低六位所示数时,代表输入数据已在前一位结束(前提是该数据块是最后的数据块),padder单元在此处填充1。如果数据块不是最后的数据块,padder也做同样处理,但接下来的数据选择器对数据进行选择时,不会选择padder的数据输出,而是选择databuffer的数据直接输出。当填充了1的64位数据填入512位空间后,数据未满448或超过448,接下来的数据全都填零,直到数据总长度是512的整数倍余448。Zero单元就提供此时填充所需要的0数据块。该数据填充模块使用了数据块计数器(DBCR)、长度寄存器(HMLR)、长度填充转换器(WSBS)、长度比较器(lengthcmp)以及数据填充状态机(dataflowctrl)五个部件来控制整个填充流程。长度比较器比较DBCR(56位)和HMLR的高56位比较,当前者少1时,输出数据输入完毕信号。状态机根据所输入数据类型、长度比较器输出、已填充数据等信号跳转状态并输出相应选择信号,其中状态分为Idle,PaddedMess,PassDataBlock,PadDataBlock,AddZeroBlock,AddLengthBlock,TransToIdle等7个状态,状态转换如图6所示。
状态分析由于pad unit中引入了databuffer,输入数据在此会延时一个时钟周期,但d32to64conv单元的输出允许信号是于输入数据同步的,所以在pad unit中要引入一个于databuffer输出数据同步的数据输入允许信号IAFDel,以表示databuffer输出数据的正确性。Idle状态表示没有数据输入或模块未使能情况下,填充单元所处的状态。要离开该状态,需要满足两个条件1、必须在OMR中写入正确的函数值(HashFunc/=“000”并且HFW=‘1’);2、d32to64conv允许输出。在这两个条件满足的情况下,如果输入的数据不需要填充(OMR中HMTR=1),则下一状态跳转到PaddedMess,如果OMR中HMTR=0,则继续判断DBCR寄存器和HMLR寄存器,如果DBCR[57..0]=HMLR[63..6]或是HMLR<64,说明接下来的是最后一块数据块,填充单元跳转到PadDataBlock;否则,数据不是最后一块数据,可直接将其输出无需填充,所以接下来的状态跳转到PassDataBlock。另外,我们还要注意到一种情况如果要对一个空数据块压缩,接下来的状态就应该是数据填充状态,但此时将不会有d32to64conv的输出允许信号传到pad unit单元,所以我们将这种情况单列出来。PassMess状态是在输入数据不需要填充时pad unit处于的工作状态。在该状态,选择器选择databuffer的数据输出。当OMR再次被执行写操作时,pad unit状态转换到Idle状态。PassDataBlock状态表示输入数据块不是最后的一块数据块,该数据块可以直接经selector输出到endian convertor中。如果此时压缩单元可以接受数据进行处理(ReadyToReceive=‘1’),并且数据已经是倒数第二块数据块DBCR=HMLR[63..6]-1(equal=1),则下一状态将跳转到PadDataBlock。PadDataBlock状态表示databuffer中的数据是最后一块数据块,此时selector选择padder的数据输出。如果此时输入数据有效(IAFDel=’1’)或是需填充’1’的单元是一个空单元(HMLR[5..0]=0),且此时填充单元不是512位中的第7个64位数据块(HMLR[8..6]/=”110”),则下一状态跳转到AddZeroBlock,否则,如果此时填充单元是512位中的第7个64位数据块(HMLR[8..6]=”110”),则下一状态跳转到AddLengthBlock。AddZeroBlock表示填充‘1’工作已经做完但数据块还不是512位的第7个64位数据块的状态,此时需要用0数据块来填充,selector选择zero的数据输出,直到数据块还已是512位的第7个64位数据块,之后跳转到AddLengthBlock。AddLengthBlock表示pad unit此时对数据填充长度数据块。Selector选择WSBS的数据输出。如果此时压缩单元可以接受数据进行处理(ReadyToReceive=‘1’),则下一状态跳转到TransToIdle状态。TransToIdle是数据填充已经完成,pad unit由工作状态跳转到Idle状态的一个过度状态。之所以要有此状态,要联系到OMRReg中的HFW信号,该信号为高表示此时HFR的值是有效的,该信号从0到1说明一次数据压缩运算开始。当一次填充完成以后,对应于原先的HFR的待压缩数据已经全部输入到数据压缩单元,所以设计中引入一个HFWReset信号,该信号在此时置高将HFW置零。如果没有这一个设置,状态跳转到Idle后又会由于HFW=1而错误跳出Idle状态。
数据由数据选择器输出后,交由endian单元对其存储映射模式进行转换。转换过程中,根据不同的hash函数进行不同的转换处理。如果所选函数是md5函数,则将每个字节的高低位置换;如果是sha1函数,则将每4个字节的高低位进行置换。至此,数据的前期操作已经完成。
2.2数据处理模块中的数据压缩(hashcell)如图7所示,该数据压缩模块的最终目的是利用hash函数对输入消息进行压缩,生成128(md5)或160(sha1)位的消息摘要。根据两个函数的规则可以看出,它们每次都是对512位数据进行运算,所以在正式压缩前要将输入到压缩单元的64位数据分成每8个一组,组成512位后再做hash运算。之后,数据处理单元还要在做下一次运算之前要将前一次的运算结果和前一次的输入相加作为下一次的初始向量。如此继续下去,直到全部数据处理完成。为实现上述算法,该数据压缩模块采用以数据处理为中心,状态控制单元和其它参数提供单元、结果处理单元以及链接寄存器单元为辅助的设计思路,引入一个hash处理核(hashcore)、一个状态控制器(hashcontrol)、一个消息数据缓冲器(hashmblk),一个hash结果处理器(hashfa)以及一个链接变量寄存器(hashhr)。消息数据缓冲器,用于将输入压缩单元的64位数据转换成512位数据,并根据控制单元的信号输出hash处理核所需的输入消息,如图8所示。在实现上,为了不出现一次数据压缩完毕后,为集齐512位数据的等待现象,在数据缓冲器中引入两个512位的寄存器,其中寄存器1还为sha1设置了移位功能。以md5和sha1的数据流程分述如下对md5来说,两个512位寄存器的地位是一样的,输入数据时具体选择哪一个由hashmblk中的控制单元regctrl给出选择信号,在两个寄存器都是空时,数据填入寄存器1;当寄存器1已经填满仍有数据输入时,数据填入寄存器2;寄存器填满后,向regctrl给出填满信号,regctrl随即向压缩单元给出一个starthash信号,并根据寄存器的状态选择接下来接受数据的寄存器。寄存器中输入填充的位置由pad unit中DBCR的低3位决定。两个寄存器的数据输出都接到各自的一个md5数据选择器wordmux3以及wordmux2,数据选择信号由压缩控制单元给出。对于md5函数,将只用到MBSel1选择信号。该信号与压缩单元给出的寄存器选择信号一起选择出压缩单元所需的输入数据。实现上引入一个选择器mbmux,该选择器在压缩函数是md5时,根据压缩单元给出的寄存器选择信号来选择wordmux3和wordmux2的输出数据作为压缩单元的输入。对于sha1来说,寄存器1与寄存器2相比,多了移位功能;寄存器2的输入来源于数据填充单元(pad unit),而寄存器1的输入来源于消息数据缓冲器本身的输出。当512位数据依次到来时,数据必须首先填入寄存器2中。当压缩处理过程处于第一轮运算时,计算所需数据是原始输入数据的第1至32块。此时,32位数据由数据选择信号MBSel2来选择,被选数据经由wordmux1输出到shamux;shamux在第一轮将来自wordmux1的数据直接输出到mbmux和寄存器1,mbmux将输入传入压缩单元;寄存器1进行移位寄存,依次将本单元的输出数据存储下来,以备在之后的运算中提供计算W[k]所需的W[k-3],W[k-8],W[k-14]和W[k-16]。当数据运算处于第二、三、四轮运算时,压缩单元已不从寄存器2读取数据,而是利用寄存器1中的数据来产生所需的W[k]。实现上,寄存器1中的数据经由shaxor得到W[k]后,输出到shamux,此时shamux选择shaxor的数据,并对数据进行循环左移一位的操作,之后将所得结果同时传给mbmux和寄存器1。Mbmux将输入传入压缩单元;寄存器1进行移位寄存。
状态控制器,为hash处理核提供运算时所需的各常量信号,为消息数据缓冲器提供寄存器选择信号和数据选择信号,同时还为结果处理器以及链接变量寄存器提供控制信号。状态控制器主要由三部分组成decodestate(常数提供单元)、counter(计数单元)和hashsm(状态机)。在hashsm与counter之间,hashsm向counter发出置位信号,counter计数完成后向hashsm返回计数完成信号通知其一轮计算完成;在decodestate与counter之间,counter向decodestate传输在具体一轮中运算的所处步数;在hashsm与decodestate之间,hashsm向decodestate发出处理轮数和各个常量的提取信号,decodestate根据轮数和counter提供的步数向处理核给出相应的常量数据,如图9所示。
Counter是一个递增计数器,并且根据所选函数不同,自动设置计数周期(md516;sha120)。当计数周期满或hashsm给出置零信号时,计数器返回零开始计数,其中,计数周期满时计数器还给出相应的信号通知hashsm,以告知一轮处理结束。
Decodestate中有两种函数的常量存储单元md5ds和sha1ds,两者根据所处在轮数此时的运算次数给出下一次运算的常数输出(此处“所处轮数此时的运算次数”的产生将在后续的hashsm的论述中详细讲述),并通过selconstfunc由所选函数信号选择改函数所需的输出。Hash运算在做完一次后,下一轮运算的链接变量要由上一轮的结果和初始链接变量运算得到。因此,我们在hashcontrol中引入selectorfa单元,根据不同的函数给出不同的运算控制信号,同时也产生md5ds和sha1的轮数信号。所有由selconstfunc和selectorfa输出的信号都要经过一个寄存器单元registers以引入芯片复位信号的影响和使各个常量和数据可以在同一时钟上升沿打到处理核的输入,保证了同步性。这也是为什么在当前运算次数时要给出下一次运算所需常量的原因。
Hashsm是控制单元的核心,它控制着数据运算的状态。根据数据运算流程,我们可以大致分成空闲状态、数据预取状态、数据运算1~4轮,结果处理状态和数据等待状态。
状态分析芯片复位或所设定的hash函数不正确时,处理核无需处理数据,此时处于空闲状态;当消息数据缓存器向处于空闲状态的处理核发出运算请求信号时,由于hash运算要求有输入数据、各个运算常量的配合,而在空闲状态这些数据都没有给出(空闲态不知道接下来要做的是哪个函数的运算,无法给出下一状态所需的数据),所以在第一轮运算之前需要加入一个预处理状态,以为第一轮运算做好准备;预处理状态完成后,芯片将根据所选处理函数跳转到相应的运算状态,并依次执行几轮运算,由于不同轮处理所需的数据、常量等不同,因此为每一轮处理设置一个状态;最后一轮处理结束后,链接变量还要与初始链接变量运算得到一次512位数据的运算结果,为此我们设立一个结果处理状态,此时控制器输出结果处理时所需的各种信号;一次512位数据处理结束后,可能有三种情况处理函数被设为无效值,此时状态将跳转到空闲状态;新的数据没有准备好,芯片跳转到等待数据状态;新的512位数据已经准备好了,芯片直接跳转到第一轮数据处理状态。芯片处于数据等待状态后,如果处理函数被置保留值,则跳转到空闲状态;如果数据已经准备好了,则跳转到第一轮运算状态。不论是处于结果处理状态时512位数据已经准备好,还是处于数据等待状态时数据已经准备好,亦或是处于预处理状态,芯片要跳转到第一轮运算的另一个条件是第一轮的第一次运算所需的各个数据都要在之前准备好,所以当芯片处于上述几个状态时,轮数输出应当是一次512位数据运算的最后一轮,并且此时md5ds和sha1ds的运算次数输入应当是一轮中的最后一次,但此时计数器要被置位,不能提供次数信息。为了保证这一点,我们回到介绍decodestate单元时留下的问题。在decodestate单元中用selectorfa来提供运算次数信号,我们为这三个状态引入一个信号preload,该信号在这三个状态下被置高,selectorfa在preload处于低时输出counter的计数值,在preload处于高时输出一轮中的最后一次运算的计数值。这样就解决了运算时所需各个数据的问题。
状态转换图如图10所示,在消息数据缓冲器中引入了两个寄存器,一个寄存器处于工作状态时另一个可以收集数据,并在收集满时向hashcontrol发出starthash信号,如果此时数据处理核正在压缩数据,就不能及时响应该信号,所以设计中引入了一个针对starthash信号的计数器,当该计数器值不为0时,状态图中的StartHashReg将置‘1’。
数据处理核,实现md5函数和sha1函数的运算过程,是hash运算的核心部分。运算的目的就是得到新的链接寄存器值,设计中设有5个寄存器A,B,C,D,E。由于md5和sha1处理有许多共同之处,利用这些共同之处,可以共用一些单元。在sha1得到A寄存器和md5得到B寄存器的路径上都用到了非线性函数,一个四输入加法器和一个二输入加法器,设计遵从共用单元和共用路径两条原则,实现了两个处理函数共用同一个处理核的目的。实现过程中采取在时钟上升沿对CVR赋值,之后又根据所得到的CVR在一个时钟周期内产生下一次CVR的值,以便在下一个上升沿给CVR赋值,如图11所示。
3.存储映射转化模块为了适应多种处理器的存储映射模式,设计中为此加入一个存储映射转换模块,根据所选hash函数以及OMR综ER寄存器的设置,对写入HU单元中指定寄存器的值和从CVR中读出的值进行big-endian与little-endian之间的相互转换。
权利要求
1.一种硬件快速实现杂凑算法的方法,按杂凑算法的流水作业操作顺序将集成电路的硬件进行如下的部署,其特征在于一、使数据首先经过接口模块,该接口模块设置有一个是处理器的控制接口,连接处理器对各个寄存器进行读写,另外设置一个数据输入接口;二、使数据填充和数据的收集和处理在数据处理模块中完成,该数据处理模块设置2个数据缓冲器,对与MD5函数,一个缓冲器向处理核输出数据时,另一个缓冲器收集下一个512位数据块,对于SHA-1函数,先由二号缓冲器收集满512位数据,第一轮运算由二号缓冲器由低到高给出数据,同时一号缓冲器收集这些数据并进行移位,第二轮运算开始由一号缓冲器取特定位置的数据进行计算得到输出到处理核的数据,同时把输出数据作为一号缓冲器的移位输入,另外,在该数据处理模块设置A、B、C、D、E5个寄存器分别代表hash运算中使用的CVR从低到高的五个32位域,在A寄存器与Adder1之间设置一个S2单元,当函数是shal时其输出是输入的循环左移5位的值,否则直接输出输入数据,在Adder1与Adder2之间引入S1单元,当函数是shal是直接输出输入数据,否则根据hashcore输入的S进行循环左移再输出,设置一个数据选择器MUX6为Adder2从B和E中选择一个输入数据,当函数是md5时选B,当函数是shal时选E,同时,在该数据处理模块中设置MUX1、MUX2、MUX3、MUX4、MUX55个数据选择单元,依次对应所述A、B、C、D、E5个寄存器,并分别为对应的寄存器提供下一时钟上升沿所需的数据,所述每个数据选择单元在有写CVR信号时输出所要写的相应数据,在有写OMR信号时输出CVR的初始化数据,除此之外输出各自的上一时钟沿之后,根据CVR运算所得的数据,当最后的512位数据处理完毕,所述CVR寄存器中的值就是集成电路硬件实现的hash结果,通过所述接口模块中的处理器的控制接口输出;三、使数据适应多种处理器的存储映射模式,设置一个存储映射转换模块,根据所选hash函数以及OMR中ER寄存器的设置,对写入HU单元中指定寄存器的值和从CVR中读出的值进行big-endian与little-endian之间的相互转换。
2.根据权利要求1所述的一种硬件快速实现杂凑算法的方法,其特征在于为步骤二中所述A、B、C、D、E5个寄存器设置复位信号,当复位信号置低,CVR立即置0,否则就在时钟上升沿置为各自对应的所述MUX1、MUX2、MUX3、MUX4、MUX5数据选择单元的输出值。
全文摘要
本发明公开了一种硬件快速实现杂凑算法的方法,其硬件部署如下,一、使数据首先经过接口模块,该模块设置一个处理器控制接口和一个数据输入接口;二、使数据填充、数据的收集和处理在数据处理模块中完成,在该模块设置2个数据缓冲器,5个寄存器和对应的S1、S2单元,以及6个数据选择单元;三、使数据适应多种处理器的存储映射模式,设置一个存储映射转换模块。本发明在保证硬件高速处理输入数据流和输入数据流稳定性的同时尽可能地减少了逻辑门数,减少了集成电路芯片的面积。应用本发明的杂凑算法集成电路芯片可以作为一款协处理器芯片使用,也可以作为IP核提供给其它的更大的芯片或者FPGA开发板等使用。
文档编号H04L9/10GK1716848SQ20041002513
公开日2006年1月4日 申请日期2004年6月14日 优先权日2004年6月14日
发明者周玉洁, 乔国培, 陈志敏, 邓忠红 申请人:上海安创信息科技有限公司