1

我的设备不支持完整的 3DES (EDE)。如何使用标准 DES 模拟一个?加密方式为CBC。

4

3 回答 3

4

您首先选择三个彼此不相关的独立 DES 密钥。

您需要将 DES 置于 ECB 模式,而不是 CBC 模式。您还需要确保每个加密和解密操作仅在 64 位块上完成,仅此而已。填充方案等将导致实现中的漏洞,并且将导致通过蛮力比对每个密钥的蛮力更快地发现块内容。

使用第一个密钥,加密您的明文。使用第二个密钥解密该值。使用第三个密钥加密完整块的值。它看起来像这样:

Encrypt(k3, Decrypt(k2, Encrypt(k1, plaintext)))

解密是另一种方式,看起来像这样:

Decrypt(k1, Encrypt(k2, Decrypt(k3, ciphertext)))

当您使用 3DES 加密您的块时,您需要应用您的操作模式,如 CBC 或 CTR,并在需要时应用填充。

当心。

于 2012-04-20T12:25:58.900 回答
1

块模式加密

您所做的是将大小为 128 位(16 字节)或 168 位(24 字节)的密钥分别分成两块或三块。因此,对于 16 字节的密钥 K,您将有两个密钥 Ka 和 Kb,对于 24 字节的密钥,您将拥有 Ka、Kb 和 Kc。DES ABC 密钥的有效强度约为 112 位,DES ABA 密钥的有效强度约为 80 位。

要加密 8 字节的单个块(DES 和 3DES 的块大小),您将执行以下加密操作: Cn = E(Ka, D(Kb, E(Kc, Mn))) 其中 Mn 是 n'第 th 块纯文本消息和 Cn 的第 n 块密文。如果您没有 Kc,那么您可以使用 Ka(DES ABC 密钥与 DES ABA 密钥)。

为此,您需要单块 DES 加密,这与 ECB 模式下的单块加密相同,或者使用 CBC 和由 8 字节值 00h 组成的 IV 进行单块加密。

加拿大广播公司

这就是排序的块加密,现在你需要某种加密模式和填充模式。我将在这里解释CBC模式加密,ECB不应用于加密非随机数据。

使用 CBC 模式加密,您可以将向量异或到纯文本。该向量通常只是最后一个 DESede 加密块的输出。由于您没有任何前面的密文,因此您需要使用随机数据自己创建第一个向量。这个向量称为初始化向量或IV。请参阅维基百科以获得清晰的图片。

填充

分组密码模式只允许对完整的纯文本块进行加密。所以你需要某种填充方案。虽然有很多填充模式,但大部分时间都使用 PKCS#5 填充。您应该像这样填充纯文本:使用值为 0Xh 的字节填充,其中 X 是创建完整块所需的填充字节数。X 应该在 1 到 8 之间:换句话说,始终使用 PKCS#5 填充;这使得从纯文本中区分填充字节成为可能。

如果您在在线协议中使用填充,那么您需要防止填充预言攻击。在这种情况下,强烈建议使用某种形式的完整性检查,例如使用单独的密钥在密文上添加 HMAC。

于 2012-04-20T14:20:53.230 回答
0

3DES只是 DES 在明文中使用了 3 次:

ciphertext = E_K3(D_K2(E_K1(plaintext)))
plaintext = D_K1(E_K2(D_K3(ciphertext)))

E_Kn = Encryption with Key number n.
D_Kn = Decryption with Key number n.

因此,您可以仅使用 DES 轻松“模拟”3DES。

在 CBC 模式下,您需要一个 IV 开头,然后将下一个明文块与前一个密文块进行异或。如果您的设备不支持 CBC,那么这也很容易“模拟”。

于 2012-04-20T12:21:50.727 回答