des_modes
名称
des_modes - OpenSSL 中的 DES 及其他加密算法的变体
描述
OpenSSL 的几种加密算法可以在多种模式下使用。这些模式用于以类似于流密码的方式使用分组密码,以及其他用途。
概述
电子密码本模式 (ECB)
通常,它以函数 algorithm_ecb_encrypt() 的形式出现。
一次加密 64 位。
块的顺序可以重新排列而不会被检测到。
相同的明文块始终产生相同的密文块(对于相同的密钥),使其容易受到“字典攻击”。
错误只会影响一个密文块。
密码分组链接模式 (CBC)
通常,它以函数 algorithm_cbc_encrypt() 的形式出现。请注意,des_cbc_encrypt() 并不是真正的 DES CBC(它不更新 IV);请改用 des_ncbc_encrypt()。
一次加密 64 位的倍数。
只要使用相同的密钥和起始变量加密相同的明文,CBC 模式就会产生相同的密文。
链接操作使密文块依赖于当前和所有前面的明文块,因此块不能重新排列。
使用不同的起始变量可以防止相同的明文加密成相同的密文。
错误将影响当前和后续的密文块。
密码反馈模式 (CFB)
通常,它以函数 algorithm_cfb_encrypt() 的形式出现。
一次加密 j 位(j <= 64)的数字。
只要使用相同的密钥和起始变量加密相同的明文,CFB 模式就会产生相同的密文。
链接操作使密文变量依赖于当前和所有前面的变量,因此 j 位变量被链接在一起并且不能重新排列。
使用不同的起始变量可以防止相同的明文加密成相同的密文。
CFB 模式的强度取决于 k 的大小(当 j == k 时最大)。在我的实现中,始终如此。
选择较小的 j 值将需要更多次遍历加密算法才能处理每个明文单位,从而导致更大的处理开销。
只能加密 j 位的倍数。
错误将影响当前和后续的密文变量。
输出反馈模式 (OFB)
通常,它以函数 algorithm_ofb_encrypt() 的形式出现。
一次加密 j 位(j <= 64)的数字。
只要使用相同的密钥和起始变量加密相同的明文,OFB 模式就会产生相同的密文。此外,在 OFB 模式下,当使用相同的密钥和起始变量时,会产生相同的密钥流。因此,出于安全原因,对于给定的密钥,应仅使用一次特定的起始变量。
没有链接操作使 OFB 更容易受到特定攻击。
使用不同的起始变量值可以防止相同的明文加密成相同的密文,方法是产生不同的密钥流。
选择较小的 j 值将需要更多次遍历加密算法才能处理每个明文单位,从而导致更大的处理开销。
只能加密 j 位的倍数。
OFB 操作模式不会扩展结果明文输出中的密文错误。密文中出现的每个比特错误只会导致解密的明文中出现一个比特错误。
OFB 模式不是自同步的。如果加密和解密操作不同步,则需要重新初始化系统。
每次重新初始化都应使用与之前使用相同密钥时使用的起始变量值不同的起始变量值。这样做的原因是,每次从相同的参数生成相同的比特流。这将容易受到“已知明文”攻击。
三重 ECB 模式
通常,它以函数 algorithm_ecb3_encrypt() 的形式出现。
使用密钥 1 加密,使用密钥 2 解密,然后使用密钥 3 再次加密。
与 ECB 加密相同,但密钥长度增加到 168 位。存在一些理论攻击,这些攻击可以用来使有效密钥长度为 112 位,但这种攻击也需要 2^56 个内存块,即使对于 NSA 来说也不太可能。
如果两个密钥相同,则等同于使用一个密钥加密一次。
如果第一个和最后一个密钥相同,则密钥长度为 112 位。存在一些攻击可能会将有效密钥强度降低到略高于 56 位,但这些攻击需要大量内存。
如果所有 3 个密钥都相同,则实际上与普通的 ecb 模式相同。
三重 CBC 模式
通常,它以函数 algorithm_ede3_cbc_encrypt() 的形式出现。
使用密钥 1 加密,使用密钥 2 解密,然后使用密钥 3 加密。
与 CBC 加密相同,但密钥长度增加到 168 位,并具有与三重 ecb 模式相同的限制。
注释
此文本在很大程度上由 Eric Young 在其最初的 SSLeay 文档(OpenSSL 的前身)中撰写。反过来,他将其归因于
AS 2805.5.2
Australian Standard
Electronic funds transfer - Requirements for interfaces,
Part 5.2: Modes of operation for an n-bit block cipher algorithm
Appendix A
另请参阅
版权
版权所有 2000-2017 OpenSSL 项目作者。保留所有权利。
根据 Apache 许可证 2.0(“许可证”)获得许可。除非符合许可证,否则您不得使用此文件。您可以在源代码分发中的 LICENSE 文件或 https://www.openssl.org/source/license.html 中获取副本。