完整word版祖冲之序列密码算法ZUC算法.docx
《完整word版祖冲之序列密码算法ZUC算法.docx》由会员分享,可在线阅读,更多相关《完整word版祖冲之序列密码算法ZUC算法.docx(28页珍藏版)》请在冰豆网上搜索。
完整word版祖冲之序列密码算法ZUC算法
祖冲之序列密码算法
第1部分:
算法描述
1范围
本部分描述了祖冲之序列密码算法,可用于指导祖冲之算法相关产品的研制、检测和使用。
2术语和约定
以下术语和约定适用于本部分。
2.1
比特bit
二进制字符0和1称之为比特.
2.2
字节byte
由8个比特组成的比特串称之为字节。
2.3
字word
由2个以上(包含2个)比特组成的比特串称之为字。
本部分主要使用31比特字和32比特字。
2.4
字表示wordrepresentation
本部分字默认采用十进制表示。
当字采用其它进制表示时,总是在字的表示之前或之后添加指示符。
例如,前缀0x指示该字采用十六进制表示,后缀下角标2指示该字采用二进制表示.
2.5
高低位顺序bitordering
本部分规定字的最高位总是位于字表示中的最左边,最低位总是位于字表示中的最右边.
3符号和缩略语
3.1运算符
+算术加法运算
mod整数取余运算
⨁按比特位逐位异或运算
⊞模232加法运算
‖字符串连接符
∙H取字的最高16比特
∙L取字的最低16比特
<〈〈k32比特字左循环移k位
>>k32比特字右移k位
ab向量a赋值给向量b,即按分量逐分量赋值
3.2符号
下列符号适用于本部分:
s0,s1,s2,…,s15线性反馈移位寄存器的16个31比特寄存器单元变量
X0,X1,X2,X3比特重组输出的4个32比特字
R1,R2非线性函数F的2个32比特记忆单元变量
W非线性函数F输出的32比特字
Z算法每拍输出的32比特密钥字
k初始种子密钥
iv初始向量
D用于算法初始化的字符串常量
3.3缩略语
下列缩略语适用于本部分:
ZUC祖冲之序列密码算法或祖冲之算法
LFSR线性反馈移位寄存器
BR比特重组
F非线性函数
4算法描述
4.1算法整体结构
祖冲之算法逻辑上分为上中下三层,见图1。
上层是16级线性反馈移位寄存器(LFSR);中层是比特重组(BR);下层是非线性函数F.
图1祖冲之算法结构图
4.2线性反馈移位寄存器LFSR
4.2。
1概述
LFSR包括16个31比特寄存器单元变量s0,s1,…,s15。
LFSR的运行模式有2种:
初始化模式和工作模式。
4.2。
2初始化模式
在初始化模式下,LFSR接收一个31比特字u。
u是由非线性函数F的32比特输出W通过舍弃最低位比特得到,即u=W>>1。
在初始化模式下,LFSR计算过程如下:
LFSRWithInitialisationMode(u)
{
(1)v=215s15+217s13+221s10+220s4+(1+28)s0mod(231-1);
(2)s16=(v+u)mod(231—1);
(3)如果s16=0,则置s16=231—1;
(4)(s1,s2,…,s15,s16)(s0,s1,…,s14,s15)。
}
4.2。
3工作模式
在工作模式下,LFSR不接收任何输入。
其计算过程如下:
LFSRWithWorkMode()
{
(1)s16=215s15+217s13+221s10+220s4+(1+28)s0mod(231—1);
(2)如果s16=0,则置s16=231—1;
(3)(s1,s2,…,s15,s16)(s0,s1,…,s14,s15)。
}
4.3比特重组BR
比特重组从LFSR的寄存器单元中抽取128比特组成4个32比特字X0、X1、X2、X3。
BR的具体计算过程如下:
BitReconstruction()
{
(1)X0=s15H‖s14L;
(2)X1=s11L‖s9H;
(3)X2=s7L‖s5H;
(4)X3=s2L‖s0H。
}
4.4非线性函数F
F包含2个32比特记忆单元变量R1和R2。
F的输入为3个32比特字X0、X1、X2,输出为一个32比特字W。
F的计算过程如下:
F(X0,X1,X2)
{
(1)W=(X0R1)⊞R2;
(2)W1=R1⊞X1;
(3)W2=R2X2;
(4)R1=S(L1(W1L‖W2H));
(5)R2=S(L2(W2L‖W1H))。
}
其中S为32比特的S盒变换,定义在附录A中给出;L1和L2为32比特线性变换,定义如下:
L1(X)=X(X〈〈〈2)(X<<<10)(X<<<18)(X〈〈<24),
L2(X)=X(X〈〈<8)(X<〈<14)(X〈〈<22)(X〈<〈30).
4.5密钥装入
密钥装入过程将128比特的初始密钥k和128比特的初始向量iv扩展为16个31比特字作为LFSR寄存器单元变量s0,s1,…,s15的初始状态。
设k和iv分别为
k0‖k1‖……‖k15
和
iv0‖iv1‖……‖iv15,
其中ki和ivi均为8比特字节,0≤i≤15。
密钥装入过程如下:
(1)D为240比特的常量,可按如下方式分成16个15比特的子串:
D=d0‖d1‖……‖d15,
其中:
d0=1000100110101112,
d1=0100110101111002,
d2=1100010011010112,
d3=0010011010111102,
d4=1010111100010012,
d5=0110101111000102,
d6=1110001001101012,
d7=0001001101011112,
d8=1001101011110002,
d9=010*******100112,
d10=1101011110001002,
d11=0011010111100012,
d12=1011110001001102,
d13=0111100010011012,
d14=1111000100110102,
d15=1000111101011002.
(2)对0≤i≤15,有si=ki‖di‖ivi.
4.6算法运行
4。
6.1初始化阶段
首先把128比特的初始密钥k和128比特的初始向量iv按照4。
5节密钥装入方法装入到LFSR的寄存器单元变量s0,s1,…,s15中,作为LFSR的初态,并置32比特记忆单元变量R1和R2为全0.然后执行下述操作:
重复执行下述过程32次:
(1)BitReconstruction();
(2)W=F(X0,X1,X2);
(3)LFSRWithInitialisationMode(W〉〉1).
4.6。
2工作阶段
首先执行下列过程一次,并将F的输出W舍弃:
(1)BitReconstruction();
(2)F(X0,X1,X2);
(3)LFSRWithWorkMode().
然后进入密钥输出阶段。
在密钥输出阶段,每运行一个节拍,执行下列过程一次,并输出一个32比特的密钥字Z:
(1)BitReconstruction();
(2)Z=F(X0,X1,X2)X3;
(3)LFSRWithWorkMode()。
附 录 A
(规范性附录)
S盒
32比特S盒S由4个小的8х8的S盒并置而成,即S=(S0,S1,S2,S3),其中S0=S2,S1=S3。
S0和S1的定义分别见表1和表2。
设S0(或S1)的8比特输入为x。
将x视作两个16进制数的连接,即x=h||l,则表1(或表2)中第h行和第l列交叉的元素即为S0(或S1)的输出S0(x)(或S1(x)).
设S盒S的32比特输入X和32比特输出Y分别为:
X=x0‖x1‖x2‖x3,
Y=y0‖y1‖y2‖y3,
其中xi和yi均为8比特字节,i=0,1,2,3。
则有yi=Si(xi),i=0,1,2,3.
表1S0盒
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
CE
D9
91
DD
B6
85
48
8B
29
6E
AC
3
CD
C1
F8
1E
73
43
69
C6
B5
BD
FD
39
63
20
D4
38
4
76
7D
B2
A7
CF
ED
57
C5
F3
2C
BB
14
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
FF
D8
AE
2E
01
D3
AD
7
3B
4B
DA
46
EB
C9
DE
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
表2S1盒
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
注:
S0盒和S1盒数据均为十六进制表示.
附 录 B
(资料性附录)
模231-1乘法和模231—1加法的实现
B。
1模231—1乘法
两个31比特字模231-1乘法可以快速实现.特别地,当其中一个字具有较低的汉明重量时,可以通过31比特的循环移位运算和模231-1加法运算实现。
例如,计算abmod(231-1),其中b=2i+2j+2k。
则
abmod(231—1)=(a〈〈〈31i)+(a<〈〈31j)+(a<〈<31k)mod(231-1),
其中〈<<31表示31比特左循环移位运算。
B。
2模231—1加法
在32位处理平台上,两个31比特字a和b模231—1加法运算c=a+bmod(231-1)可以通过下面的两步计算实现:
1)c=a+b;
2)c=(c&0x7FFFFFFF)+(c〉>31).
附 录 C
(资料性附录)
算法计算实例
C。
1测试向量1(全0)
输入:
密钥k:
00000000000000000000000000000000
初始向量iv:
00000000000000000000000000000000
输出:
z1:
27bede74
z2:
018082da
初始化:
线性反馈移位寄存器初态:
i
S0+i
S1+i
S2+i
S3+i
S4+i
S5+i
S6+i
S7+i
0
0044d700
0026bc00
00626b00
00135e00
00578900
0035e200
00713500
0009af00
8
004d7800
002f1300
006bc400
001af100
005e2600
003c4d00
00789a00
0047ac00
t
X0
X1
X2
X3
R1
R2
W
S15
0
008f9a00
f100005e
af00006b
6b000089
67822141
62a3a55f
008f9a00
4563cb1b
1
8ac7ac00
260000d7
780000e2
5e00004d
474a2e7e
119e94bb
4fe932a0
28652a0f
2
50cacb1b
4d000035
13000013
890000c4
c29687a5
e9b6eb51
291f7a20
7464f744
3
e8c92a0f
9a0000bc
c400009a
e2000026
29c272f3
8cac7f5d
141698fb
3f5644ba
4
7eacf744
ac000078
f100005e
350000af
2c85a655
24259cb0
e41b0514
006a144c
5
00d444ba
cb1b00f1
260000d7
af00006b
cbfbc5c0
44c10b3a
50777f9f
07038b9b
6
0e07144c
2a0f008f
4d000035
780000e2
e083c8d3
7abf7679
0abddcc6
69b90e2b
7
d3728b9b
f7448ac7
9a0000bc
13000013
147e14f4
b669e72d
aeb0b9c1
62a913ea
8
c5520e2b
44ba50ca
ac000078
c400009a
982834a0
f095d694
8796020c
7b591cc0
9
f6b213ea
144ce8c9
cb1b00f1
f100005e
e14727d6
d0225869
5f2ffdde
70e21147
初始化后线性反馈移位寄存器状态:
i
S0+i
S1+i
S2+i
S3+i
S4+i
S5+i
S6+i
S7+i
0
7ce15b8b
747ca0c4
6259dd0b
47a94c2b
3a89c82e
32b433fc
231ea13f
31711e42
8
4ccce955
3fb6071e
161d3512
7114b136
5154d452
78c69a74
4f26ba6b
3e1b8d6a
有限状态机内部状态:
R1=14cfd44c
R2=8c6de800
密钥流:
t
X0
X1
X2
X3
R1
R2
z
S15
0
7c37ba6b
b1367f6c
1e426568
dd0bf9c2
3512bf50
a0920453
286dafe5
7f08e141
1
fe118d6a
d4522c3a
e955463d
4c2be8f9
c7ee7f13
0c0fa817
27bede74
3d383d04
2
7a70e141
9a74e229
071e62e2
c82ec4b3
dde63da7
b9dd6a41
018082da
13d6d780
C。
2测试向量2(全1)
输入:
密钥k:
ffffffffffffffffffffffffffffffff
初始向量iv:
ffffffffffffffffffffffffffffffff
输出:
z1:
0657cfa0
z2:
7096398b
初始化:
线性反馈移位寄存器初态:
i
S0+i
S1+i
S2+i
S3+i
S4+i
S5+i
S6+i
S7+i
0
7fc4d7ff
7fa6bcff
7fe26bff
7f935eff
7fd789ff
7fb5e2ff
7ff135ff
7f89afff
8
7fcd78ff
7faf13ff
7febc4ff
7f9af1ff
7fde26ff
7fbc4dff
7ff89aff
7fc7acff
t
X0
X1
X2
X3
R1
R2
W
S15
0
ff8f9aff
f1ffff5e
afffff6b
6bffff89
b51c2110
30a3629a
ff8f9aff
76e49a1a
1
edc9acff
26ffffd7
78ffffe2
5effff4d
a75b6f4b
1a079628
8978f089
5e2d8983
2
bc5b9a1a
4dffff35
13ffff13
89ffffc4
9810b315
99296735
35088b79
5b9484b8
3
b7298983
9affffbc
c4ffff9a
e2ffff26
4c5bd8eb
2d577790
c862a1cb
2db5c755
4
5b6b84b8
acffff78
f1ffff5e
35ffffaf
a13dcb66
21d0939f
4487d3e3
60579232
5
c0afc755
9a1afff1
26ffffd7
afffff6b
cc5ce260
0c50a8e2
83629fd2
29d4e960
6
53a99232
8983ff8f
4dffff35
78ffffe2
dada0730
b516b128
ac461934
5e02d9e5
7
bc05e960
84b8edc9
9affffbc
13ffff13
2bbe53a4
12a8a16e
1bf69f78
7904dddc
8
f209d9e5
c755bc5b
acffff78
c4ffff9a
4a90d661
d9c744b4
ec602baf
0c3c9016
9
1879dddc
9232b729
9a1afff1
f1ffff5e
76bc13d7
a49ea404
2cb05071
0b9d257b
初始化后线性反馈移位寄存器状态:
i
S0+i
S1+i
S2+i
S3+i
S4+i
S5+i
S6+i
S7+i
0
09a339ad
1291d190
25554227
36c09187
0697773b
443cf9cd
6a4cd899
49e34bd0
8
56130b14
20e8f24c
7a5b1dcc
0c3cc2d1
1cc082c8
7f5904a2
55b61ce8
1fe46106
有限状态机内部状态:
R1=b8017bd5
R2=9ce2de5c
密钥流:
t
X0
X1
X2
X3
R1
R2
z
S15
0
3fc81ce8
c2d141d1
4bd08879
42271346
aa131b11
09d7706c
668b56df
13f56dbf
1
27ea6106
82c8f4b6
0b14d499
91872523
251e7804
caac5d6