祖冲之(ZUC)序列密码

1、术语约定:

1.1 比特 bit

二进制字符0和1称之为比特

1.2 字节 byte

八个比特组成的比特串称为字节

1.3 字 word

有两个以上(包含两个)比特组成的比特串称之为字

1.4 字表示 word representation

本部份字默认采用十进制表示。当字采用其他进制表示时,总是在字的表示之前或之后添加指示符。例如,前缀0x指示该字采用十六进制表示,后缀下角标2指示该字采用二进制表示。

1.5 高低位顺序 bit ordering

本部分规定字的最高位总是位于字表示中的最左边,最低位总是位于字表示中的最右边。

2、符号和缩略语

2.1 运算符

算术加法运算

整数取余运算

按比特位逐位异或运算

模<img src=”http://chart.googleapis.com/chart?cht=tx&chl=2^{32}”tyle=”border:none;”>加法运算

  字符串连接符

$·H$ 取字的最高 16比 特

$·L$ 取字的最低 16比 特

$«<k$ 32比特字左循环k位

$k$ 32比特字右移k位

$a→b$ 向量a赋值给向量b,即按分量逐分量赋值

#####2.2 符号 $s_0,s_1……s_{15}$ 线性反馈移位寄存器的16个1比特寄存器单元变量

$X_0,X_1,X_2,X_3$ 比特重组输出的4个32比特字

$R_1,R_2$ 非线性函数F的2个32比特记忆单元变量

$W$ 非线性函数F输出的32$bit $

$Z$ 算法每拍输出的32比特密钥字

$K$ 初始种子密钥

$iv$ 初始向量

$D$ 用于算法初始化的字符串向量

#####2.3缩略语 $ZUC$ 祖冲之序列密码算法

$LFSR$ 线性反馈移位寄存器

$BR $ 比特重组

$F$ 非线性函数

3 算法描述

#####3.1算法结构 祖冲之算法结构包含三层,如图1所示。上层为线性反馈移位寄存器$LFSR$ ,中层为比特重组$BR$,下层为非线性函数$F$ 。

ZUC

3.2 LFSR

###### 3.2.1概述

$LFSR$由16个31$b$的单元变量构成,定义在素域上,其特征多项式 $f(x)=x^{16}-(2^{15}x^{15}+2^{17}x^{13}+2^{21}x^{10}+2^{20}x^4+(2^8+1))$

是素域$GF(2^{31}-1)$ 上的本原多项式。

3.2.2初始化模式

$LFSR$ 只接受一个31比特字$u,u=W»1$。

$LFSRWithInitialisationMode(u)$

{

​ $(1)v=2^{15}s_{15}+2^{17}s_{13}+2^{21}s_{10}+2^{20}s_4+(1+2^8)s_0mod(2^{31}-1);$

​ $(2)s_{16}=(v+u)mod(2^{31}-1);$

​ $(3)$$if$ $s_{16}=0,$

​ $then$ $s_{16}=2^{31}-1;$

​ $(4)(s_1,s_2,……s_{16}) \rightarrow (s_0,s_1,……s_{15}); $

}

3.2.3工作模式

$LFSR$不接受任何输入。

$LFSRWithWorkMode()$

{

​ $(1)s_{16}=2^{15}s_{15}+2^{17}s_{13}+2^{21}s_{10}+2^{20}s_4+(1+2^8)s_0mod(2^{31}-1);$

​ $(2)$ $if$ $s_{16}=0,$

​ $then$ $s_{16}=2^{31}-1;$

​ $(3)(s_1,s_2,……s_{16}) \rightarrow (s_0,s_1,……s_{15});$

}

3.3 比特重组BR

比特重组$BR$ 为中间过渡层,其从$LFSR$的寄存器变量$s_0,s_2,s_5,s_7,s_9,s_11,s_14,s_15$ 中抽取128位组成4个32b的字$X_0,X_1,X_2,X_3$ 。$BR$具体算法如下:

$BitReconstruction()$

