密码算法应用实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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加密算法的脱密过程和加密过程一致。