在对发送的第一个块进行加密之前,初始化向量(IV)对纯文本是排他的或与之相反,以防止攻击者获悉正在发送重复的消息块。这项技术通常用于CBC之类的流模式。

我研究了一些问题,这些问题是明确通过IV的安全性。普遍的共识似乎是IV可以安全地以明文方式通过,但是IV应该是随机的以防止某些类型的攻击。对IV使用计数器也很容易受到攻击,应仅使用随机生成的IV。我不太了解这一点,因为声明通过随机IV的原因是不容易猜到。

无论如何,我的问题如下:

发送加密的消息的第一块应该相对容易,但无需任何IV处理。第一个块可以包含IV,然后将其用于消息的所有其余块。由于加密消息中的IV是随机的,因此永远不应有任何重复的第一个块。为什么没有做到这一点,它至少比明文发送IV安全吗?

评论

可以,但是这是一个很大的问题,它可能阻止程序员创建关键的安全漏洞。 +1

“请注意,您的建议归结为将IV放在纯文本之前,然后使用以零表示的IV加密纯文本。也就是说,至少对于CBC模式加密而言”。对于包含IV的第一个块,它根本不会做任何“异或”操作。但是正如我在问题中说的那样,这应该不成问题,因为静脉注射完全是随机的。如果您对此有疑问,请详细说明

对于不同的加密模式,IV要求不同。 CBC通常应使用加密随机IV,但CTR模式仅需要唯一性,因此可以使用简单的计数器。

#1 楼

根据操作模式的不同,传输加密的IV(使用与其余过程相同的密钥)实际上会大大削弱安全性。

例如,在CFB和OFB模式下, IV被加密,并将结果与​​明文的第一块进行XOR运算以产生密文的第一块。因此,知道加密IV的对手可以轻易撤消XOR,以恢复第一段明文!如果直接将IV / nonce用作初始计数器值,则对于CTR模式也是如此。

CBC模式的工作方式有所不同,如果在传输之前对IV进行加密,则不会造成灾难性的破坏它。但是,正如HenrickHellström所指出的那样,知道加密的IV仍然可以使对手弄清楚明文的第一块是否包含全零。

#2 楼

让我们看一下CBC模式加密会发生什么:



如您所见,IV被称为初始化向量,因为它是与加密前的明文。下一个向量是被加密的密文块之前的密文块。当然,所有密文块都是明文发送的。因此,对第一个加密是没有意义的-您只能保护许多矢量之一。

