发明内容
(一)要解决的技术问题
有鉴于此,本发明的主要目的在于提供一种简易高效的祖冲之算法的硬件实现装置及方法。
(二)技术方案
为达到上述目的,本发明提供了一种祖冲之算法的硬件实现装置,该装置包括控制逻辑单元、线性反馈移位寄存器(LFSR)单元、比特重组单元和非线性函数F(X0,X1,X2)单元,其中:
控制逻辑单元,用于协调控制祖冲之算法硬件装置的初始密钥加载、LFSR寄存器初始化以及密钥的产生;
LFSR单元,采用素域GF(231-1)的m序列,每个时钟周期产生一次寄存器移位;
比特重组单元,采用相应寄存器值取半合并技术,实现LFSR寄存器值单元到非线性函数F(X0,X1,X2)和密钥输出Z的数据转换;
非线性函数F(X0,X1,X2)单元,通过将输入的X0,X1,X2经过分组密码设计,结合S盒以及高扩散性的线性变换L,实现非线性函数变换。
上述方案中,所述控制逻辑单元在祖冲之算法的一开始,控制一初始密钥加载单元为LFSR单元中的寄存器加载初始密钥,然后控制LFSR单元中的寄存器初始化一次,直到LFSR单元完成32次的寄存器初始化操作,接下来执行祖冲之算法的工作模式一次,第一次工作模式的密钥输出无效,然后循环执行ZUC工作模式并不断输出有效密钥,如果输出的密钥长度达到设定的密钥长度,则祖冲之算法结束。
上述方案中,所述初始密钥加载单元用于根据祖冲之算法硬件装置的输入产生初始密钥并加载入LFSR单元中的寄存器。
上述方案中,所述初始密钥加载单元将输入的COUNT、BEARER和DIRECTION组合成16个初始向量Initial Vectori(i=0,1,2,3......15),再由初始向量和输入的16个Initial Keyi(i=0,1,2,3......15)以及固定的16个常向量Di(i=0,1,2,3......15)组合成祖冲之算法的初始密钥,也即LFSR的16个寄存器的初始状态值Si(i=0,1,2,3......15),然后将LFSR单元的16个寄存器的初始状态值Si(i=0,1,2,3......15)输出给LFSR单元的16个31位的寄存器。
上述方案中,所述LFSR单元是由16个31位的寄存器组成,分别为si(0≤i≤15)。
上述方案中,所述LFSR单元具有两种操作模式,分别为LFSR寄存器初始化模式和LFSR工作模式,LFSR工作模式即为ZUC工作模式。
上述方案中,在LFSR单元的16个寄存器获得初始密钥后,LFSR单元即进入寄存器初始化模式,经过32次的寄存器移位初始化后,LFSR单元即进入工作模式;在进入工作模式后的第一次的密钥输出丢弃,以后循环执行LFSR工作模式,每次的密钥输出都是有效密钥输出,直到达到设定的密钥长度为止。
上述方案中,所述比特重组单元用于将LFSR的相应寄存器值取半合并,实现LFSR寄存器值单元到非线性函数F(X0,X1,X2)和密钥输出Z的数据转换,比特重组的实现过程如下:
(1)X0=s15H||s14L;
(2)X1=s11L||s9H;
(3)X2=s7L||s5H;
(4)X3=s2L||s0H.
上述操作中,siH为si的高16位,siL为si的低16位,siH||siL表示siH和siL拼接在一起,且siH在高位。
上述方案中,所述比特重组单元的三个32位的输出X0、X1和X2是非线性函数F(X0,X1,X2)的输入,32位的W为F(X0,X1,X2)的输出,F(X0,X1,X2)中的R1和R2为32位的寄存器。
上述方案中,所述非线性函数F(X0,X1,X2)单元通过将输入的X0,X1 和X2经过分组密码设计,结合S盒以及高扩散性的线性变换L,实现非线性函数变换。
上述方案中,所述S盒是一个32×32的S盒,等效为4个8×8的S盒,即S=(S0,S1,S2,S3);因为S0=S2,S1=S3,所以实现时仅需要S0盒和S1盒;而S0和S1都是256×8的查找表,表中的每个值都是8位,且表中的每一个值都是确定的;所以,硬件实现时,需要两个256×8bit的ROM存储S0和S1的值。
上述方案中,为使S盒的硬件实现芯片面积和功耗最小化,采用一个512×8bit的单端口ROM来存储S0和S1的值;通过对ROM的读逻辑控制和寄存器寄存的方法分四步读出一个S盒的32位的输出,以完成S盒的功能。
上述方案中,所述非线性函数F(X0,X1,X2)单元的操作如下:
(7)W1=R1田X1;
(9)R1=S(L1(W1L‖W2H))
(10)R2=S(L2(W2L‖W1H))
上述操作中,田表示模232的加法,S表示S盒,L1和L2为两个线性变换函数。
上述方案中,所述L1和L2是两个线性变换函数,具体操作如下所示:
其中,<<<表示循环左移。
为达到上述目的,本发明还提供了一种祖冲之算法的硬件实现方法,该方法包括:
在祖冲之算法开始时,控制逻辑单元先根据相应输入控制初始密钥加载单元向线性反馈移位寄存器(LFSR)单元加载初始密钥;
初始密钥加载结束后,线性反馈移位寄存器(LFSR)单元开始初始化操作一次,然后线性反馈移位寄存器(LFSR)单元重复初始化操作32次;此期间的密钥输出Z为无效输出;
LFSR寄存器初始化操作循环执行32次以后,进入LFSR工作模式,即为ZUC工作模式;ZUC工作模式执行第一次的密钥输出Z为无效输出,不用做加解密;此后循环执行ZUC工作模式,每执行一ZUC工作模式,即可得到一个32位的密钥输出Z,即可用作加解密;
当输出密钥Z的长度达到预先设定的密钥长度时,祖冲之算法结束。
(三)有益效果
从上述技术方案可以看出,本发明具有以下有益效果:
1、本发明采用了S盒硬件实现面积和功耗最小化的优化策略,使得祖冲之算法实现的芯片面积和功耗最小化。
2、本发明采用了简单高效的硬件设计策略实现了祖冲之算法,保证了祖冲之算法输出密钥的高吞吐率。
3、本发明的祖冲之算法硬件实现具有芯片面积小和芯片功耗低的优点,非常适用于对芯片面积和功耗有较高要求的移动设备。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
如图1所示,图1是本发明提供的祖冲之算法的硬件实现装置的结构示意图,该装置包括控制逻辑单元、线性反馈移位寄存器(LFSR)单元、比特重组单元和非线性函数F(X0,X1,X2)单元,其中:控制逻辑单元,用于协调控制祖冲之算法硬件装置的初始密钥加载、LFSR寄存器初始化以及密钥的产生;LFSR单元,采用素域GF(231-1)的m序列,每个时钟周期产生一次寄存器移位;比特重组单元,采用相应寄存器值取半合并技术,
实现LFSR寄存器值单元到非线性函数F(X0,X1,X2)和密钥输出Z的数据转换;非线性函数F(X0,X1,X2)单元,通过将输入的X0,X1,X2经过分组密码设计,结合S盒以及高扩散性的线性变换L,实现非线性函数变换。
控制逻辑单元在祖冲之算法的一开始,控制一初始密钥加载单元为LFSR单元中的寄存器加载初始密钥,然后控制LFSR单元中的寄存器初始化一次,直到LFSR单元完成32次的寄存器初始化操作,接下来执行祖冲之算法的工作模式一次,第一次工作模式的密钥输出无效,然后循环执行ZUC工作模式并不断输出有效密钥,如果输出的密钥长度达到设定的密钥长度,则祖冲之算法结束。
初始密钥加载单元如图2所示,用于根据祖冲之算法硬件装置的输入产生初始密钥并加载入LFSR单元中的寄存器。初始密钥加载单元将输入的COUNT、BEARER和DIRECTION组合成16个初始向量Initial Vectori(i=0,1,2,3......15),再由初始向量和输入的16个Initial Keyi(i=0,1,2,3......15)以及固定的16个常向量Di(i=0,1,2,3......15)组合成祖冲之算法的初始密钥,也即LFSR的16个寄存器的初始状态值Si(i=0,1,2,3......15),然后将LFSR单元的16个寄存器的初始状态值Si(i=0,1,2,3......15)输出给LFSR单元的16个31位的寄存器。
LFSR单元是由16个31位的寄存器组成,分别为si(0≤i≤15)。LFSR单元具有两种操作模式,分别为LFSR寄存器初始化模式和LFSR工作模式,LFSR工作模式即为ZUC工作模式。在LFSR单元的16个寄存器获得初始密钥后,LFSR单元即进入寄存器初始化模式,经过32次的寄存器移位初始化后,LFSR单元即进入工作模式;在进入工作模式后的第一次的密钥输出丢弃,以后循环执行LFSR工作模式,每次的密钥输出都是有效密钥输出,直到达到设定的密钥长度为止。
在LFSR寄存器初始化和工作之前,需要对LFSR的16个寄存器加载初始密钥。如图2所示,初始密钥加载过程中,由输入的32位的COUNT,5位的BEARER和1位的DIRECTION可以得到128位的INITIALVECTOR(以下简称VECTOR),VECTOR由16个8位的VECTORi组成。VECTOR生成过程如下所示:
COUNT=COUNT0||COUNT1||COUNT2||COUNT3
VECTOR=VECTOR0||VECTOR1||...||VECTOR15;
VECTOR0=COUNT0;
VECTOR1=COUNT1;
VECTOR2=COUNT2;
VECTOR3=COUNT3;
VECTOR4=BEARER||DIRECTION||2′b00;
VECTOR5=8′b0;
VECTOR6=8′b0; VECTOR11=VECTOR3;
VECTOR7=8′b0; VECTOR12=VECTOR4;
VECTOR8=VECTOR0; VECTOR13=VECTOR5;
VECTOR9=VECTOR1; VECTOR14=VECTOR6;
VECTOR10=VECTOR2; VECTOR15=VECTOR7.
‖表示拼接运算,左右两个数按位拼接在一起成为一个新数。
如图2所示,VECTOR结合输入的128位的INITIAL KEY(以下简称KEY)以及240位的固定常值向量D,可以产生LFSR的16个寄存器的初始值S0~S15。KEY由16个8位的KEYi组成,D由16个15位的Di组成。具体产生过程如下所示:
KEY=KEY0||KEY1||...||KEY15;
VECTOR=VECTOR0‖VECTOR1||...||VECTOR15;
D=D0||D1||...‖D15;
si=KEYi|Di‖VECTORi,0≤i≤15.
LFSR的16个寄存器S0~S15得到初始值以后,ZUC开始进入LFSR寄存器初始化过程。如图1所示,设置非线性函数F(X0,X1,X2)中32位的R1和R2为全零。经过比特重组,可以得到X0,X1,X2,X3的初始值,进而可以得到非线性函数F(X0,X1,X2)的输出W以及 表示异或操作。此u值用来进行第一次LFSR寄存器初始化模式下的操作。如图1所示,更新X0,X1,X2,X3、R1、R2、W和u后,进行下一次LFSR寄存器初始化。如此循环执行,重复LFSR寄存器初始化操作共32次。在初始化阶段,ZUC算法计算得到的不是有效密钥,不作输出密钥使用。
如图1所示,LFSR寄存器初始化过程中,LFSR一开始收到一个31位的输入u,即非线性函数F(X0,X1,X2)的32位的输出 W与X3的异或结果向右移一位。它的操作过程如下:
(1)v=[215s15+217s13+221s10+220s4+(1+28)s0]mod(231-1);
(2)If v=0,then set v=231-1;
(3)
(4)If s16=0,then set s16=231-1;
(5)
上述操作(1)为模(231-1)的加法,在硬件实现时将加和结果的第32位与低31位相加即可实现,硬件实现简单。(1)式中还包括2的整数次幂加权,为保证硬件与算法的等效性,可以实现如下:
2m si mod(231-1)=(si<<m|si>>(31-m))mod(231-1)
ZUC算法结束初始化模式后,即进入工作模式,如图1所示。工作模式中,LFSR没有输入,实现16个寄存器的移位操作如下:
(1)s16=[215s15+217s13+221s10+220s4+(1+28)s0]mod(231-1);
(2)If s16=0,then set s16=231-1;
(3)
ZUC算法使用LFSR初始化后的寄存器的值进行LFSR工作模式下的操作一次,第一次LFSR工作模式得到的密钥输出Z为无效输出。此后重复工作模式操作,每执行一次工作模式操作并更新相关寄存器的值后,就能得到一个32位的有效密钥Z,即可开始加解密工作。
比特重组单元用于将LFSR的相应寄存器值取半合并,实现LFSR寄存器值单元到非线性函数F(X0,X1,X2)和密钥输出Z的数据转换,比特重组的实现过程如下:
(1)X0=s15H||s14L;
(2)X1=s11L‖s9H;
(3)X2=s7L‖s5H;
(4)X3=s2L||s0H.
上述操作中,siH为si的高16位,siL为si的低16位,siH||siL表示siH和siL拼接在一起,且siH在高位。
如图1所示,比特重组单元的三个32位的输出X0、X1和X2是非线性函数F(X0,X1,X2)的输入,32位的W为F(X0,X1,X2)的输出,F(X0,X1,X2)中的R1和R2为32位的寄存器。
非线性函数F(X0,X1,X2)单元通过将输入的X0,X1和X2经过分组密码设计,结合S盒以及高扩散性的线性变换L,实现非线性函数变换。
S盒是一个32×32的S盒,等效为4个8×8的S盒,即S=(S0,S1,S2,S3);因为S0=S2,S1=S3,所以实现时仅需要S0盒和S1盒;而S0和S1都是256×8的查找表,表中的每个值都是8位,且表中的每一个值都是确定的;所以, 硬件实现时,需要两个256×8bit的ROM存储S0和S1的值。
为使S盒的硬件实现芯片面积和功耗最小化,采用一个512×8bit的单端口ROM来存储S0和S1的值;通过对ROM的读逻辑控制和寄存器寄存的方法分四步读出一个S盒的32位的输出,以完成S盒的功能。
非线性函数F(X0,X1,X2)单元的操作如下:
(12)W1=R1田X1;
(14)R1=S(L1(W1L||W2H))
(15)R2=S(L2(W2L||W1H))
上述操作中,田表示模232的加法,S表示S盒,L1和L2为两个线性变换函数。
ZUC算法的S盒是一个32×32的S盒,可以等效为4个8×8的S盒,即S=(S0,S1,S2,S3)。又因为S0=S2,S1=S3,所以实现时仅需要S0盒和S1盒。而S0和S1都是256×8的查找表,表中的每个值都是8位,且表中的每一个值都是确定的。所以,硬件实现时,需要两个256×8bit的ROM存储S0和S1的值。
ZUC算法的S盒的输入为32位的X,输出为32位的Y,其中X=x1||x2||x3||x4,Y=y1||y2||y3||y4,xi和yi都是8位。则y1=S0(x1),y2=S1(x2),y3=S0(x3),y4=S1(x4)。
硬件实现时,用一个512×8bit的单端口ROM来存储S0和S1的值,以使S盒的硬件实现芯片面积和功耗最小化。通过对ROM的读逻辑控制和寄存器寄存的方法分四步读出一个S盒的32位的输出,以完成S盒的功能。
L1和L2为两个线性变换函数,具体操作如下所示:
其中,<<<表示循环左移。
图1所示的控制逻辑单元的功能结构图如图3所示,该方法包括:在祖冲之算法开始时,控制逻辑单元先根据相应输入控制初始密钥加载单元 向线性反馈移位寄存器(LFSR)单元加载初始密钥;初始密钥加载结束后,线性反馈移位寄存器(LFSR)单元开始初始化操作一次,然后线性反馈移位寄存器(LFSR)单元重复初始化操作32次;此期间的密钥输出Z为无效输出;LFSR寄存器初始化操作循环执行32次以后,进入LFSR工作模式,即为ZUC工作模式;ZUC工作模式执行第一次的密钥输出Z为无效输出,不用做加解密;此后循环执行ZUC工作模式,每执行一ZUC工作模式,即可得到一个32位的密钥输出Z,即可用作加解密;当输出密钥Z的长度达到预先设定的密钥长度时,祖冲之算法结束。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。