Encryption 仅使用DES模拟3DES EDE
我的设备不支持完整的3DE(EDE)。如何使用标准DES模拟一个?加密模式为CBC。仅在明文上使用DES三次: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模式下,您需要一个
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
这就是块加密排序,现在需要某种加密模式