CBC模式加密可以使用的是PRP(分组密码) )或PRF(加密安全的哈希值,以使IV难以与随机区分开。针对CBC模式加密的IV必须是不可预测的(对于对手)。但是,在这种情况下,您永远不会解密IV,您只能将分组密码用作初始转换。

如果对IV保密,则可以使用具有不同密钥(可能是派生密钥)的单个块加密。

评论


$ \ begingroup $
好吧。发送的前一个加密数据块用作下一个IV解密。我想回答您的问题,这是一个哲学问题。如果我可以选择让潜在的攻击者咀嚼一下东西,例如纯文本IV,或者像加密IV一样根本不选择,那么我宁愿不给他任何东西。我还要指出,很难预测未来。没有人真正知道将来打破加密方案会有什么进步。纯文本IV可能足以帮助攻击者在某一天攻破...
$ \ endgroup $
–鲍勃·布莱恩(Bob Bryan)
2012年4月5日在2:01

$ \ begingroup $
@BobBryan:Owlstead是正确的,因此请考虑其含义。如果发送纯文本IV会以任何方式构成安全威胁,那么显然首先使用CBC模式至少会同样糟糕。相反,对IV进行加密(使用与用于大量数据相同的密钥)实际上可能会引入其自身的漏洞,特别是如果第一段纯文本包含16个零值八位字节时。
$ \ endgroup $
–亨里克·赫尔斯特伦
2012年4月5日在7:51

$ \ begingroup $
你是正确的亨里克。 IV是明文发送的,因为它是最后一个块的加密字节用作下一个IV。我认为这是不明智的,并且将来可能会受到威胁,即使今天没有人可以肯定地说这种方法存在漏洞。我有一个新模式的想法,该模式将使用根本不需要发送的IV。实际上,这将是2种新模式。一种用于流式顺序发送的消息,另一种用于本质上间歇的消息的模式。发布这些链接后,我会回发链接。
$ \ endgroup $
–鲍勃·布莱恩(Bob Bryan)
2012年4月5日在17:07

$ \ begingroup $
“我认为某些地方可能存在一些弱点,我无法通过专家广泛研究,分析并认为安全的加密模式使用它。因此,我将进行一些更改。”对我来说听起来很明智。
$ \ endgroup $
– David Schwartz
2012年4月9日在4:59

$ \ begingroup $
@BobBryan,如果我是攻击者,您会错过重点,并且我进行了基于了解IV的魔术攻击,并且您已对IV进行了魔术加密(0块),因此我无法在我的攻击中使用它,您只是阻止了我解密纯文本的块1,因为每个其他块N都将块N-1的密文用作IV,并且您也没有神奇地加密那些IV。
$ \ endgroup $
– jbtule
2012年4月25日在15:18

#3 楼

通常,加密在计算上很昂贵,而“异或”运算是如此便宜以至于可以忽略不计。加密随机IV比使用第一个消息块对其进行XOR更为昂贵,并且没有加密优势。攻击者识别重复的块并最终确定密钥。但是,IV只要是唯一且无法预测的,就不必保密。将IV与密文一起提供给攻击者将不会提供加密优势。

另一方面,块加密可以在“计数器”(CTR)模式下进行。这确实允许发送方使用顺序初始化程序,但是它们与永远不会与同一密钥重复使用的随机数结合在一起。

评论


$ \ begingroup $
的确,加密IV需要更长的时间。我打算写一篇文章,希望能在杂志或我的博客上发表,以基准测试.NET框架中Microsoft类的对称加密的速度以及可以用来显着提高性能的一些技术至少是我观察到的结果的2.5倍。根据我的结果,可以使用单线程C#代码在我的i7-950机器上以每秒大约250万次的速度使用128位密钥对16个字节的块进行加密。
$ \ endgroup $
–鲍勃·布莱恩(Bob Bryan)
2012年4月5日在2:28

$ \ begingroup $
“使用相同的密钥对IV和消息进行加密是一个常见的错误,但是绝对不应该这样做,因为它允许攻击者“撤消” IV可能造成的随机性。”您在这里谈论计数器模式吗?我不知道计数器的加密应使用与明文不同的密钥。您是否有任何链接提供有关此的更多详细信息?现在,我不明白如何使用与其余消息相同的密钥来更轻松地破解带有计数器的消息。
$ \ endgroup $
–鲍勃·布莱恩(Bob Bryan)
2012年4月5日在2:35

$ \ begingroup $
对不起,我很困惑-要求用不同的密钥对IV进行加密的要求适用于CBC,而不是CTR(CTR(除了使用计数器之外还使用随机数))。使用CBC,如果攻击者在选择的明文攻击中发出全零消息,则第一个加密块就是IV的加密,它提供了足够的信息来破坏语义安全性。我已经相应地编辑了答案;谢谢你的收获!
$ \ endgroup $
–亚当·利斯(Adam Liss)
2012年4月5日在2:53

$ \ begingroup $
@Adam:为完整起见,如果IV不可预测地是随机的,则不需要对其进行加密即可实现语义安全。
$ \ endgroup $
– B-Con
2012年4月5日18:18



#4 楼

除了已经给出的答案之外,我还要补充一点,因为明确地以已知明文(例如,已知的标头及其对应的密文)进行最终攻击,因此需要重新计算所有明文/密文,因此可以安全地以明文形式发送IV
由于此操作应该花费很长时间,并且应该对每个IV进行,因此如果IV是随机选择并经常更改的,即使以明文形式发送IV,这种攻击也会消失。

评论


$ \ begingroup $
这真的不是为什么我们认为以明文形式发送IV是安全的。这不是因为密钥保护了我们,而是a)CBC模式的安全证明向我们表明,IV的知识无助于攻击者,假设攻击者在了解IV以后无法选择消息,并且b)观察到消息中的每个密文块实际上都像消息的其余部分一样充当IV,因此,明文发送IV比发送密文本身没有更高的风险。
$ \ endgroup $
–雨披
2014年10月28日在18:14

$ \ begingroup $
是的,可能我用错误的方式表达了自己。我知道这不是我们认为以明文形式发送IV安全的主要原因(已经在其他答案中说过),而是一个示例,表明即使以明文形式发送IV,攻击者也无法从中获得太多帮助它。当我第一次阅读这些内容时,我对此也持怀疑态度,这个示例有助于我自己对此有所建议,因此我认为将其发布在此处可能很有用。
$ \ endgroup $
–吡咯
2014-10-28 18:30



#5 楼

较早的答案并没有什么真正的错误,但是我认为他们错过了明确表达通过IV的安全性的更基本理由的机会。这是什么:


如果IV不向尚不知道密钥的对手传达有关明文的其他信息,那么对IV的了解将无助于

像CBC这样需要随机IV的模式是最清楚的说明。这是一个具体的物理类比:如果我异想天开地决定抛硬币128次并将结果写在密封的信封外面,我想大多数人会发现我这样做显然对对手的尝试没有帮助。在不实际打开信封的情况下推断出信封的内容。因为这128次抛硬币显然是随机的,因此与明文或任何其他事件无关。

但是相同的逻辑适用于随机IV。因为它们是随机值,所以可以以明文形式传递它们,因此可以确保它们不允许对手推断任何其他信息。

另一方面,关于随机数IV的类似论点则较弱,因为它要求我们证明或假设诚实的当事方选择随机数,以使它们不传达有关明文(或任何纯文本)的信息。其他秘密)。


但是,对于随机和随机数IV的清晰传输提出了细微的异议。例如,参见:



Bellare,Paterson和Rogaway在算法替换攻击方面的工作,其中对手通过用诚实的随机IV算法用不诚实的替代品秘密地替换诚实的IV IV算法,该算法使用IV字段对密钥进行加密,但诚实的用户则对种群进行大规模监视除了诚实的算法,我无法分辨。请注意,这并不是说正确地实施随机IV并不安全,而是允许这种密码的协议容易受到特定类别的恶意实例的攻击。<​​br /> CAESAR竞赛的征集征集活动中使用了秘密消息号,这是由于担心在某些应用中诚实方选择的随机数IV可能会无意间泄漏了应保密的信息。因此,鼓励(但不是必需)提交内容以支持秘密消息编号,该密码为密码提供完整性和机密性(例如纯文本),但可以要求它们具有唯一性(例如公共消息编号,也称为现时)。