Blowfish加密算法的雪崩效应研究

2024-02-09 00:00:00李莹谌玉霞
电脑知识与技术 2024年36期
关键词:海明雪崩明文

在当今云服务与移动互联发展的数字化时代,信息安全成为制约行业信息化发展的重要因素,数据加密作为保障信息安全的核心技术,不断发展与演进。目前国际上使用的主流对称加密算法主要有DES、AES、3DES、IDEA等,Blowfish算法也因其高安全性和效率而被广泛应用于各种加密实践中。雪崩效应是评价加密算法优劣的重要标准[1],它是指在数据加密过程中,输入的微小变化会导致输出发生巨大的变化。雪崩效应能够使攻击者难以通过分析密文来获取密钥及明文信息,因此,对Blowfish算法的雪崩效应进行深入研究具有重要的理论和实际价值。

1 Blowfish 算法原理

Blowfish算法是一种基于Feistel网络的对称密钥分组加密算法,由Bruce Schneier于1994年设计,用来替代DES算法。该算法不受商用限制,任何人可以自由使用。Blowfish使用64位数据块和可变长度的密钥,可以快速高效地加解密大批量数据,其安全性在于复杂的子密钥生成和多轮计算操作过程。

算法将明文分成固定长度的分组(通常为64位) ,然后使用密钥对每个分组进行加密操作。算法主要包括密钥扩展和数据加密两个阶段[2]。在密钥扩展阶段,根据用户提供的密钥生成一系列子密钥,用于后续的加密过程。这个过程是算法安全性的基础之一,确保密钥的复杂性和随机性能够充分扩散到整个加密过程中。在数据加密阶段,通过一系列的加密函数和子密钥,对明文分组进行16轮Feistel替代和置换操作。这些操作相互交织,使得明文的每一位都能对密文产生较大影响,从而实现良好的加密效果。

1.1 密钥扩展

Blowfish算法的密钥大小为32~448位,即1~14 个字,每个字由32位组成,密钥存储在一个K数组中,最大可以包含14个32位元素。算法的P盒(PBox) 是一个计算盒子(Permutation Box) ,由18个32位的项构成,可用一维数组P表示。S盒(SBox) 是动态替换盒子(Substitution Box) ,共有4个,每个S盒含有256个32 位的项,可用二维数组S表示。

在扩展密钥之前,首先对PBox和SBox中的数据进行初始化[3],可以使用常量π的小数部分(16进制形式) ,先初始化PBox,再初始化SBox。然后用K密钥数组对PBox和SBox进行变换,得到下一步信息加密所要用的Key_PBox和Key_SBox,Key_PBox与PBox结构一致,Key_SBox与SBox结构一致。步骤如下:

1) 用SBox中的初始数据填充Key_SBox。

2) P[0]与K[0]进行异或运算,用异或的结果填充Key_PBox;P[1]与K[1]进行异或运算,如此一直运算到K密钥数组用完,然后重复使用K,直到把Key_PBox 填充完毕。

3) 利用Key_SBox 和Key_PBox,在一个64位全0 数据块上,用Blowfish算法计算,输出一个64位的密文,将得到的密文分成两个32 位的块来替换Key_PBox[0]和Key_PBox[1],生成新的Key_PBox,增加一个循环标志i=0。

4) 利用新的Key_PBox和Key_SBox,用Blowfish算法加密上一步生成的64位密文,依然用输出的64位密文分成两部分来替代Key_PBox[i+2]和Key_PBox[i+3],令i=i+2。

5) 循环执行4) ,直到Key_PBox全部被替换。

用Key_PBox[16]和Key_PBox[17]做首次输入(相当于上面的全0的输入) ,使用类似的方法,再经过512轮计算,替换掉Key_SBox中的所有元素。

经过以上计算,得到了将要参与数据加密的扩展密钥组Key_PBox 和Key_SBox,将密钥扩展成总长4 168字节(33 344位) 的子密钥数组[4]。

1.2 信息加密

信息加密就是把待加密的64位信息分成32位的左右两部分,分别记为XL和XR。第一轮计算用XL与Key_PBox[0]做异或操作,作为下一轮计算的右侧32位数据;XL与Key_PBox[0]的异或操作结果经过F 函数的运算,与XR做异或操作,作为下一轮计算的左侧32 位数据。按照以上方法进行16 轮计算,最后Key_PBox[17]与上一轮计算结果的左侧32位数据做异或操作,作为密文的左32位数据,Key_PBox[16]与右侧32位数据做异或操作,作为密文的右32位数据,合并左右两部分数据得到输出密文。如图1所示。

算法中的F函数需要用到4个SBox,每个SBox中有256个32位的数据,运算过程如下:

1) 将输入的32位数据X分割成4部分a,b,c,d,每部分8位数据,依次作为四个SBox的输入。

2) 输入的a、b、c、d作为地址,分别从相应的SBox 中找到该地址下标中存放的32位数据并取出。

3) 把取出的四个数据进行加运算和异或运算,得到输出。

