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

ZUC算法原理及实现过程

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

Z U C 算法原理及实现过程

1.1算法设计背景

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

1.2算法原理

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

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

(1)运算符说明

mod

整数模 ⊕

整数比特异或 a b 字符串a 和b 的连接 H a

a 二进制表示的最左16位值 L a

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

a 向左k 比特的循环移位 1a >> a 向右1比特的移位

()()1212,,,,,,n n a a a b b b →i a 值分配到对应i b 的值

(2)算法结构

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

图1ZUC 的整体结构图

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

LFSR 具有16个31比特的单元()0115,,

,s s s ,每个单元()015i s i ≤≤取值均在下面

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

LFSRWithInitialisationMode (u )

{

1、()()1517212083115131040222212

mod 21v s s s s s =+++++-; 2、()()

3116mod 21s v u =+-; 3、如果160s =,则设311621s =-;

4、

()()12160115,,,,,,s s s s s s → }

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

LFSRWithWorkMode()

{

1、()()151721208311615131040222212

mod 21s s s s s s =+++++-; 2、如果160s =,则设311621s =-;

3、

()()12160115,,,,,,s s s s s s →; }

(4)比特重组

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

令025********,,,,,,,s s s s s s s s 是LFSR 中的8个单元,则形成4个32比特字0123,,,X X X X 的比特重组过程如下:

Bitreorganization()

{

1、01514H

L X s s =; 2、1119L

H X s s =; 3、275L

H X s s =; 4、320L

H X s s =

}

(5)非线性函数F

非线性函数F 有2个32位的存储单元,即1R 和2R 。令到F 的输入为0X ,1X 和2X ,即为比特重组的前三个输出,然后函数F 输出一个32位字W 。F 的详细过程如下: {

1、()32012mod2W X R R =⊕+;

2、32111mod 2W R X =+;

3、222W R X =⊕;

4、()()1

112L H R S L W W =; 5、()()2

221L H R S L W W =

}

(6)S 盒 F 函数中包含的S 盒S 是由4个并列的8×8的S 盒组成的(()0123,,,S S S S S =),其中02S S =、13S S =。0S 、1S 的定义由下面两张表分别给出:

令x 为0S (或1S )的8比特输入。将x 表示成十六进制x h

l =,则在查表时h 和l 分

别表示S 盒的第h 行和第l 列。

(7)线性变换函数

线性变换1L 和2L 均为32比特字输入到32比特字的输出,具体可定义为:

(8)密钥加载

密钥的加载过程将把初始密钥和初始向量扩展为16个31比特的LFSR 初始状态。设k 为128比特的初始密钥,iv 为128比特的初始向量,则有:

其中,015i ≤≤

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

15D d d d =

其中, 02d = 100010011010111;

12d = 010011010111100;

22d = 110001*********;

32d = 001001101011110;

42d = 101011110001001;

52d = 011010111100010;

62d = 111000*********;

72d = 000100110101111;

82d = 100110101111000;

92d = 010111100010011;

102d = 110101111000100;

112d = 001101011110001;

122d = 101111000100110;

132d = 011110001001101;

142d = 111100010011010;

152d = 100011110101100;

设015,,s s 为LFSR 的16个单元,则015i ≤≤,有i i i i s k d iv =。

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

(1)密钥加载阶段:

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

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

1、Bitreorganization();

2、()012,,X w X F X =;

3、LFSRWithInitialisationMode(1w >>)

(3)工作阶段

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

1、Bitreorganization();

2、()012,,X X X F ;

3、LFSRWithWorkMode().

(4)密钥流产生阶段

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

1、Bitreorganization();

2、()0123,,X Z F X X X =⊕;

3、LFSRWithWorkMode().

相关文档