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

2.1 算法描述

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

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

2.1.1 參數(shù)描述

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

比特:二進(jìn)制字符0和1稱為比特。

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

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

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

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

圖2-1 ZUC算法整體邏輯結(jié)構(gòu)

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

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

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

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

續(xù)表

下面對一些符號進(jìn)行詳細(xì)解釋。

1)字符串連接符

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

a=0x1234

b=0x5678

于是有

c=a||b=0x12345678

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

假設(shè)

a=10010011001011000000010110100102

于是有

a H =10010011001011002

a L =00000010110100102

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

3)比特字移位

假設(shè)

a=110010011001011000000010110100102

于是有

a>>1=11001001100101100000001011010012

4)映射關(guān)系對應(yīng)賦值

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

2.1.2 參數(shù)產(chǎn)生

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

1)密鑰裝入

初始密鑰和初始變量按照如下方法加載到LFSR的寄存器單元變量s0s1 ,…,s15中,每個單元變量si(0≤i≤15)僅在有限域GF(232-1)中取值。密鑰裝入過程將128比特的初始密鑰k和128比特的初始變量iv擴(kuò)展為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這兩種運(yùn)算工具。

2)S盒

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

設(shè)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ù)均為十六進(jìn)制整數(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 算法運(yùn)行

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

1.初始化階段

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

重復(fù)執(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中使用。最后一個字將產(chǎn)生密鑰流,以供非線性函數(shù)F 和密鑰輸出使用。假設(shè)s0s2s5s7s9s11s14s15是LFSR中特定的8個單元,比特重組模塊按照如下方式形成4個32比特字X0X1X2X3

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

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

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

3)LFSRWithInitialisationMode初始化

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

2.工作階段

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

① Bitreorganization()

F(X0, X1, X2)

③ LFSRWithWorkMode()

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

① Bitreorganization()

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

③ LFSRWithWorkMode()

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

2.1.4 安全性分析

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

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

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

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

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

在猜測過程中,猜測的位置是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比特。此時搜索復(fù)雜度為O(2126 ),而其窮盡搜索復(fù)雜度為O(2128 ),提高了效率。

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

主站蜘蛛池模板: 高要市| 桑植县| 集安市| 油尖旺区| 保靖县| 吉首市| 红桥区| 高唐县| 霍城县| 乌拉特中旗| 崇州市| 利津县| 疏勒县| 宣城市| 萨迦县| 顺昌县| 晋宁县| 巨野县| 普兰县| 辽源市| 衡阳县| 太原市| 华容县| 灵台县| 平定县| 于都县| 东兰县| 临洮县| 深水埗区| 漳州市| 漳州市| 栾川县| 林甸县| 容城县| 古交市| 志丹县| 紫金县| 固始县| 甘洛县| 双峰县| 南陵县|