祖冲之(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$ 。
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$ 。
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 |
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 |