我的设备不支持完整的3DES (EDE)。我如何使用标准的DES来模拟一个?加密方式为CBC。
发布于 2012-04-20 20:25:59
您首先选择三个独立的DES密钥,它们彼此之间没有任何关系。
您需要将DES设置为ECB模式,而不是CBC模式。您还需要确保每个加密和解密操作只在64位块上完成,而不是更多或更少。填充方案等将导致实现中的漏洞,并将导致通过暴力破解块内容的速度快于对每个密钥的暴力破解。
使用第一个密钥加密您的明文。使用第二个密钥解密该值。使用第三个密钥,加密整个块的值。它看起来是这样的:
Encrypt(k3, Decrypt(k2, Encrypt(k1, plaintext)))
解密是另一种方式,看起来像这样:
Decrypt(k1, Encrypt(k2, Decrypt(k3, ciphertext)))
当您使用3DES加密块时,您需要应用您的操作模式,如CBC或CTR,并在需要时应用填充。
注意。
发布于 2012-04-20 22:20:53
块模式加密
您要做的是将大小为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,D(Kb,E(Kc,Mn ),其中Mn是明文消息的第n个块,Cn是密文的第n个块。如果你没有Kc,那么你可以使用Ka (DES ABC密钥vs DES ABA密钥)。
为此,您需要一个单块DES加密,它与ECB模式中的单块加密相同,或者使用CBC和一个由8个字节组成的IV加密。
CBC
这就是块加密排序,现在你需要某种加密模式和填充模式。我将在这里解释CBC模式加密,ECB不应该用于加密非随机数据。
使用CBC模式加密时,可以将向量与纯文本进行异或运算。向量通常只是最后一个DESede加密块的输出。由于之前没有任何密文,因此需要使用随机数据自己创建第一个向量。此向量称为初始化向量或IV。有关清晰的图像,请参阅wikipedia。
填充
块密码模式仅允许加密纯文本的完整块。因此,您需要某种填充方案。虽然有许多填充模式,但大多数时间都使用PKCS#5填充。您应该像这样填充纯文本: pad with bytes valued 0Xh,其中X是创建完整块所需的填充字节数。X应该在1和8之间:换句话说,总是使用PKCS#5填充;这使得可以区分填充字节和纯文本。
如果您在联机协议中使用填充,则需要防止填充oracle攻击。在这种情况下,强烈建议使用某种形式的完整性检查,例如使用单独的密钥在密文上添加HMAC。
发布于 2012-04-20 20:21:51
3DES只是在明文上使用了三次:
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,那么这也很容易被“模拟”。
https://stackoverflow.com/questions/10246083
复制相似问题