块密码与流密码的区别

2025年03月17日 | 阅读 9 分钟

块密码流密码对称密钥密码家族的成员,本质上是将明文直接转换为密文的加密技术。

在本文中,我们将讨论块密码和流密码的特征以及它们之间的区别。

什么是块密码?

Difference Between Block Cipher and Stream Cipher

块密码是一种对称加密技术,我们使用它使用共享的密钥加密固定大小的数据块。加密过程中,我们使用明文密文是产生的加密文本。它使用相同的密钥来加密明文密文

块密码以固定大小处理数据块。通常,消息的大小会超过块的大小。因此,长消息被分成多个顺序消息块,并且密码一次处理一个块。

借助共享密钥,块密码一次处理一个块而不是一个比特地加密和解密其输入。由于块大小是固定的,因此不需要填充。它是一种对称算法。在加密过程中,它使用共享密钥将文本输入转换为密文。在解密过程中,它使用相同的密钥将密文恢复为原始明文。输出和输入的长度相同。

  • 块密码算法的流行变体包括数据加密标准 (DES)、TripleDES高级加密标准 (AES)。
  • 流密码使用共享密钥,一次处理一个比特的输入,这是块密码的对应项。
  • 块密码算法的替代方案包括公钥密码学非对称密码学。此算法使用公钥加密明文,使用私钥解密密文。

块密码有多种操作模式

  • 电子密码本 (ECB) 模式
  • 密码块链接 (CBC) 模式
  • 密码反馈 (CFB) 模式
  • 输出反馈 (OCB) 模式
  • 计数器 (CTR) 模式

这些模式作为块密码的一般过程原则。

1. 电子密码本模式

电子密码本模式以明文形式处理电子密码消息。这是最简单的块密码操作模式。它不会引入任何随机性到密钥流,并且是我们唯一可以用来加密单个比特流的模式。使用密码的密钥和替换字母表,每个明文字符,例如明文字母表中的一个字符,都被转换为密文字符。每个明文块都与其他块分开加密。当明文块仅为8 字节长时,仅使用密码的 8 字节密钥;当明文块为100 字节长时,则使用所有100 字节密钥。

2. 密码块链接模式 (CBC)

在使用CBC 模式加密数据时,每个明文块都与前一个密文组合。由对称算法生成的密文取决于在它之前的数据流中处理过的所有明文块。这是为了确保每个密文块都取决于它之前的所有其他块。在使用密码算法加密数据之前,每个明文块都与前一个密文块进行 XOR(异或)运算。许多安全应用程序使用CBC 模式。例如,安全套接字层/传输层安全在加密通过互联网传输的数据时使用CBC模式。

3. 密文反馈模式 (CFB)

与一次加密预定数量明文的CBC模式不同,有时需要快速地一次加密和发送明文值。CFB也使用IV,类似于CBC。块密码是CFB使用的随机数生成器的一部分。在CFB 模式下,前一个密文块被加密,然后输出与当前明文块进行XOR运算以生成当前的密文块。

4. 输出反馈模式 (OFB)

在某些方面,CBC 和 OFB 模式是相似的,并且可以与任何块密码一起使用。它使用反馈机制;然而,在 OFB 模式下,前一个密文块在加密之前而不是之后与明文进行 XOR 运算。

5. 计数器模式 (CTR)

CTR模式使用块链接加密模式作为构建块。加密数据的过程是通过将明文与一系列伪随机值进行 XOR 运算来完成的,这些值是通过使用反馈函数从密文中生成的;数据被加密。一系列明文块与相应的密文块之间的XOR运算可以用来表示CTR加密过程。

块密码的例子

大多数现代密码套件都基于块密码。使用块密码的几种加密标准协议是

1. 数据加密标准 (DES)

最初,使用56 位对称密钥算法来保护敏感的私人信息。DES由于其长度较短和其他安全问题而被淘汰,但仍被视为一种开创性的加密标准。

2. 高级加密标准 (AES)

它是一种流行的块密码,使用128、192256 位对称密钥以128 位的块对数据进行加密。底层块密码使用替换-置换和传输技术,通过在一系列链接的计算中打乱和替换输入数据来生成密文。AES是一个广泛的加密标准,因为针对其算法的密码分析工作是无效的。

3. Twofish

Twofish是一种加密标准,它使用Feistel 网络、复杂的密钥调度和替换技术来分离密钥和密文。使用密钥长度从128 到 256 位不等的密钥,该标准以128 位的块加密明文数据。

其他加密方案,如3DES、SerpentBlowfish,也使用块密码。

什么是流密码?

Difference Between Block Cipher and Stream Cipher

流密码通过对明文数据进行随时间变化的修改来加密连续的二进制数字串。因此,这种加密方法逐比特工作,利用密钥流为任意长度的明文消息生成密文。密码结合密钥(128/256 位)和随机数(64-128 位)以生成密钥流 - 一个与明文进行XOR运算以生成密文的伪随机数。即使密钥和随机数可以重复使用以维持安全性,密钥流对于每次加密迭代也必须不同。为了构建密钥流,流加密密码会生成一个唯一的随机数(通过使用反馈移位寄存器的一次性数字)。

