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

1.17 SKIPJACK加密算法

SKIPJACK是一种分组加密算法,其输入、输出分组为64比特,密钥长度为80比特。输入明文(密文)分成4个16比特的字,交替使用A和B两种步进规则,经32次步进(即32层迭代变换)生成密文(明文)。第1~8次步进、17~24次进步按步进规则A进行,第9~16次步进、25~32次步进按步进规则B进行。A和B两种步进规则如图1.17.1所示。

图1.17.1 SKIPJACK算法的两种步进规则

图1.17.1中,w1w4表示4个16比特的字;G依赖的密钥可逆变换,也称为G置换;计数器取值范围1~32,分别用于32次步进。

用上角标i表示第i步进变化后的状态,即用表示明文,表示经 i次步进后的状态,则步进规则A和B可用下列公式来表示。

1.加密

(1)步进规则A如下:

(2)步进规则B如下:

i=0,1, …,31

经上述32次步进后,可得,即密文。

2.脱密

(1)步进规则A的逆运算:

(2)进步规则B的逆运算:

经上述32次步进后,可得,即明文。

G置换依赖于密钥的4层Feistel结构,如图1.17.2所示。

图1.17.2 SKIPJACK加密算法G置换

将80比特的密钥分成10个字节,记为k0k9。将第i步进输入的16比特的字分成高位和低位两个字节,分别记为g1g2,迭代计算如下:

g3=F(g2k4i)⊕g1

g4=F(g3k4i+1)⊕g2

g5=F(g4k4i+2)⊕g3

g6=F(g5k4i+3)⊕g4

Gi(g1g2)=g5g6

式中,“‖”表示两个字节相连接。在k4ik4i+3中,下角进行的是模10加。

类似地有

(Gi)-1(g5g6)=g1g2

式中,gj=F(gj+1k4i+j-1)⊕gj+2, j=4,3,2,1。

G置换中的F函数是8比特的字节非线性代替,如下所示。用高4比特表示行,低4比特表示列,如F(7a)=d6。

SKIPJACK加密算法有类似于DES的四种工作方式,它们是:

输出反馈(OFB)方式:64比特。

密文反馈(CFB)方式:64比特、32比特、16比特、8比特。

电子密本(ECB)方式:64比特。

密文分组链接(CBC)方式:64比特。

例如,电子密本方式(下面所有数值都以十六进制的形式表示,左边为最高比特)。

明文输入为:33221100ddccbbaa。

密钥为:00998877665544332211。

中间步骤如下:

密文输出为2587 cae2 7a12 d300。