Encryption 仅使用DES模拟3DES EDE

Encryption 仅使用DES模拟3DES EDE,encryption,encryption-symmetric,des,3des,Encryption,Encryption Symmetric,Des,3des,我的设备不支持完整的3DE(EDE)。如何使用标准DES模拟一个?加密模式为CBC。仅在明文上使用DES三次: 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即可轻松“模拟”3DE 在CBC模式下,您需要一个

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

仅在明文上使用DES三次:

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即可轻松“模拟”3DE

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

仅在纯文本上使用DES三次:

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即可轻松“模拟”3DE


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

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

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

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

加密(k3,解密(k2,加密(k1,明文)))

解密是另一种方式,如下所示:

Decrypt(k1,Encrypt(k2,Decrypt(k3,密文)))

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


小心。

首先选择三个相互无关的独立DES键

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

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

加密(k3,解密(k2,加密(k1,明文)))

解密是另一种方式,如下所示:

Decrypt(k1,Encrypt(k2,Decrypt(k3,密文)))

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

小心。

块模式加密 您要做的是将大小为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块,Cn是密文的第n块。如果您没有Kc,则可以使用Ka(DES ABC键vs DES ABA键)

为此,您需要一个单块DES encrypt,它与ECB模式下的单块加密相同,或者使用CBC和一个包含8个字节(值为00h)的IV的单块加密相同

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

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

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

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

块模式加密 您要做的是将大小为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块,Cn是密文的第n块。如果您没有Kc,则可以使用Ka(DES ABC键vs DES ABA键)

为此,您需要一个单块DES encrypt,它与ECB模式下的单块加密相同,或者使用CBC和一个包含8个字节(值为00h)的IV的单块加密相同

CBC 这就是块加密排序,现在需要某种加密模式