密码学 - Blowfish 算法



Blowfish 加密是一种对称密钥分组密码,常用于密码哈希、VPN 和文件加密。自 1993 年推出以来,由于其高效的加密和解密操作,这种加密方法获得了普及。但是,最近出现更安全、更先进的算法,例如 AES,正在逐渐取代 Blowfish。

Blowfish 是一种 64 位分组密码,使用对称加密和密钥长度最长可达 448 位。它由 Bruce Schneier 于 1993 年创建,旨在取代过时的 DES(数据加密标准)和 IDEA(国际数据加密算法)加密方法。

虽然其普及度最近有所下降,但 Blowfish 以其易用性和效率而闻名。它正在被更新、更强大的加密方法(如高级加密标准 (AES))所取代。

Blowfish 的特点

Blowfish 算法的一些主要特点如下:

  • 分组密码 - Blowfish 使用对称密钥的分组密码技术加密数据,产生 64 位的分组加密。
  • 对称密钥算法 - Blowfish 使用相同的对称加密密钥对数据进行加密和解密。
  • 不同的密钥长度 - Blowfish 提供从 32 位到 448 位不等的密钥长度。密钥越长,数据越安全。但是,处理更长的密钥通常需要更多资源和时间。
  • Feistel 密码 - Feistel 密码结构将明文分成两半,并使用一系列数学运算独立地对每一半进行混淆。

Blowfish 的工作原理

Blowfish 使用 SP 网络;必须先初始化替换盒 (S-box) 和置换盒 (P-box)。有四个 32 位 S-盒,每个有 256 个条目,以及八个 32 位子密钥的 P 数组。

Blowfish Algorithm
  • 步骤 1 - 首先,我们将 64 位明文分成两个相等的块 L 和 R,每个包含 32 位。
  • 步骤 2 - 我们在接下来的步骤中开始的 16 个加密循环中的每一个都执行以下操作:
    • 现在,将 L 与 P 数组的第一个成员 (P1) 进行异或运算。
    • 然后将 R 与 F 进行异或运算,其中 F 是 L 的函数,并使用构成 S-盒的四个块。以下是 F 函数的完整总结。
    • L 和 R 交换后,循环的下一个迭代开始。
  • 步骤 3 - 循环完成后,再次交换 L 和 R。
  • 步骤 4 - 将 R 与 P17 进行异或运算,将 L 与 P18 进行异或运算,以获得最终两个未使用的 P-盒条目 (P17 & P18)。
  • 步骤 5:最后一步将 L 和 R 组合起来得到密文。

Blowfish 加密

Blowfish 是一种对称密钥分组密码,它使用相同的密钥对数据进行加密和解密。Blowfish 速度快、效率高,主要是因为它比其他密码方法更简单。虽然在达到最高级别的数据安全方面存在一些可能的风险,但这些风险不容忽视。

以下是 Blowfish 加密技术的详细描述:

  • 密钥扩展 - Blowfish 使用的初始组件是秘密密钥,其长度可以在 32 位到 448 位之间。然后使用 P 数组和 S-盒预计算生成并扩展加密密钥以生成多个子密钥。
  • 子密钥生成 - 定义扩展密钥的 64 位块被分成两个 32 位块。这些组件与一些预定值结合起来,创建一组新的子密钥。
  • 数据加密 - 这就是令人兴奋的部分开始的地方。这两个 32 位段被加密十六次。每一轮都涉及一组复杂的置换和替换(异或运算、加法和 S-盒查找)。
  • 处理后 - 经过 16 轮后,重建 32 位乱序位以形成 64 位密文块。

Blowfish 解密

在 Blowfish 中,解密是通过反转加密过程来执行的。因此,所有内容都会反转,直到密文转换回明文。

这种 Blowfish 加密方法使用您的私钥来保护您的数据。Blowfish 最好的一点是,如果材料被加密,如果没有原始密钥,则很难解密它。但是,这些 90 年代的技术正在逐渐过时,因为更复杂、更安全的加密方法,如 AES 或 Twofish(Blowfish 的替代品),正在取代它们。

示例

假设将单词“Hi world”使用 Blowfish 加密。所涉及的步骤如下:

  • 输入“Hi world”最初由 64 位或 8 个字节组成,包括七个字母和一个空格。
  • 输入由 32 位组成。“Hi w”的左 32 位与 P1 进行异或运算以产生 P1,即密钥扩展的结果。
  • 之后,P1 将 32 位分成 4 个字节,并使用转换函数 F(F In)将它们发送到四个 S-盒中的每一个。
  • 第三个 S-盒中的第三个值与前两个 S-盒中的前两个值的总和进行异或运算。
  • 将此结果添加到第四个 S-盒的输出时,会产生 32 位输出。
  • 为了创建输出 F1',将 F In 的输出与输入消息“orld”的正确 32 位进行异或运算。
  • 然后用 F1' 替换消息的左半部分,用 P1' 替换右半部分。
  • 对于总共 16 轮,将对每个后续的 P-数组成员执行相同的过程。
  • 16 轮后,将最终两个 P-数组元素 P17 和 P18 与输出 P16' 和 F16' 进行异或运算。之后,再次将它们组合起来创建输入消息的 64 位密文。

Blowfish 的优点

Blowfish 是当前使用的最快分组密码之一。它使用对称加密密钥对数据进行加密以创建密文。Blowfish 在创建三十多年后仍然需求量很大,因为它提供了以下好处:

  • 比DES和IDEA算法更省时有效。
  • 无需授权,任何人都可以免费使用。
  • 大型微处理器即使在加密前的复杂初始化步骤下,也能高效地处理数据加密过程。
  • 为用Java开发的程序和应用提供高水平的安全保障。
  • 允许安全的用户身份验证以进行远程访问,并为备份工具提供安全访问。

Blowfish的缺点

使用Blowfish加密有一些缺点,包括:

  • 更改密钥会改变速度。
  • 完成主要例程需要很长时间。
  • 由于其64位短块大小,该技术容易受到生日攻击(一种蛮力攻击)的影响。
  • 每个新密钥的预处理需要4 KB的文本,这会降低其速度,并使其无法用于各种用途。
广告