官术网_书友最值得收藏!

2.1 算法描述

ZUC算法是一個面向32比特字設計的序列密碼算法。其需要一個128比特的初始密鑰和一個128比特的初始變量作為輸入,輸出一串32比特字的密鑰流。生成的密鑰流可以用來進行加密/解密和完整性認證。

ZUC算法整體邏輯結構如圖2-1所示,可分為上、中、下三層,上層是16級的線性反饋移位寄存器(LFSR),中間層是比特重組(BR),下層是非線性函數(shù)F

2.1.1 參數(shù)描述

ZUC算法中的慣例如下所示。

比特:二進制字符0和1稱為比特。

字節(jié):由8比特組成的比特串稱為字節(jié)。

字:由2字節(jié)以上(包含2字節(jié))組成的比特串稱為字。

整數(shù)表示:本章整數(shù)默認采用十進制數(shù)表示。當采用其他進制數(shù)表示時,將在表示之前或之后添加指示符。

例如,使用前綴“0x”表示十六進制數(shù),下標“2”表示二進制數(shù)。整數(shù)a 可以寫成不同的表示方式:

圖2-1 ZUC算法整體邏輯結構

高、低位順序:字的最高位總是位于字表示中的最左邊,最低位總是位于字表示中的最右邊。

例如,假設a=10010011001011000000010110100102 ,那么它的最高位是1,最低位是0。

ZUC算法中常用符號及解釋如表2-1所示。

表2-1 ZUC算法中常用符號及解釋

續(xù)表

下面對一些符號進行詳細解釋。

1)字符串連接符

對于任意兩個字符串ab連接后生成的字符串c的描述同樣遵循相關規(guī)則。也就是說,最高位在左邊,最低位在右邊。例如:

a=0x1234

b=0x5678

于是有

c=a||b=0x12345678

2)取字的最高16比特和最低16比特的劃分

假設

a=10010011001011000000010110100102

于是有

a H =10010011001011002

a L =00000010110100102

這里值得注意的是,aHaL都為16比特。

3)比特字移位

假設

a=110010011001011000000010110100102

于是有

a>>1=11001001100101100000001011010012

4)映射關系對應賦值

假設a0a1,…,a15b0b1,…,b15都是整型變量,那么(a0a1,…,a15) (b0b1,…,b15)的結果是bi=ai,0≤i≤15。

2.1.2 參數(shù)產生

ZUC算法在初始執(zhí)行過程中,需用到的參數(shù)為一個128比特的初始密鑰k和一個128比特的初始變量iv。

1)密鑰裝入

初始密鑰和初始變量按照如下方法加載到LFSR的寄存器單元變量s0s1 ,…,s15中,每個單元變量si(0≤i≤15)僅在有限域GF(232-1)中取值。密鑰裝入過程將128比特的初始密鑰k和128比特的初始變量iv擴展為16個31比特,并加載到每個單元變量si中。

k和iv表示成16字節(jié)串級聯(lián)的形式,即k=k0||k1||…||k15 ,iv=iv0||iv1||…||iv15。在LFSR中,si=ki||di||ivi(0≤i≤15),其中ki和ivi的長度均為8比特,di的長度為15比特。

16個已知字符串di級聯(lián)成一個240比特的長字符串DD=d0||d1||…||d15。每個di均具有固定參數(shù),具體如下:

d 0 =1000100110101112

d 1=0100110101111002

d 2 =1100010011010112

d 3=0010011010111102

d 4 =1010111100010012

d 5=0110101111000102

d 6 =1110001001101012

d 7 =0001001101011112

d 8=1001101011110002

d 9 =0101111000100112

d 10 =1101011110001002

d 11=0011010111100012

d 12 =1011110001001102

d 13=0111100010011012

d 14 =1111000100110102

d 15=1000111101011002

在ZUC算法中還需用到S盒和線性變換L這兩種運算工具。

2)S盒

32比特S盒的S由4個小的8×8的S盒并置而成,即S=(S0S1S2S3),其中S0 =S2S1=S3S0S1的定義分別見表2-2和表2-3。設S0(或S1)的8比特輸入為x,將x視為兩個十六進制數(shù)的連接,即x=h||l,則表2-2(或表2-3)中第hl列交叉的元素即為S0(或S1)的輸出S0x)(或S1x))。

S的32比特輸入X和32比特輸出Y分別為:

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

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

其中,xiyi的長度均為8比特,則yi=Sxi),i=0,1,2,3。

表2-2 S盒S0的定義

表2-3 S盒S1的定義

續(xù)表

注:表2-2、表2-3條目中的數(shù)據(jù)均為十六進制整數(shù)。

3)線性變換L1L2

L 1L2都是由32比特到32比特的線性變換,其定義如下:

L 1 (X)=X ⊕(X<<<32 2)⊕(X<<<32 10)⊕(X<<<32 18)⊕(X<<<32 24)

