文档库 最新最全的文档下载
当前位置:文档库 › ZUC算法原理及实现过程

ZUC算法原理及实现过程

ZUC算法原理及实现过程
ZUC算法原理及实现过程

ZUC算法原理及实现过程

1.1 算法设计背景

ZUC算法,即祖冲之算法,是3GPP机密性算法EEA3和完整性算法EIA3的核心,为中国自主设计的流密码算法。2009年5月ZUC算法获得3GPP安全算法组SA立项,正式申请参加3GPPLT第三套机密性和完整性算法标准的竞选工作。历时两年多的时间,ZUC算法经过评估,于2011年9月正式被3GPPSA全会通过,成为3GPPLTE第三套加密标准核心算法。ZUC算法是中国第一个成为国际密码标准的密码算法。

1.2 算法原理

ZUC是一个面向字的流密码。它采用128位的初始密钥作为输入和一个128位的初始向量(IV),并输出关于字的密钥流(从而每32位被称为一个密钥字)。密钥流可用于对信息进行加密/解密

ZUC的执行分为两个阶段:初始化阶段和工作阶段。在第一阶段,密钥和初始向量进行初始化,即不产生输出。第二个阶段是工作阶段,在这个阶段,每一个时钟脉冲产生一个32比特的密钥输出。

(1)运算符说明

mod

?

a|_b

3H

3L

a 「:::::n k 整数模

整数比特异或

字符串a和b的连接

a二进制表示的最左16

位值

a二进制表示的最右16位值

a向左k比特的循环移位

a向右1比特的移位

l“a n —:匕山2,11|,5 a i值分配到对应b的值

(2)算法结构

ZUC有三个逻辑层,见下图。顶层为一个线性反馈移位寄存器(LFSR )的16个赛段,中间层是比特重组(BR),最下层为一个非线性函数F 。

图1 ZUC的整体结构图

(3)线性移位反馈寄存器(LFSR )

LFSR具有16个31比特的单元S0,S I,|||,S!5,每个单元S 0_i_15取值均在下面的集合中:

「123,川231-1?

LFSR有两种模式的操作,即初始化模式和工作模式。在初始化模式中,LFSR接收一个31比特的输入u,u是删除非线性函数F的32位输出W最右边的位得到的。也就是说,可将初始化模式工作原理表示为:LFSRWithInitialisationMode ( u)

{

〔、V=215S5 +217命+221S W +220S4 +(1 +28)s°mod(231—1 );

31

2、s6=(V+u )mod(2 -1 );

3、如果S!6 =0,则设$6 =231-1 ;

4(S,S2, |||,S6)T(S0,S1」II,S5 )

}

在工作模式中,LFSR不接收任何输入,它的工作原理表示为:LFSRWithWorkMode() {

仁S6 =215$5 +217S3 +221S W +220S4 +(1 + 28Js°mod(231—1 );

2、如果% =0,则设36 =231 -1 ;

3、(s,S2,川,$6)T(S0,S1」II, S5 );

}

(4)比特重组

ZUC算法的中间层是比特重组,从LFSR的单元中提取128比特的输出并形成4个32比特的字,前三个字将用于最底层的非线性F函数中,而最后一个字会在密钥流的产生中用到。

令S01S21S5,S71S91S111S14,S15是LFSR中的8个单元,则形成4个32比特字

X0.X1.X2.X3的比特重组过程如下:

Bitreorga nizatio n() {

1、X0 = S^H L S14L ;

2、

3、X2 二S7L L S5H ;

4、X3 二勺|_ L S oH

}

(5)非线性函数F

非线性函数F有2个32位的存储单元,即R和R2。令到F的输入为X。, X1和X2,即为比特重组的前三个输出,然后函数F输出一个32位字W。F

的详细过程如下:

F X o,X i,X2

{

32

1、W = X。二R R>mod2 ;

2、W = R X1 mod 232;

3、W2=R2二X2;

4、R 二S L1 W L L W2H;

5、R, =S L2 W ZL LW H

}

(6) S 盒

F函数中包含的S盒S是由4个并列的8$ 的S盒组成的

(S=(S o,S,S,S3 )),其中S°=S2、S=S3。 S o、S的定义由下面两张表分别

给出:

令X为S o (或SJ的8比特输入。将x表示成十六进制x = hUl,则在查表时h 和丨分别表示S盒的第h行和第丨列。

(7)线性变换函数

线性变换L i和L2均为32比特字输入到32比特字的输出,具体可定义为:L i X i = X 二X :32 2 二X :32 10 二X :32 18 二X :32 24

1_2 X 二X 二X :32 8 二X :32 14 二X :32 22 二X :32 30

(8)密钥加载

密钥的加载过程将把初始密钥和初始向量扩展为16个31比特的LFSR初

始状态。设k为128比特的初始密钥,iv为128比特的初始向量,则有:

k = k o Lk i」k2_…」昆

iv 二iV oL iv1_iv2」」iv15

其中,0叮<15

同时,设D为由16个15比特长的子数组组成的240位常值数组:

D = d o I d1 | …d15

其中,

d0 = 100010011010111 2;

d1 = 0100110101111002 ;

d2 = 110001********* 2;

d3 = 001001101011110 2;

d4 = 101011110001001 2;

d5 = 011010111100010 2;

d6 = 111000********* 2;

d7 = 000100110101111 2;

d8 = 100110101111000 2;

d9 = 010111100010011 2;

d10= 110101111000100 2;

d11= 001101011110001 2;

d12= 101111000100110 2 ;

d13= 0111100010011012;

d14= 111100010011010 2;

d15= 100011110101100 2 ;

设sJli,S!5为LFSR的16个单元,则0勻兰15,有s =k jL d i」M。

1.3 算法的实现过程

ZUC算法的执行过程主要有四个步骤:密钥加载,初始化阶段,工作阶段和密钥流产生阶段,具体过程如下:

(1)密钥加载阶段:

在密钥加载阶段,将128位的初始密钥和128位的初始化向量载人LFSR,同时设置32位的记忆单元R1,R2为0值。

(2)初始化阶段

在初始化阶段,执行下面的操作32次:

1、Bitreorganization() ;

2、w二F XoXX ;

3、LFSRWithInitialisationMode( w ?1)

(3)工作阶段

在工作阶段,算法执行下面的操作1次,并弃掉F的输出W

1、Bitreorganization() ;

2、 F X°,X1,X2 ;

3、LFSRWithWorkMode().

(4)密钥流产生阶段

在密钥流产生阶段,每次迭代执行以下操作1次,Z是一个32位的输出:

1、Bitreorganization() ;

2、Z 二F X o,X1,X2 二X3 ;

3、L FSRWithWorkMode().

Welcome !!! 欢迎您的下载,

资料仅供参考!

相关文档