2 雪崩效应的理论分析

2.1 定义与衡量标准

雪崩效应是指在加密算法中,当输入(明文或密钥) 发生微小变化时,输出(密文) 应发生尽可能大的变化,其衡量标准通常采用海明距离。

海明距离(Hamming Distance) 是用于衡量两个等长二进制串(或字符串) 之间差异程度的度量,它计算的是两个串在相同位置上不同比特的数量。例如,二进制串a=11111和b=11010之间的海明距离为2,因为有两个位置上的数据不同。

2.2 Blowfish 算法中雪崩效应的产生机制

1) 复杂的加密函数。算法的S盒中的加密函数包含多个非线性操作,这些操作能够将输入的微小变化扩散到整个输出中。例如,S盒通过查找表的方式将输入的8位1个字节数据映射为32位的多个字节数据,这种非线性映射能够有效地破坏输入与输出之间的线性关系,从而实现雪崩效应。

2) 多轮加密结构。Blowfish算法采用多轮加密的方式,每一轮都对上一轮的输出进行进一步处理。在每一轮中,明文和密钥与子密钥异或、通过S盒和P盒进行混合和变换。这种多轮结构使得输入的微小变化能够在每一轮中不断积累、传播和扩大,最终导致密文发生不可预测的变化,从而实现良好的雪崩效应。

3 程序实现与仿真

算法实现:在Windows 10操作系统上,用VisualC++实现Blowfish算法。

首先选择一组长度为64位的二进制数据作为基准明文(MS) ,然后由系统自动生成64 位基准密钥(KS) 。第一步,用基准密钥(KS) 对基准明文(MS) 进行加密操作,得到基准密文(ES) ;第二步,依次逐位改动基准明文(MS) 中的1位,得到修改后的明文(MC) ,再次用基准密钥(KS) 加密MC,得到修改后密文(EC) ,将EC与ES逐位进行对比计算,得到两者的海明距离,然后将得到的64个海明距离求平均值;将EC与MC逐位对比计算,得到修改后的密文与其对应的明文之间的海明距离HDM。模拟计算结果如图3所示。第三步,每次改动基准密钥(KS) 中的一位,得到修改后的密钥(KC) ,用修改后的密钥(KC) 对基准明文(MS) 进行加密,得到修改后的密文(EK) ,将EK与ES逐位进行对比计算,得到两者的海明距离,然后将得到的64个海明距离求平均值;将EK与KC逐位对比计算,得到修改后的密文与其对应的密钥之间的海明距离HDK,如图4所示。

第四步:选择不同长度的密钥,重复第二步,记录程序运行结果如表1所示。

4 程序运行结果分析

4.1 明文变化对密文及密钥变化对密文的影响

结果显示,当明文或密钥的某一位发生变化时,密文与基准密文的平均海明距离约为32位(分组长度64位的50%) 。这表明Blowfish算法对明文的微小变化或密钥的变化具有很强的敏感性,能够产生较大的密文变化,符合雪崩效应的预期。程序运行结果也表明,即便原始密钥只有32位,在雪崩效应方面也与64 位直至448位密钥不相上下,用户可以根据实际需求选择合适的密钥长度[5],以平衡安全性和性能。较长的密钥提供更高的安全性,但可能会导致加密和解密速度降低。

4.2 密文与明文及密文与密钥的相关性分析

密文与明文,密文与密钥之间的平均海明距离也约为32位,这表明密文与密钥之间、密文与明文之间没有明显的线性关系。这使得攻击者难以通过分析密文与密钥之间的关系来推测密钥信息,提高了算法的安全性。

5 结论

通过对Blowfish算法的雪崩效应进行理论分析和程序模拟仿真计算,可以得出以下结论:Blowfish算法具有良好的雪崩效应。雪崩效应使得攻击者难以通过分析密文与明文或密钥之间的关系来获取有用信息,从而有效地抵抗了多种密码分析攻击,如差分分析、线性分析等。在实际应用中,需要合理选择密钥长度和使用加密模式,以确保信息的安全性。

总之,Blowfish算法的雪崩效应为信息安全提供了重要的保障,对于其他密码算法的研究和设计,也可以借鉴Blowfish算法中雪崩效应的实现机制,提高算法的安全性和抗攻击能力。此外,由于Blowfish算法的64位分组块较小,可以通过扩展加密数据分组块的长度,改进S盒的计算方法等,进一步挖掘Blowfish 算法的潜力,以期获得性能更好的加密算法,为构建更加安全可靠的信息系统提供有力支持。

猜你喜欢
海明雪崩明文
雪崩大危机
怎样当好讲解员
雪崩时,没有一片雪花是无辜的
The shocking disappearance of flights
奇怪的处罚
奇怪的处罚
四部委明文反对垃圾焚烧低价竞争
男孩向前冲
故事林(2015年5期)2015-05-14 17:30:36
男孩向前冲
故事林(2015年3期)2015-05-14 17:30:35