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

1.5 FEAL加密算法

FEAL是由日本NTT電子通信實驗室的A.Schimizu和S.Miyaguchi于1987年提出的一個分組加密算法,采用平衡Feistel結構,幾乎同DES加密算法完全一樣。它的分組長度為64比特,迭代層數為NN=2x, x>1)。密鑰長度有128比特和64比特兩種類型,前者稱為FEAL-NX,后者稱為FEAL-N,當前者的后64比特全為0時,兩者就完全一致了。FEAL加密算法以字節為單位進行運算,便于軟件快速實現。

FEAL加密算法框圖如圖1.5.1所示。

圖1.5.1 FEAL加密算法框圖

明文P同子密鑰KN+1進行模2加后被平分成32比特的左右兩部分L0R 0, L 0L 0R 0作為第一層的輸入,經過N層的迭代過程如下:

Li=Ri-1

Ri=Li-1F(Ri-1, Ki), i=1,2, …, N

對(LN, RN)進行如下變換:

(LN, RN)=(RN, LN)

RN=RNLN

(LN, RN)=(LN, RN)⊕KN+2

LN, RN)即所求的密文。層密鑰K1, K2, …, KN的長度為2字節,KN+1KN+2的長度為8字節,層密鑰的生成規律見1.5.2節。

1.5.1 層函數F

層函數F對2字節的層密鑰和4字節的輸入進行模2加、模256加和循環移位操作后,得到4字節的輸出。記2字節的層密鑰為(β0, β1),4字節的輸入為(α0, α1, α2, α3),則層函數F的4字節輸出(c0, c1, c2, c3)為:

Z1=α1β0α0

Z2=α2β1α3

c0=S0(α0, c1)

c1=S1(Z1, Z2)

c2=S0(Z2, c1)

c3=S1(α3, c2)

式中,S0S1為兩個S盒,它們的輸入為2字節,輸出為1字節。這兩個S盒分別由下面兩個公式生成(其中“<<<”表示循環左移位):

S0(X1, X2)=[(X1+X2)mod 256]<<<2

S1(X1, X2)=[(X1+X2+1)mod 256]<<<2

在程序實現中可以把整個層函數F看成一個48比特輸入、32比特輸出的非線性S盒。

1.5.2 層密鑰生成規律

先介紹密鑰K為128比特的情形。由128比特的密鑰K生成KN+2個層密鑰是通過(N/2+4)層的迭代過程來完成的,如圖1.5.2所示。

圖1.5.2 FEAL加密算法的層密鑰生成框圖

將輸入密鑰K平分成64比特的左右兩部分KLKR,又將KL平分成32比特的左右兩部分A0B0,將KR平分成32比特的左右兩部分KR1KR2,經過(N/2+4)次迭代過程(其中“>>>”表示循環右移位):

Ar=Br-1

Br=f(Ar-1, Br-1QrAr-2)

K 2 r-1=Br>>>16

K2 r=Br&0xffff, r=1,2, …, N/2+4

KN+1=KN+1KN+2KN+3KN+4

KN+2=KN+5KN+6KN+7KN+8

r=1時,定義Ar-1=0。

QrKR來決定,即

f 函數(DES加密算法的核心)和層函數 F(層函數)非常相似,它的輸入為8字節,輸出為4字節。記輸入的8字節為(α0, α1, α2, α3, β0, β1, β2, β3),輸出的4字節為(f0, f1, f2, f3),則f函數為:

f1=α1α0

f2=α2α3

f1=S1(f1, f2β0)

f2=S0(f2, f1β1)

f0=S0(α0, f1β2)

f3=S1(α3, f2β3)

S0S1同層函數F中的S0S1

當輸入密鑰K為64比特時,在尾部補64個0,即可用上面的方法來生成層密鑰,此時KR全為0, Qr也全為0。

FEAL加密算法的脫密過程和加密過程一致。

主站蜘蛛池模板: 遵义市| 商都县| 连平县| 常山县| 屯留县| 信阳市| 东阳市| 巴马| 茂名市| 安仁县| 临安市| 沁源县| 崇州市| 成武县| 新宾| 广水市| 嘉善县| 罗平县| 北安市| 比如县| 沂水县| 平罗县| 台州市| 锡林浩特市| 古田县| 白玉县| 台南市| 柳河县| 上杭县| 安陆市| 景谷| 鄂伦春自治旗| 贵港市| 桂林市| 屯昌县| 富顺县| 金乡县| 九寨沟县| 汉川市| 成武县| 镇赉县|