{

​ $(1)X_0=s_{15H}   s_{14L};$
​ $(2)X_1=s_{11L}   s_{9H};$
​ $(3)X_2=s_{7L}   s_{5H};$
​ $(4)X_3=s_{2L}   s_{0H};$

}

3.4 非线性函数F

$F$包含2个32比特记忆单元变量$R_1,R_2$ 。

$F$的输入为3个32比特字$X_0,X_1,X_2$ ,输出为一个32比特字W。

$F(X_0,X_1,X_2)$

{

​ $(1)W=(X_0\oplus R_1)\boxplus R_2;$

​ $(2)W_1=R_1 \boxplus X_1;$

​ $(3)W_2=R_2 \oplus X_2;$

​ $(4)R_1=S(L_1(W_{1L}   W_{2H}));$
​ $(5)R_2=S(L_2(W_{2L}   W_{1H}));$

}

$S$为32比特的$S$盒变换,定义见附录$A$;

​ $L_1(X)=X\oplus (X«<2)\oplus (X«<10)\oplus(X«<18)\oplus (X«<24);$

​ $L_2(X)=X\oplus (X«<8)\oplus (X«<14)\oplus(X«<22)\oplus (X«<30);$

3.5密钥装入

密钥装入过程将128比特的初始密钥$k$和128比特的初始向量$iv$扩展为16个31比特字作为$LFSR$寄存器变量$s_0,s_1……s_{15}$ 的初始状态。

​ $k: k_0   k_1   ……   k_{15}$
​ $iv:iv_0   iv_1   ……   iv_{15} $

其中,$k_i$和$iv _i$均为8比特字节,$0\leq i\leq15$

密钥封装过程:

$(1)D$为240比特的常量,分成16个15比特的子串:

​ $D=d_0   d_1   ……   d_{15};$

其中:

​ $d_0=100010011010111_2,$

​ $d_1=010011010111100_2,$

​ $d_2=110001001101011_2,$

​ $d_3=001001101011110_2,$

​ $d_4=101011110001001_2,$

​ $d_5=011010111100010_2,$

​ $d_6=111000100110101_2,$

​ $d_7=000100110101111_2,$

​ $d_8=100110101111000_2,$

​ $d_9=010111100010011_2,$

​ $d_{10}=110101111000100_2,$

​ $d_{11}=001101011110001_2,$

​ $d_{12}=101111000100110_2,$

​ $d_{13}=011110001001101_2,$

​ $d_{14}=111100010011010_2,$

​ $d_{15}=100011110101100_2,$

$(2)$ $0\le i \le 15,$ $s_i=k_i   d_i   iv_i$

##### 3.6算法运行

3.6.1初始化阶段

首先按照3.5进行密钥封装,并置32比特记忆单元变量$R_1$和$R_2$为全0.

然后重复下述操作32次:

​ $(1)BitReconstruction();$

​ $(2)W=F(X_0,X_1,X_2);$

​ $(3)LFSRWithInitialisationMode(W»1);$

3.6.2工作阶段

首先执行下列操作一次,并将$F$的输出$W$舍弃:

​ $ (1)BitReconstruction();$

​ $(2)F(X_0,X_1,X_2);$

​ $(3)LFSRWithInitialisationMode();$

然后进入密钥输出阶段。执行下述过程一次,并输出一个32比特的密钥字$Z$ :

​ $ (1)BitReconstruction();$

​ $(2)Z=F(X_0,X_1,X_2)\oplus X_3;$

​ $(3)LFSRWithInitialisationMode();$

附录

$S$盒

​ 32比特$S$盒S由4个小的$8*8$的$S$盒并置而成,即$S=(S_0,S_1,S_2,S_3)$ 其中,$S_0=S_2,S_1=S_3$ 。$S_0$ 和$S_1$的定义见表1和表2.设$S_0$ (或$S_1$)的8比特输入为$x$,将$x$视作两个16进制数的连接,即$x=h   l$,则表1(或表2)中第h行和第l列交叉的元素即为$S_0$ ( 或$S_1$)的输出$S_0(x)$ (或$S_1(x)$)。