由于一个比特翻译错误通常不会影响整个明文块,流密码加密算法不太可能导致系统范围的错误扩散。此外,流加密是线性的和连续的,使其更容易和更快速地部署。然而,流密码没有扩散,因为明文的每个数字都映射到一个密文输出。此外,它们不检查有效性,这使得它们容易受到插入攻击。如果黑客破解了加密算法,他们就可以在不被注意的情况下添加或修改加密消息。流密码通常用于加密应用程序中的数据,其中明文的量无法预测,以及在低延迟用例中。

换句话说,流密码是一种加密类型,它使用明文数字和一串伪随机的密码数字。这个伪随机加密数字流逐个二进制数字接收一位。这种加密技术为每个密钥使用无限数量的伪随机密码数字。

状态密码是流密码的另一个名称。“状态密码”一词指的是这样一个系统,其中每个数字的加密取决于密码的当前状态。

流密码的类型

流密码有两种类型

1. 同步流密码

同步流密码中,密钥流块独立于之前的密文和明文消息创建。最流行的流密码模式使用伪随机数生成器生成一串比特,并将其与密钥组合以创建密钥流,然后该密钥流与明文进行XOR运算以生成密文。

2. 自同步/异步流密码

前一个密文块的固定大小(N 位)对称密钥用于通过自同步流密码(也称为密文自动密钥)生成密钥流块。异步流密码可以通过更改密文来检测主动攻击,这会改变后续密钥流中的信息。由于单个数字错误最多只能影响N 位,因此这些密码的错误传播也受到限制。

流密码的例子

以下是流密码的例子

1. River Cipher (RC4)

RC4/ARC4/ARCFOUR是一种快速简单的加密算法,于1987年创建,用于通过使用64 或 128 位长度的密钥来实现逐字节加密。传输层安全、安全套接字层IEEE 802.11 WLAN标准都广泛使用RC4。这种广泛使用的加密方法有多种变体,包括SPRITZ、RC4ARC4A+

2. Salsa20

Salsa20是一种强大、最新的加密密码,它使用扩展函数来创建加密密钥流。Salsa20还依赖于一个核心函数,该函数使用加-旋转-异或(ARX)操作将来自扩展函数的密钥、随机数字和常量向量映射到密钥流。

3. 软件优化加密算法 (SEAL)

SEAL是一种加性二进制流密码,专为具有32 位 CPU和足够RAM的系统设计。加密标准依赖于一个伪随机族,该族使用一个长度增加函数和 160 位密钥将 32 位字符串映射到任意长度的字符串。

PANAMA、Scream、Rabbit、HC-256Grain是一些其他的流密码例子。

块密码与流密码的区别

Difference Between Block Cipher and Stream Cipher
参数块密码流密码
定义块密码是一种通过单独处理每个块来转换明文的加密类型。流密码是一种一次处理明文的一个字节来转换明文的加密类型。
原则它同时使用扩散和混淆原则进行转换(稍后在加密中使用)。流密码仅使用混淆原则进行转换。
解密块密码中,反向加密或解密比流密码更难,因为在这种情况下需要加密更多比特。流密码中,使用XOR进行加密,可以快速将其转换回明文。
实施Feistel 密码是最流行的块密码实现。Vernam 密码是流密码的主要实现。
实施Feistel 密码是最流行的块密码实现。Vernam 密码是流密码的主要实现。
比特转换由于块密码一次转换一个块,它比流密码转换更多的比特,块密码可以转换 64 位或更多。然而,在流密码中,一次只能转换 8 位。
可逆性很难逆转加密文本。它使用 XOR 加密,可以轻松地逆转为明文。
混淆和扩散块密码同时使用混淆和扩散。流密码仅依赖于混淆。
使用的算法模式ECB (电子密码本) CBC (密码块链接)CFB (密码反馈)
OFB (输出反馈)
复杂度简单设计相对复杂
使用的比特数64 位或更多8 位

流密码相对于块密码的优势

以下是流密码相对于块密码的优势

  • 流密码比块密码更快,并且适用于小块和大数据块。
  • 与需要大量内存的块密码不同,因为它们处理大数据块,流密码一次只处理比特。
  • 流密码字节与其它数据块分开加密,而块密码一次加密整个块。
  • 总的来说,流密码在数据量是连续的或未知的情况下(如网络流)效果最好,而块密码在数据量已知的情况下(如文件、数据字段或响应协议)效果更好。

块密码和流密码之间的关键区别

  • 使用块密码时,每个文本块被单独加密。解密文本也类似,一次选择一个块。相比之下,流密码方法一次一个字节地加密和解密文本。
  • 在块密码中,同时使用混淆和扩散,但在流密码中仅依赖于混淆。
  • 在块密码中,使用相同的密钥进行加密,但在流密码中,为每个字节使用不同的密钥。
  • 块密码使用ECB(电子密码本)CBC(密码块链接)算法模式。相反,流密码使用CFB(密码反馈)OFB(输出反馈)算法模式。
  • 在块密码中,典型的块大小在64128 位之间。相比之下,流密码一次转换1 字节(8 位)

下一主题区别