3GPP機密性和完整性算法規範128-EEA3和128-EIA3(一)----密鑰生成原理

3GPP機密性和完整性算法規範128-EEA3和128-EIA3(一)----密鑰生成原理

3GPP機密性和完整性算法規範128-EEA3和128-EIA3(二)----祖沖之算法的C語言實現

3GPP機密性和完整性算法規範128-EEA3和128-EIA3(三)----機密性算法(EEA3)和完整性算法(EIA3)

3GPP機密性和完整性算法規範128-EEA3和128-EIA3(四)----測試用例

3GPP機密性和完整性算法規範128-EEA3和128-EIA3(五)----文檔代碼資源

       最近公司要研發一款用於鏈路通信加密的設備,使用祖沖之算法對OSI七層中的數據鏈路層數據進行流式加密,對祖沖之算法的密鑰生成,機密性和完整性算法都進行了學習。

  1. 引言

ZUC是一個面向字的流密碼。它需要一個128位的初始密鑰和一個128位的初始矢量(IV)作爲輸入,輸出一串32位字的密鑰流(因此,這裏每一個32位的字稱爲密鑰字)。密鑰流可以用來加密/解密。

ZUC的執行分爲兩個階段:初始化階段和工作階段。在第一階段,將密鑰和初始向量IV初始化,也就是,時鐘控制着密碼運行但不產生輸出(見章節3.6.1)。第二階段是工作階段,在這個階段,隨着每一個時鐘脈衝,它都會產生一個32位字的輸出(見章節3.6.2)。

  1. 符號和慣例

2.1 基

在這份文檔中,除非另有原因,一般整數被表示成十進制數字。我們使用前綴“0 x”表示十六進制數字,下標“2”是以二進制方式表示一個數。

 

1整數a 可以寫成不同的表示方式:

a = 1234567890                            十進制表示法

= 0x499602D2                            十六進制表示法

= 10010011001011000000010110100102      二進制表示法

 

2.2 位排序

在這份文檔中,所有的數據變量在左手邊提供最高有效位(字節),在右手邊提供最低有效位(字節)。

 

例2  假設a=10010011001011000000010110100102   。那麼它的最高有效位是1(最左邊的那個位),最低有效位是0(最右邊的那個位)。

 

2.3 註釋

+   兩個整數的加法

ab 整數a和b的乘法

= 賦值運算符

mod 整數的模運算

⊕ 整數的位異或運算

                       ⊞  模 232 的加法

a || b  字符串a和b的級聯

aH   整數a的最左邊16位

aL  整數a的最右邊16位

a <<<n k  n位寄存器a 向左的k 位循環移位

a >> 1 整數a 右移一位

   (a1, a2,…, an)→(b1, b2,…, bn)  把ai 對應賦值給 bi 

例3 對於任意兩個字符串a和b,由a和b級聯生成的字符串c的描述同樣遵循在章節2.2中定義的規則。也就是說,最高有效位在左手邊,最低有效位在右手邊。例如,

a=0x1234,

b=0x5678,

        於是我們有 

c a||b =0x12345678.

例 4 假設

a=10010011001011000000010110100102

        於是我們有 

aH=10010011001011002,

aL=00000010110100102.

例 5    假設 

a=110010011001011000000010110100102.

         於是我們有 

a >> 1=11001001100101100000001011010012.

例 6  假設       a0, a1, …, a15, b0, b1, …, b15 都是整型變量,那麼 

(a0, a1, …, a15)→(b0, b1, …, b15) 

         結果是 bi=ai, 0≤i≤15。

  1.  算法描述

3.1 算法的總體結構

如圖1,ZUC有三個邏輯層。頂層是一個16段的線性反饋移位寄存器(LFSR)。中間層是比特重組(BR),底層是一個非線性函數F。

 

 

                                                        圖1 ZUC算法的總體結構

 

3.2 線性反饋移位寄存器(LFSR)

線性反饋移位寄存器(LFSR)有16個31位的單元(s0, s1,…, s15),每個單元 si (0≤i≤15)僅限在下列集合中取值

                   {1,2,3, …,231–1}。

    LFSR包含兩個操作模式:初始化模式和工作模式。

初始化模式時,LFSR接收一個31位的輸入字u,u是通過去掉非線性函數F輸出的32位字W的最右邊的位獲得的。也就是,u=W>>1。更具體地說,初始化模式工作如下:

 

LFSRWithInitialisationMode(u)
{

1. v=215s15+217s13+221s10+220s4+(1+28)s0 mod (231-1);

2. s16=(v+u) mod (231-1);

3. If s16=0, then set s16=231-1;

4. (s1,s2, …,s15,s16)→(s0,s1, …,s14,s15).

}

 

工作模式時,LFSR不再接收任何輸入,其工作如下:

 

