一种祖冲之算法的实现系统及其方法
技术领域
本发明属于通讯系统加密技术领域,特别涉及一种祖冲之算法的实现系统及其方法。
背景技术
祖冲之算法是中国自主设计的流密码算法,于2011年9月被3GPP LTE采纳为国际加密标准,即第四代移动通信加密标准。祖冲之算法具有非常高的安全强度,能够抵抗目前常见的各种流密码攻击方法。其设计已经得到国内外著名密码学家的认可,他们对其安全强度给予了很高的评价。
随着祖冲之算法被确定为国际加密标准,国内外的研究人员对采用祖冲之算法的硬件电路实现方法展开了积极的探索,主要包括如何提高电路工作频率,如何减少硬件资源开销,以及如何降低系统功耗开销。在通信系统中,传输数据速率较高,导致其对数据处理的速度也提出了较高的要求。因此加密算法的硬件实现必须满足高处理速度要求,也就是提高电路工作频率。祖冲之算法的硬件实现中,大部分的资源开销被S盒的寻址逻辑占用,这是因为原算法中对S盒的寻址采用4个并行的寻址逻辑。因此优化S盒的寻址逻辑可以大幅减少系统的资源开销。对于S盒的实现结构,目前普遍采用的方法是查找表结构。虽然查找表的实现结构占用较少的资源开销,但在功耗开销方面并不是最优的选择。
发明内容
本发明所要解决的技术问题是提供一种祖冲之算法的实现系统及其方法,解决了现有技术中祖冲之算法的并行寻址逻辑消耗系统的资源开销大的技术问题。
为解决上述技术问题,本发明提供了一种祖冲之算法的实现系统,包括:系统控制模块、线性反馈移位寄存器模块、比特重组模块、F函数模块、第一寻址模块、第二寻址模块、第一S盒模块、第二S盒模块和加/解密模块;
其中,所述系统控制模块用于接收设定的初始密钥和初始向量,根据输入数据的速率,通过控制线性反馈移位寄存器的移位使能信号,调整密钥生成的速率,然后根据所述密钥生成的速率产生控制信号,所述控制信号控制所述密钥的生成过程;
所述线性反馈移位寄存器模块根据所述初始密钥和所述初始向量进行位拼接,得到线性反馈移位寄存器的初始值,然后根据移位使能信号,在每一个运算周期内,线性反馈移位寄存器的初始值分别在所述运算周期内进行移位,得到所述线性反馈移位寄存器值的更新最终值;
所述比特重组模块根据所述线性反馈移位寄存器的更新最终值,分别选取所述线性反馈移位寄存器的更新最终值的16比特,根据祖冲之算法,通过连线将选取的每两组所述16比特进行拼接,然后重组出4组32比特的数据;
所述F函数模块根据所述4组32比特的数据,进行F函数运算,产生第一查询S盒32比特地址和第二查询S盒32比特地址;
所述第一寻址模块根据所述第一查询S盒32比特地址,采用分时复用寻址逻辑的方法,将第一查询S盒32比特地址分4次,每次8比特,分成第一个4组8比特地址;
所述第一S盒模块将所述第一个4组8比特地址转换为第一个4组8比特置换数据,并存储和输出所述第一个4组8比特置换数据;
所述第一寻址模块将所述第一个4组8比特置换数据拼接成第一个32比特置换数据;
所述第二寻址模块根据所述第二查询S盒32比特地址,采用分时复用寻址逻辑的方法,将第二查询S盒32比特地址分4次,每次8比特,分成第二个4组8比特地址;
所述第二S盒模块将所述第二个4组8比特地址转换为第二个4组8比特置换数据,并存储和输出第二个4组8比特置换数据;
所述第二寻址模块将所述第二个4组8比特置换数据拼接成第二个32比特置换数据;
所述F函数模块根据所述第一个32比特置换数据和所述第二个32比特置换数据,进行F函数运算,得到32比特密钥;
所述加/解密模块根据所述32比特密钥,进行加密或者解密运算,然后输出加密数据或者解密数据。
进一步地,所述F函数模块包括加法运算单元、异或运算单元、循环移位运算单元、L运算单元和寄存器;
其中,所述加法运算单元根据寄存器的值和所述4组32比特的数据,进行加法运算,得到32比特的加法结果数据;
所述异或运算单元根据所述寄存器的值和所述4组32比特的数据,进行异或运算,得到32比特的异或结果数据;
所述循环移位运算单元根据所述32比特的加法结果数据和所述32比特的异或结果数据进行拆分与拼接,分别得到所述第一查询S盒32比特地址和所述第二查询S盒32比特地址;
所述L运算单元,分别将所述第一查询S盒32比特地址和所述第二查询S盒32比特地址进行循环移位,得到4组循环移位结果,将所述4组循环移位结果与所述第一查询S盒32比特地址和和所述第二查询S盒32比特地址分别异或运算,得到所述寄存器的值。
进一步地,所述第一S盒模块或所述第二S盒模块包括译码器,1个映射关系单元和1个编码器,所述译码器将所述第一个4组8比特地址中任一8比特地址进行译码得到28比特的独热码输入,所述映射关系单元将所述28比特的独热码输入经过映射,得到28比特的独热码输出,所述编码器将所述28比特的独热码输出进行编码,得到8比特的置换数据,其中,所述译码器与所述映射关系单元通过数据接口相连,所述映射关系单元与所述编码器通过数据接口相连。
进一步地,所述译码器包括7个运算单元,分别为第一运算单元、第二运算单元、第三运算单元、第四运算单元、第五运算单元、第六运算单元、第七运算单元,将所述8比特地址中2比特数据组成,所述第一运算单元和所述第二运算单元分别将所述8比特地址中2比特数据输入至所述第五运算单元,所述第五运算单元进行与门运算,得到16比特数据,所述第三运算单元和所述第四运算单元分别将所述8比特地址中2比特数据输入至所述第六运算单元,所述第六单元进行与门运算,得到16比特数据,所述第五运算单元将输出的所述16比特数据和所述第六运算单元输出的所述16比特数据输入给所述第七运算单元,所述第七运算单元进行与门运算,得到所述28比特。
一种祖冲之算法的实现方法,包括如下步骤:
步骤101:接收初始密钥和初始向量,根据输入数据的速率,通过控制线性反馈移位寄存器的移位使能信号,调整密钥生成的速率,然后根据所述密钥生成的速率产生控制信号,所述控制信号控制所述密钥的生成过程;
步骤102:根据所述初始密钥和所述初始向量进行位拼接,得到线性反馈移位寄存器的初始值,然后根据所述移位使能信号,所述线性反馈移位寄存器的初始值在运算周期内进行移位,得到多个所述线性反馈移位寄存器值的更新最终值;
步骤103:根据多个所述线性反馈移位寄存器的更新最终值,根据祖冲之算法,通过连线将选取的所述线性反馈移位寄存器的更新最终值的每两组16比特进行拼接,然后重组出4组32比特的数据;
步骤104:根据所述4组32比特的数据,进行F函数运算,产生第一查询S盒32比特地址和第二查询S盒32比特地址;
步骤105:根据所述第一查询S盒32比特地址,采用分时复用寻址逻辑的方法,将所述第一查询S盒32比特地址分4次,每次8比特,分成第一个4组8比特地址;
步骤106:将所述第一个4组8比特地址转换为第一个4组8比特置换数据,并存储和输出所述第一个4组8比特置换数据;
步骤107:将所述第一个4组8比特置换数据拼接成第一个32比特置换数据;
步骤108:根据所述第二查询S盒32比特地址,采用分时复用寻址逻辑的方法,将所述第二查询S盒32比特地址分4次,每次8比特,分成第二个4组8比特地址;
步骤109:将所述第二个4组8比特地址转换为第二个4组8比特置换数据,并存储和输出所述第二个4组8比特置换数据;
步骤110:将所述第二4组8比特置换数据拼接成第二个32比特置换数据;
步骤111:根据所述第一个32比特置换数据和所述第二个32比特置换数据,进行F函数运算,得到32比特密钥;
步骤112:分别使用所述32比特密钥对所述输入数据进行加密或者解密运算,然后输出加密数据或者解密数据。
进一步地,在所述步骤105中,所述分时复用的方法为:分别复用所述第一个4组8比特地址中的任一一个以上,进行并行的寻址逻辑,在所述步骤108中,所述分时复用的方法为:分别复用所述第二个4组8比特地址中的任一一个以上,进行并行的寻址逻辑。
进一步地,在所述步骤112中,将1比特的所述输入数据与1比特的所述32比特密钥进行异或,得到1比特的所述加密数据或者所述解密数据,所述加密数据或者所述解密数据比所述输入数据延后1个时钟周期。
本发明提供的一种祖冲之算法的实现系统及其方法,通过优化算祖冲之算法的并行寻址逻辑,能够大幅减少系统的资源开销。同时,通过优化S盒的基于查找表的实现结构,能够降低系统的功耗开销。
附图说明
图1为本发明实施例提供的一种祖冲之算法的实现系统结构示意图;
图2为本发明实施例提供的一种F函数模块结构示意图;
图3为现有技术提供的一种第一寻址模块结构示意图;
图4为本发明实施例提供的一种第一寻址模块结构示意图;
图5为本发明实施例提供的一种第一寻址模块资源优化结构示意图;
图6为本发明实施例提供的一种第一S盒模块结构示意图;
图7为本发明实施例提供的一种第一S盒模块中的译码器结构图;
图8为图7的译码器中的第一运算单元结构图;
图9为图7的译码器中的第五运算单元结构图。
具体实施方式
参见图1,本发明实施例提供的一种祖冲之算法的实现系统,包括:系统控制模块、线性反馈移位寄存器模块、比特重组模块、F函数模块、第一寻址模块、第二寻址模块、第一S盒模块、第二S盒模块和加/解密模块;其中,系统控制模块用于接收控制信息(设定的初始密钥和初始向量),根据输入数据的速率,通过控制线性反馈移位寄存器的移位使能信号,调整密钥生成的速率,然后根据密钥生成的速率产生控制信号,控制信号控制密钥的生成过程,线性反馈移位寄存器模块根据初始密钥和初始向量进行位拼接,得到线性反馈移位寄存器的初始值,然后根据移位使能信号,在每一个运算周期内,16个线性反馈移位寄存器的初始值分别在运算周期内进行移位,移位方向为从标号小的线性反馈移位寄存器到标号大的线性反馈移位寄存器,得到16个线性反馈移位寄存器值的更新最终值,比特重组模块根据16个线性反馈移位寄存器的更新最终值,分别选取8个线性反馈移位寄存器的更新最终值的16比特,根据祖冲之算法,通过连线将选取的每两组16比特进行拼接,然后重组出4组32比特的数据,F函数模块根据4组32比特的数据,进行F函数运算,产生第一查询S盒32比特地址和第二查询S盒32比特地址,第一寻址模块根据第一查询S盒32比特地址,采用分时复用寻址逻辑的方法,将第一查询S盒32比特地址分4次,每次8比特,分成第一个4组8比特地址,第一S盒模块将第一个4组8比特地址转换为第一个4组8比特置换数据,并存储和输出第一个4组8比特置换数据,第一寻址模块将第一个4组8比特置换数据拼接成第一个32比特置换数据,第二寻址模块根据第二查询S盒32比特地址,采用分时复用寻址逻辑的方法,将第二查询S盒32比特地址分4次,每次8比特,分成第二个4组8比特地址,第二S盒模块将第二个4组8比特地址转换为第二个4组8比特置换数据,并存储和输出第二个4组8比特置换数据,第二寻址模块将第二个4组8比特置换数据拼接成第二个32比特置换数据,F函数模块根据第一个32比特数据和第二个32比特数据,进行F函数运算,得到32比特密钥,加/解密模块根据32比特密钥,进行加密或者解密运算,然后输出加密数据或者解密数据,其中,系统控制模块分别与线性反馈移位寄存器模块和加/解密模块通过数据接口相连,线性反馈移位寄存器模块与比特重组模块通过数据接口相连,比特重组模块与F函数模块通过数据接口相连,F函数模块的一端分别与第一寻址模块和第二寻址模块通过数据接口相连,F函数模块的另一端与加/解密模块通过数据接口相连,第一寻址模块与第一S盒模块通过数据接口相连,第二寻址模块与第二S盒模块通过数据接口相连。
如图2所示,F函数模块包括2个32位的加法运算单元、3个32位的异或运算单元、1个循环移位运算单元、2个L运算单位,在本实施例中,分别为L1运算单元和L2运算单元,还包括2个32位的寄存器,分别为第一寄存器和第二寄存器;
首先,分别设定第一寄存器和第二寄存器的值,均为0,加法运算单元根据第一寄存器的值和4组32比特的数据,进行加法运算,得到32比特的加法结果数据;
异或运算单元根据第二寄存器的值和4组32比特的数据,进行异或运算,得到32比特的异或结果数据;
循环移位运算单元根据32比特的加法结果数据和32比特的异或结果数据进行拆分与拼接,分别得到第一查询S盒32比特地址和第二查询S盒32比特地址;
L1运算单元,分别将第一查询S盒32比特地址进行2、10、18和24比特的向左循环移位,得到4组循环移位结果,将4组循环移位结果与所述第一查询S盒32比特地址进行异或运算,得到第一寄存器的值;
L2运算单元,分别将第二查询S盒32比特地址进行8、14、22和30比特的向左循环移位,得到4组循环移位结果,将4组循环移位结果与第二查询S盒32比特地址进行异或运算,得到第二寄存器的值,依次循环。
具体为:从比特重组模块得到的4组32比特数据,按照来自线性反馈移位寄存器的标号从低到高的顺序,记为X0,X1,X2,X3,线性反馈移位寄存器R1的初始值为零,在每一个运算周期内,线性反馈移位寄存器R1的初始值与32比特数据X0进行32位的异或元算得到32比特的数据T,线性反馈移位寄存器R1与32比特数据X1进行32位的加法运算得到32比特的数据W1,R2与T进行32位的加法运算得到32比特的数据W,W与X 3进行32位的异或运算得到32比特的密钥Z,R2与X2进行32位的异或运算得到32比特的数据W2,W1与W2进入循环移位单元,循环移位单元将W1的低16位与W2的高16位拼接成32比特的U1,将W2的低16位和W1的高16位拼接成32比特的U2,U1输入给寻址模块1,得到CS1,输入给L1运算单元,L1运算单元根据祖冲之算法的要求,对CS1进行循环移位并将CS1原来的值与四个移位后的值进行异或运算得到32比特的数据K1,K1是R1在下一运算周期的更新值,U2输入给寻址模块2,得到CS2,输入给L2运算单元,L2运算单元根据祖冲之算法的要求,对CS2进行循环移位并将CS1原来的值与四个移位后的值进行异或运算得到32比特的数据K2,K2是R2在下一运算周期的更新值,最终得到线性反馈移位寄存器的更新最终值。
其中,第一S盒模块或第二S盒模块采用基于独热码的译码-编码结构,均包括1个译码器,1个映射关系单元和1个编码器,如图6所示。译码器将8比特地址进行译码得到28比特的独热码输入,映射关系单元将28比特的独热码输入经过映射,得到28比特的独热码输出,编码器将28比特的独热码输出进行编码,得到8比特的置换数据,其中,译码器与映射关系单元通过数据接口相连,映射关系单元与编码器通过数据接口相连。
参见图7,译码器包括7个运算单元,分别为第一运算单元、第二运算单元、第三运算单元、第四运算单元、第五运算单元、第六运算单元、第七运算单元;将4组高比特的地址经过方向器,低比特的地址不变,第一运算单元和第二运算单元分别将8比特地址中2比特数据输入至第五运算单元,第五运算单元进行与门运算,得到16比特数据,第三运算单元和第四运算单元分别将8比特地址中2比特数据输入至第六运算单元,第六单元进行与门运算,得到16比特数据,第五运算单元将输出的16比特数据和第六运算单元输出的16比特数据输入给第七运算单元,第七运算单元进行与门运算,得到28比特数据。
其中,第一运算单元、第二运算单元、第三运算单元和第四运算单元实现结构完全相同,如图8所示,分别包括4个2输入与门,第五运算单元和第六运算单元实现结构完全相同,如图9所示,分别包括16个2输入与门,第七运算单元包括256个2输入与门,以第五运算单元为例,实现方法为来自同一运算单元的输入数据不能输入同一个2输入与门,来自第五运算单元的16个输入,从高比特到低比特(从第16比特到第1比特),第16比特输入给第1,2,3,……,16个与门,第15比特输入给第17,18,19,……,32个与门,依次类推,直至第1比特输入给第241,242,243,……,256个与门,来自第六运算单元的16个输入,从高比特到低比特(从第16比特到第1比特),第16比特输入给第1,17,33,……,240(相隔16的16个数)个与门,第15比特输入给第2,18,34,……,241个与门,依次类推,直至第1比特输入给第16,33,50,……,256个与门。
一种祖冲之算法的实现方法,包括如下步骤:
步骤101:输入单片机(MCU)的控制信息,包括32比特的COUNT、5比特的BEARER、1比特的DIRECTION和128比特的INITIAL KEY,在MCU中计算得到初始密钥和初始向量,通过8比特数据线和1比特使能信号线用于接收初始密钥和初始向量,根据输入数据的速率,通过1比特控制信号线线的线性反馈移位寄存器的移位使能信号,调整密钥生成的速率,其中,调整密钥生成的速率的方法为:将密钥生成的速率除以32后大于等于输入数据的速率。然后根据密钥生成的速率产生控制信号,控制信号控制所述密钥的生成过程,结果为按要求产生1比特的密钥输出;
步骤102:根据初始密钥和初始向量进行位拼接,得到线性反馈移位寄存器的初始值,然后根据移位使能信号,线性反馈移位寄存器的初始值在运算周期内进行移位,得到多个线性反馈移位寄存器值的更新最终值,其中,循环移位的方法为:当线性反馈移位寄存器的初始值在移位使能信号为高时,完成一次移位,得到第一个线性反馈移位寄存器值的更新值,然后当第一个线性反馈移位寄存器值的更新值在移位使能信号为高时,再完成一次移位,再得到第二个线性反馈移位寄存器值的更新值,依次循环,得到最后一个线性反馈移位寄存器值的更新值为线性反馈移位寄存器值的更新最终值,其中,移位步长均为一个线性反馈移位寄存器;
步骤103:根据16个线性反馈移位寄存器的更新最终值,分别选取8个所线性反馈移位寄存器的更新最终值的16比特,根据祖冲之算法,通过连线将选取的每两组16比特进行拼接,然后重组出4组32比特的数据;
步骤104:根据4组32比特的数据,进行F函数运算,产生第一查询S盒32比特地址和第二查询S盒32比特地址;
步骤105:根据第一查询S盒32比特地址,采用分时复用寻址逻辑的方法,将第一查询S盒32比特地址分4次,每次8比特,分成第一个4组8比特地址,具体为:分别复用第一个4组8比特地址中的2个、3个或4个,进行并行的寻址逻辑,参见图3,第一寻址模块优化前的结构,采用了原祖冲之算法中的对于第一S盒模块的并行的寻址逻辑,其中,图中上方并置的4个S1方块代表第一S盒模块,addr0、addr1、addr2和addr3为分别对上述4个进行寻址的寻址逻辑,由输入此步骤的32比特地址拆分得到,它们在同一个时钟周期对4个第一S盒模块进行寻址,进而得到对4个第一S盒模块的寻址结果R1[0]、R1[1]、R1[2]、R1[3],导致必须使用4个第一S盒模块,占用了系统大量的资源,不利于硬件实现;参见图4,寻址模块1优化后的结构,将原祖冲之算法中对第一S盒模块的并行的寻址逻辑addr0、addr1、addr2和addr3分时复用,分别复用4个对第一S盒模块的并行的寻址逻辑,它们在4个时钟周期对同一个第一S盒模块进行寻址,在第1个时钟周期,使用addr3对第一S盒模块进行寻址,得到寻址结果R1[3],在第2个时钟周期,使用addr2对第一S盒模块进行寻址,得到寻址结果R1[2],在第3个时钟周期,使用addr1对第一S盒模块进行寻址,得到寻址结果R1[1],在第4个时钟周期,使用addr0对第一S盒模块进行寻址,得到寻址结果R1[0],最终得到与上述优化前相同的寻址结果R1[0]、R1[1]、R1[2]、R1[3],本发明提出的优化后的这种第一寻址模块的实现方法对于第一S盒模块的寻址只使用1个第一S盒模块,与优化前的第一寻址模块相比,大大降低了系统的资源开销。
图4中分时复用了4个寻址逻辑,也可以复用3个或者2个寻址逻辑,这是由系统处理速度要求决定的。第一寻址模块大幅减少了系统的资源开销。
当复用2个寻址逻辑代表分2个时钟周期,第1个时钟周期使用addr[3]、addr[2]和addr[1]对3个第一S盒模块进行寻址,第2个时钟周期使用addr[0]对第1个周期中的1个第一S盒模块进行寻址,总共需要3个第一S盒模块;
当复用3个寻址逻辑代表分3个时钟周期,第1个时钟周期使用addr[3]和addr[2]对2个第一S盒模块进行寻址,第2个时钟周期使用addr[1]对第1个周期中的1个第一S盒模块进行寻址,第3个时钟周期使用addr[0]对第1个周期中的1个第一S盒模块进行寻址,总共需要2个第一S盒模块;
当复用4个寻址逻辑即此步骤中所述方法。系统资源开销可以用逻辑单元总数,组合逻辑数,寄存器数衡量。本发明的方法具有明显的优势,参见图5,与未进行资源优化方法相比,在逻辑单元总数方面,降低系统资源开销45%左右;
步骤106:将第一个4组8比特地址转换为第一个4组8比特置换数据,并存储和输出第一个4组8比特置换数据,其中,转换的方法如下:
参见图6,输入8位地址,通过译码逻辑将8位地址变换成28(256)位独热码输入,根据祖冲之算法的第一S盒模块1映射关系,得到28位独热码输出,再通过编码逻辑将28位独热码输出变换成M位置换数据输出,其中,28位独热码输入到28位独热码输出的映射关系是一一对应的,在本发明实施例中,输入8比特的地址数据,经过8比特到28比特的译码器,得到28比特的独热码,然后根据第一S盒模块输入地址数据与输出置换数据的映射关系,将28比特的独热码输入数据映射为28比特的独热码输出数据。由于28比特到28比特的映射是一一对应的,因此独热码输入到独热码输出的映射在硬件电路中通过连线即可实现,几乎没有功耗开销。最后,将28比特的独热码输出数据经过28比特到8比特的编码器,得到8比特的置换数据输出。由于基于独热码的译码-编码结构,降低了系统的功耗开销;
步骤107:将第一个4组8比特置换数据拼接成第一个32比特置换数据;
步骤108:根据第二查询S盒32比特地址,采用分时复用寻址逻辑的方法,将第二查询S盒32比特地址分4次,每次8比特,分成第二个4组8比特地址,具体分时复用的方法同步骤105;
步骤109:将第二个4组8比特地址转换为第二个4组8比特置换数据,并存储和输出第二个4组8比特置换数据具体转换方法同步骤106;
步骤110:将第二4组8比特置换数据拼接成第二个32比特置换数据;
步骤111:根据第一个32比特置换数据和第二个32比特置换数据,进行F函数运算,得到32比特密钥;
步骤111:分别使用32比特密钥对输入数据进行加密或者解密运算,然后输出加密数据或者解密数据,其中,将1比特的输入数据与1比特的32比特密钥进行异或,得到1比特的加密数据或者解密数据,加密数据或者解密数据比输入数据延后1个时钟周期。根据输入使能产生输出使能,输出使能比输入使能延迟一个时钟周期。
最后所应说明的是,以上具体实施方式仅用以说明本发明的技术方案而非限制,尽管参照实例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。