ZUC算法原理及实现过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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)初始化阶段