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

1.2 Lucifer加密算法(DES前身)

Lucifer加密算法是美国IBM公司Watson实验室在1970年研制的用于数据加密的分组密码体制。

Lucifer加密算法的输入分组、输出分组和密钥分组均为128比特(16字节)。Lucifer是乘积密码,加密变换由16层(Round)变换迭代而成,每层都对输入进行C-I-D变换:C代表混乱(Confusion), I代表密钥加扰(Key Interruption), D代表扩散(Diffusion)。

输入消息分组(明文分组)的16字节(128比特)分成左半组和右半组,层与层之间的左、右半组进行变换,如图1.2.1所示。

图1.2.1 Lucifer加密算法

在每一层中,输入的8字节要经过C-I-D变换,如图1.2.2所示。

图1.2.2 C-I-D变换

(1)经过S0S1代替。8个消息字节M0, M1, …, M7,每个字节的左4比特与右4比特分别进入S1S0进行代替,在第i层,由层密钥K(i)(1≤i≤16)的第一个字节的8个比特(密钥比特)分别控制8个消息字节选择S0S1。当密钥比特为0时,对应的消息字节的左4比特进入S1,右4比特进入S0;当该密钥比特为1时,对应的消息字节的左4比特进入S0,右4比特进入S1。第1层迭代时,层密钥,控制字节的第0,1,2, …,7比特分别控制M7, M6, …, M0,以选择S0S1。在第i层代替时,层密钥K(i)如表1.2.1所示。控制字节为表中第1列所指的密钥字节。

S0S1是输入为4比特、输出为4比特的非线性变换,把输入、输出的4比特都看成0~15的数,S0S1可看成0,1, …,15到0,1, …,15的一个16元置换。

(2)与密钥字节进行xor运算。经过S0S1代替后的8字节与指定的密钥字节进行xor运算(对应比特分别进行模2加)。

(3)经P置换后调整比特位置。经过与密钥字节进行xor运算后的64比特进行图1.2.2中的P置换,即新的64比特的第0比特是原来的第10比特,第1比特是原来的第21比特,…,第63比特是原来的第30比特。

(4)与左半组(64比特)分别进行xor运算。经P置换后的64比特分别与左半组的64比特进行模2加,得到的新的64比特为C-I-D变换的输出。

表1.2.1 层密钥

脱(解)密实际上是将密码分组(128比特)作为输入,从第16层到第1层进行逆变换,每层的左半组与右半组交换位置,C-I-D变换也倒过来,按密钥从K16, K15, …, K1,从第16层到第1层,密文分组从第16层进行到第1层,即可得到明文分组。

作为DES加密算法的前身,Lucifer加密算法与DES加密算法有许多相似的地方。在加密时,明文分组都要经过16层变换,明文分组分成左右两个半组交替进行变换,并相互渗透。每层的变换都通过S盒来进行混乱,通过与密钥字节进行模2加来实现加扰,通过与另一个半组进行模2加来实现扩散。

Lucifer加密算法通过左右两个半组相互交替进行多层混乱-加扰-扩散,从而实现对明文分组的加密,使得密文分组的每个比特与明文分组的每个比特都有关,尽管破译者得到密文也不易分析。与DES加密算法比较,Lucifer加密算法中每层的变换比DES加密算法简单得多。例如,S盒只有2个,每个只含一个置换,没有扩张变换。另外,DES加密算法先与层密钥加乱,再经S盒代替;而Lucifer加密算法先经S盒代替,再与层密钥加乱。Lucifer加密算法的输入、输出和密钥分组长均为128比特,比DES加密算法长得多,能有效地抵抗穷举破译法。