​ 设$S$盒$S$ 的32比特输入X和32比特输出Y分别为:

​ $X=x_0   x_1   x_2   x_3,$
​ $Y=y_0   y_1   y_2   y_3,$

​ 其中$x_i$和$y_i$均为8比特字节,$i=0,1,2,3$ 。则有$y_i=S(x_i), i=0,1,2,3$ 。

表1 $S_0​$盒
  0 1 2 3 4 5 6 7 8 9 A B C D E F
0 3E 72 5B 47 CA E0 00 33 04 D1 54 98 09 B9 6D CB
1 7B 1B F9 32 AF 9D 6A A5 B8 2D FC 1D 08 53 03 90
2 4D 4E 84 99 E4 C1 D9 91 DD B6 85 48 8B 29 6E AC
3 CD C1 F8 1E 73 43 69 C6 E5 BD FD 39 63 20 D4 38
4 76 7D B2 A7 CF ED 57 C5 F3 2C BB F4 21 06 55 9B
5 E3 EF 5E 31 4F 7F 5A A4 0D 82 51 49 5F BA 58 1C
6 4A 16 D5 17 A8 92 24 1F 8C EF D8 AE 2E 01 D3 AD
7 3B 4B DA 46 EB C9 DF 9A 8F 87 D7 3A 80 6F 2F C8
8 B1 B4 37 F7 0A 22 13 28 7C CC 3C 89 C7 C3 96 56
9 07 BF 7E F0 0B 2B 97 52 35 41 79 61 A6 4C 10 FE
A BC 26 95 88 8A B0 A3 FB C0 18 94 F2 E1 E5 E9 5D
B D0 DC 11 66 64 5C EC 59 42 75 12 F5 74 9C AA 23
C 0E 86 AB BE 2A 02 E7 67 E6 44 A2 6C C2 93 9F F1
D F6 FA 36 D2 50 68 9E 62 71 15 3D D6 40 C4 E2 0F
E 8E 83 77 6B 25 05 3F 0C 30 EA 70 B7 A1 E8 A9 65
F 8D 27 1A DB 81 B3 A0 F4 45 7A 19 DF EE 78 34 60
表2 $S_1$盒
  0 1 2 3 4 5 6 7 8 9 A B C D E F
0 55 C2 63 71 3B C8 47 86 9F 3C DA 5B 29 AA FD 77
1 8C C5 94 0C A6 1A 13 00 E3 A8 16 72 40 F9 F8 42
2 44 26 68 96 81 D9 45 3E 10 76 C6 A7 8B 39 43 E1
3 3A B5 56 2A C0 6D B3 05 22 66 BF DC 0B FA 62 48
4 DD 20 11 06 36 C9 C1 CF F6 27 52 BB 69 F5 D4 87
5 7F 84 4C D2 9C 57 A4 BC 4F 9A DF FE D6 8D 7A EB
6 2B 53 D8 5C A1 14 17 FB 23 D5 7D 30 67 73 08 09
7 EE B7 70 3F 61 B2 19 8E 4E E5 4B 93 8F 5D DB A9
8 AD F1 AE 2E CB 0D FC F4 2D 46 6E 1D 97 E8 D1 E9
9 4D 37 A5 75 5E 83 9E AB 82 9D B9 1C E0 CD 49 89
A 01 B6 BD 58 24 A2 5F 38 78 99 15 90 50 B8 95 E4
B D0 91 C7 CE ED 0F B4 6F A0 CC F0 02 4A 79 C3 DE
C A3 EF EA 51 E6 6B 18 EC 1B 2C 80 F7 74 E7 FF 21
D 5A 6A 54 1E 41 31 92 35 C4 33 07 0A BA 7E 0E 34
E 88 B1 98 7C F3 3D 60 6C 7B CA D3 1F 32 65 04 28
F 64 BE 85 9B 2F 59 8A D7 B0 25 AC AF 12 03 E2 F2