LFSRWithWorkMode()
{

1. s16=215s15+217s13+221s10+220s4+(1+28)s0 mod (231-1);

2. If s16=0, then set s16=231-1;

3. (s1,s2, …,s15,s16)→(s0,s1, …,s14,s15).

 

    注意事項:由於在有限域GF(231-1)上的一個31位字符s和2i的乘積可以用s向左循環移位i位來實現,因此在上面函數的步驟1中,加法模231-1是需要的。更確切地說,函數LFSRWithInitialisationMode中的步驟1可以實現如下:v=(s15<<<3115)+(s13<<<3117)+(s10<<<3121)+(s4<<<3120)+(s0 <<<318)+s0 mod (231-1),

並且,在函數LFSRWithWorkMode裏的步驟1中也需要同樣的實現方式。

 

    注意事項:對於有限域GF(231-1)上的兩個元素a和b,v=a+b mod (231-1)的計算可以這樣來實現:(1)計算v=a+b ,(2)如果進位是1,那麼使v=v+1。或者可以(如果可以抵抗可能的時序攻擊,這種實現會更好的),(1)計算w=a+b,這裏w是32位數值,(2)使v=(w的最低有效31位)+(w的最高有效位)。

3.3 比特重組

    該算法的中間層是比特重組。該層從LFSR單元抽取128位,形成4個32位的字。這裏的前3個字會在底層的非線性函數F中使用。最後一個字將涉及產生密鑰流。

    和章節3.2中一樣,假設s0, s2, s5, s7, s9, s11, s14, s15 是LFSR裏的8個單元。比特重組從上面的8個單元裏按如下方式形成4個32位的字X0, X1, X2, X3:

Bitreorganization()
{

1. X0=s15H  || s14L;

2. X1=s11L || s9H;

3. X2=s7L || s5H;

4. X3=s2L ||s0H.

}

    註解: si是31位的整數,因此siH是指si的從第30到15位,而不是第31到16位,對於0≤i≤15。

3.4 非線性函數F

    非線性函數F包括2個32位的記憶單元R1 和 R2。假設F的輸入爲X0 ,X1 和 X2.,其中 X0, X1 和 X2來自比特重組的輸出(見章節3.3),然後F輸出一個32位的字W,函數F的具體過程如下:

F (X0, X1, X2)
{

1. W=( X0⊕R1) ⊞ R2;

2. W1= R1⊞X1;

3. W2= R2⊕X2;

4. R1=S(L1(W1L||W2H));

5. R2=S(L2(W2L||W1H)).

}

    見章節3.4.1,在這裏,S是一個32×32位的S盒,L1 和L2 是在章節3.4.2裏定義的線性變換。

3.4.1  S盒  S

    32×32的S盒S是由4個並列的8×8 的S盒組成,也就是說,S=(S0,S1,S2,S3),這裏S0=S2, S1=S3。S0 和 S1的定義分別在表3.1和表3.2中。

    假設x是S0 (或S1)的一個8位輸入。把x像這樣x=h||l寫成兩個十六進制數,那麼表3.1(或表3.2)裏第h行和l列相交的條目是S0 (或 S1)的輸出。

7 S0(0x12)=0xF9 和S1(0x34)=0xC0

    假設S盒S的32位輸入X和32位輸出Y如下:

X = x0 || x1 || x2 || x3,

Y = y0 || y1 || y2 || y3,

    這裏xi 和yi都是字節,i=0,1,2,3。於是我們有

yi=Si(xi), i=0,1,2,3.

8 假設X=0x12345678是S盒的32位輸入,Y是S盒的32位輸出。於是我們有

Y=S(X)=S0(0x12)||S1(0x34)||S2(0x56)||S3(0x78)=0xF9C05A4E. 

 3.1. S盒 S0

 

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  

 3.2. S盒 S1

 

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  

注:上面S盒S0 和S1 裏的條目都是以十六進制表示的

3.4.2 線性變換L1 和L2

    L1 和L2 都是32位到32位的線性變換,其定義如下:

L1(X)=X⊕(X<<<322)⊕(X<<<3210)⊕(X<<<3218)⊕(X<<<3224), 

L2(X)=X⊕(X<<<328)⊕(X<<<3214)⊕(X<<<3222)⊕(X<<<3230)。

3.5 密鑰加載

    隨着LFSR的初始化,密鑰加載過程將會把初始的密鑰和初始矢量擴展到16個31位的整數。假設128位的初始密鑰k和128位的初始向量iv如下:

k=k0||k1||k2||…||k15

和 

iviv0|| iv1|| iv2||…|| iv15

    這裏ki 和 ivi分別都是字節,0≤i≤15 。接着k和iv被加載到LFSR的s0, s1, …, s15 ,如下:

  1. 假設D是一個由16個15位子字符串組成的240位的長常字符串:

Dd0||d1 ||…||d15,

    這裏

d0 = 1000100110101112,

d1 = 0100110101111002,

d2 = 1100010011010112,

d3 = 0010011010111102,

d4 = 1010111100010012,

d5 = 0110101111000102,

d6 = 1110001001101012,

d7 = 0001001101011112,

d8= 1001101011110002,

d9 = 0101111000100112,

d10 = 1101011110001002,

d11 = 0011010111100012,

d12 = 1011110001001102,

d13 = 0111100010011012,

d14 = 1111000100110102,

d15 = 1000111101011002.

2、對0≤i≤15,使si=ki||di||ivi。

3.6 ZUC算法的執行

    執行ZUC算法分兩個階段:初始化階段和工作階段。

3.6.1初始化階段

    在初始化階段,算法調用密鑰加載過程把128位的密鑰k和128位的初始向量iv加載到LFSR裏,(見章節3.5),並且把32位記憶單元 R1 和 R2全部清零,然後密碼按如下方式操作32次:

1. Bitreorganization();                // 見章節 3.3

2. w=F(X0, X1, X2);                   // 見章節3.4

3. LFSRWithInitialisationMode(w>>1). // 見章節 3.2

3.6.2工作階段

    在初始化階段之後,算法進入到工作階段。在工作階段,算法執行一次下面的操作,並丟棄函數F的輸出W。

1. Bitreorganization();          // 見章節3.3

2.    F(X0, X1, X2);                     //丟棄輸出,見章節 3.4

3. LFSRWithWorkMode().     // 見章節3.2

    接着算法進入產生密鑰流階段,也就是說,對於每一次迭代,執行一次下列操作,並輸出一個32位的字Z:

1. Bitreorganization();          // 見章節 3.3

2.   Z= F(X0, X1, X2)⊕X3;                   // X3的定義,見章節 3.3

3. LFSRWithWorkMode() .     //見章節 3.2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章