首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >仅使用DES仿真3DES EDE

仅使用DES仿真3DES EDE
EN

Stack Overflow用户
提问于 2012-04-20 20:17:05
回答 3查看 1.2K关注 0票数 1

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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,并在需要时应用填充。

注意。

票数 4
EN

Stack Overflow用户

发布于 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。

票数 1
EN

Stack Overflow用户

发布于 2012-04-20 20:21:51

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

代码语言:javascript
运行
复制
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,那么这也很容易被“模拟”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10246083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档