Cryptography 初始化向量在DES中的应用

Cryptography 初始化向量在DES中的应用,cryptography,des,initialization-vector,Cryptography,Des,Initialization Vector,假设我们必须使用DES(或三重DES)加密某些数据。如果使用的IV是8个字节,设置为“0”(即IV是一个常量字节[],全部设置为0x00),可以吗?或者说,这和一开始就不使用静脉注射是一样的吗?这是不好的。任何硬编码IV都意味着相同的纯文本将始终加密为相同的密文。这正是静脉注射的目的。如果您使用的模式允许使用IV,那么一个非常好的方法是随机生成IV,在加密所有要加密的纯文本块时使用它,然后将未加密的IV前置到密文中 许多人担心“那么,一个潜在的攻击者不会看到静脉注射吗?”答案是肯定的,但这并不重

假设我们必须使用DES(或三重DES)加密某些数据。如果使用的IV是8个字节,设置为“0”(即IV是一个常量字节[],全部设置为0x00),可以吗?或者说,这和一开始就不使用静脉注射是一样的吗?

这是不好的。任何硬编码IV都意味着相同的纯文本将始终加密为相同的密文。这正是静脉注射的目的。如果您使用的模式允许使用IV,那么一个非常好的方法是随机生成IV,在加密所有要加密的纯文本块时使用它,然后将未加密的IV前置到密文中

许多人担心“那么,一个潜在的攻击者不会看到静脉注射吗?”答案是肯定的,但这并不重要。只有钥匙需要保密。IV不需要保密,即可显著增强加密的安全性。然而,它确实需要是随机的

请注意,这不足以阻止主动攻击者。但这足以阻止任何被动窃听者

编辑:好的,我将解释为什么这不能阻止一个活跃的攻击者,因为我能回忆起这次攻击。对于这个解释,我将考虑密码块链接(CBC),因为它是如此普遍使用。你必须将这种解释外推到其他模式。因此,密码块链接将消息的第一个块与IV异或,然后像在ECB模式下那样加密该块。该加密的输出是密文块1,但现在它在加密该块之前与消息块2异或。该输出与后面的块进行异或运算,直到结束

现在要解密,您需要像在ECB模式中一样解密密文的第一个块,然后使用加密中使用的相同IV对其进行异或。这将产生纯文本,因为您总共对IV进行了两次加密、解密和异或运算,这两个异或相互抵消。现在取密文块1(注意,不是纯文本),在解密块2之后,用前面的密文块对输出进行异或

好的,所有这些只是简单回顾一下CBC是如何工作的。对于任何块,从消息到密文再到消息的往返过程都是XOR加密解密XOR,两个XOR相互抵消。所以现在让我把这个非常简单,想象一个超级愚蠢的例子,其中一大笔钱将被汇入一个帐户。除了账号之外,所有的细节都安排好了,现在需要这个账号

假设Alice将该账号发送给Bob,为了不失去细节中的解释重点,假设账号正好是10位十进制数字,因此可以放在一个AES块中,并留出几个字节的填充空间。她将要汇款的账号加密为:1234567890,将加密输出与IV进行异或运算,并将IV和加密账号发送给银行的Bob进行处理

除了伊芙在操作爱丽丝和鲍勃之间的路由器。假设她知道Alice计划将钱电汇到1234567890账户,并根据有根据的猜测这是加密块的内容,她可以窃取电汇

要做到这一点,她需要原始IV和1234567890的XOR。然后她用自己的账号45645660对结果进行XOR运算。她用这个最终输出替换了原来的IV,并保持密码文本块不变,将其转发给Bob。Bob解密该块,并得到与原始密文块完全相同的结果。除了现在,当他用IV进行XOR运算时,他不会得到带有填充的1234567890作为纯文本;他得到了45645660。他根据收到的指示(但不是爱丽丝发出的指示)将钱转移给伊芙

只要攻击者认为收件人端的一些乱码纯文本是可以接受的,那么对较长的邮件也可以进行同样的篡改。我不会在这里解释原因,但如果你仔细想想,我可以让块X解密成我喜欢的任何东西,只要我能正确猜出原始纯文本,并且我对块X-1解密成随机噪声没问题


使用MAC(如一些众所周知的协议,如SSL、TLS、IPSec-do)是增强原始CBC对此攻击的漏洞的一种方法。通常建议您只使用其中一种协议,除非有充分的理由不能这样做。

谢谢,这是一个很好的解释。另外,你能告诉我为什么对活跃的攻击者来说这还不够吗?如果可以的话,请编辑你的答案。哦,我要说的是,上述攻击并不是普通CBC唯一易受攻击的攻击。例如,重放攻击要简单得多,而且可能具有同样的破坏性。如果一个人想要实现他们自己的加密,有很多东西需要保护。很容易出错。谢谢@wds,这真是一个很好的解释。无论如何,我将在我的实现中使用SSL上的MAC身份验证。