L 2 (X)=X ⊕(X<<<32 8)⊕(X<<<32 14)⊕(X<<<32 22)⊕(X<<<32 30)

2.1.3 算法運行

算法運行分為兩個階段:初始化階段和工作階段。在初始化階段,將初始密鑰和初始變量進行初始化,密碼算法運行,但不產生輸出;在工作階段,每個時鐘脈沖均會產生32比特字的輸出。

1.初始化階段

按照密鑰裝入方法將128比特密鑰k和初始變量iv加載到LFSR的寄存器單元變量s0s1 ,…s15中,作為LFSR的初始狀態(tài),并置32比特記憶單元變量R1R2為全0,然后執(zhí)行下述操作。

重復執(zhí)行下述過程32次:

① Bitreorganization()

W=F(X0, X1, X2)

③ LFSRWithInitialisationMode(W>>1)

算法中各模塊解釋如下。

1)Bitreorganization比特重組模塊

Bitreorganization在圖2-1中表示為BR層,該層從LFSR的寄存器單元中抽取128比特組成4個32比特字X0X1X2X3。這里的前3個字會在底層的非線性函數(shù)F中使用。最后一個字將產生密鑰流,以供非線性函數(shù)F 和密鑰輸出使用。假設s0s2s5s7s9s11s14s15是LFSR中特定的8個單元,比特重組模塊按照如下方式形成4個32比特字X0X1X2X3

2)非線性函數(shù)F

F包括2個32比特的記憶單元R1R2F的輸入為3個32比特字X0X1X2F輸出為一個32比特字WF的具體過程如下:

其中,是模232加法運算,S是一個32×32比特的S盒,L1L2是定義的線性變換。S盒和線性變換的具體結構見2.1.1節(jié)。

3)LFSRWithInitialisationMode初始化

在初始化階段,LFSR接收一個31比特字uu是通過去掉非線性函數(shù)F輸出的32比特字W的最右邊的位獲得的,即u=W >>1。在初始化階段,LFSR計算過程如下:

2.工作階段

在初始化階段后,算法進入工作階段。在工作階段,算法執(zhí)行一次下面的操作,并丟棄函數(shù)F的輸出W

① Bitreorganization()

F(X0, X1, X2)

③ LFSRWithWorkMode()

然后進入密鑰輸出階段。在密鑰輸出階段,每運行一拍,執(zhí)行下面過程一次,并輸出一個32比特字的密鑰Z

① Bitreorganization()

Z=F(X0, X1, X2)⊕X3

③ LFSRWithWorkMode()

其中,LFSRWithWorkMode()不再接收任何輸入,其計算過程如下:

2.1.4 安全性分析

針對ZUC算法,這里采用猜測確定攻擊(Guess and Determine)的密碼分析方法對其安全性進行簡要分析。

安全性分析主要分為兩個階段:第1個階段推導,這是因為若直接猜測,則需要猜測64比特,而為已知的全0初值,若用其推導,則只需猜測16比特;第2個階段從t=2時刻(密鑰流的輸出時刻)利用已推導的開始分析,并找到t=5時刻的全部內部單元。

在推導的過程中,由于為已知的全0初值,因此可以首先通過猜的高8位推導出,然后通過猜t=1時刻的高8位推導出

t=2時刻的已知變量為。在此時刻我們預猜測一部分內部單元,然后由此推導出一部分結果。在此需要注意的是,已不是移位得到的,因此其31位均為未知。

以此類推,在t=3、t=4、t=5時刻時均用此分析方法。在t=5時刻,由可知該時刻的已知量為,此外還有。因此,t=5時刻的全部內部單元均已找到。之后即可用所求內部單元生成密鑰來檢測與原密鑰是否相同。

在猜測過程中,猜測的位置是t=0時刻的的高8位,共16比特;t=1時刻的的高8位,共16比特;t=2時刻的的高8位和的低15位,共55比特;t=3時刻共31比特;t=4時刻共8比特。因此,總共猜測16+16+55+31+8=126比特。此時搜索復雜度為O(2126 ),而其窮盡搜索復雜度為O(2128 ),提高了效率。

顯然,猜測確定攻擊對ZUC算法的安全性影響不大。

主站蜘蛛池模板: 古丈县| 宜宾市| 河曲县| 天长市| 城市| 保亭| 项城市| 平阴县| 平舆县| 永城市| 砀山县| 威宁| 龙胜| 阿鲁科尔沁旗| 兴安县| 城口县| 揭东县| 眉山市| 宝山区| 石首市| 陕西省| 彭阳县| 浠水县| 瑞金市| 米林县| 周口市| 收藏| 安国市| 庆阳市| 乾安县| 万安县| 金川县| 银川市| 报价| 梨树县| 抚松县| 沙田区| 北辰区| 通州区| 合川市| 犍为县|