我刚刚了解到,将CBC加密与可预测的IV结合使用并不安全。

据我了解,使用某些纯文本,然后猜测其使用的IV,攻击者可以验证是否他以为IV是正确的。这怎么算是攻击?

#1 楼

CBC IV攻击的作用远不止于此。

如果我猜出与我之前见过的任何密文块相对应的纯文本,并且可以预测未来的IV,我可以通过提交适当的消息来验证我的猜测用该IV加密。显然,如果说我知道明文是“是”或“否”,而只需要找出它是哪一个,那将是不好的。

更具体地说,BEAST攻击例如,允许恢复Web浏览器通过HTTPS发送的cookie。它的工作方式是(或多或少)您首先说服浏览器发送HTTPS请求,其中cookie的第一个未知字节之后(例如,通过调整请求的URL的长度)块边界落在该边界上并截取密文。

因此,现在您有了一个密文块,该块对应于字符串Cookie: secret=X,其中X是未知字节。现在,您可以使用CBC IV攻击来测试X的所有可能值并找到正确的值。然后你重复此过程,这是一个字节短的URL,使您得到相应ookie: secret=XY,你现在知道X但还不知道Y密文块。然后继续重复该过程,直到逐字节恢复整个cookie。

有关更多问题,请参见相关问题的答案。

评论


$ \ begingroup $
那么,这里是否没有2个必要条件? 1.您可以预测下一个IV(很有可能使用SSL读取BEAST攻击),并且2.您可以猜测先前接收到的消息的密文块。后者总是可能吗?
$ \ endgroup $
– asudhak
2012-09-27 13:34

$ \ begingroup $
并非总是如此,但是比您想像的更多。请参阅我在上面的编辑中的实际示例。
$ \ endgroup $
–伊尔马里·卡洛宁
2012年9月27日13:57

$ \ begingroup $
@asudhak:我们通常假设攻击者可以看到密文。如果他不能,那为什么我们要加密呢?
$ \ endgroup $
–雨披
2012年9月27日14:05

$ \ begingroup $
哦,不,我的意思是知道特定的纯文本块对应于密文。上次编辑对此进行了澄清。
$ \ endgroup $
– asudhak
2012年9月27日在18:20

#2 楼

如果您的IV是可预测的,则这与假设您拥有零向量IV一样(不可靠)。

零向量IV允许您执行所谓的自适应选择明文攻击(ACPA)。

为什么?

假设您有一种可以在CBC模式下工作的加密机制。这意味着,在第一次迭代中,$ IV $与输入消息(仅一个块的大小)进行异或,然后进行加密。在以下迭代中,将使用先前加密的块的输出而不是$ IV $。

如果我们可以预测将要使用的$ IV $,则可以对消息$进行XOR。将x $与该$ IV $一起放入CBC中。然后,CBC事物将再次使用相同的(猜测的)$ IV $对我们的消息进行异或。

$(x \ oplus IV)\ oplus IV = x $

利用这些知识,我们可以推断出CBC模式加密的行为,就好像IV不存在或零向量一样。

这在您仅考虑以下因素的情况下尤其重要或有意义CBC机制的最终输出很重要,例如CBC-MAC(使用在CBC模式下使用分组密码构造的MAC)就是这样。

如果您能够发送一些对具有可预测$ IV $的某些MAC功能进行测试并接收响应,您可能能够为特定消息生成有效的MAC,而无需知道密钥,也无需提交此消息进行身份验证。

请注意,MAC通常仅由密钥所有者针对其批准的消息产生。如果您可以诱骗密钥拥有者为您认证一些看似随机的数据块,则其MAC很有可能受到攻击。

小例子,我们假设加密函数的块大小为5( 5)字符长(出于演示目的):

场景:假设密钥所有者愿意为您使用其CBC-MAC认证任何奇异的数据,但是在任何情况下他都不希望认证消息“ HelloWorld”。因此,攻击的目的是从密钥所有者那里获得足够的知识,以便为消息“ HelloWorld”生成MAC。当然,不用偷钥匙或用橡皮管砸他。

这是它的工作方式:

1.)正确猜测$ IV_1 $。这是可选的,请参见下文。这可能会使理解攻击更容易,但是通常CBC-MAC会将使用的$ IV $与MAC一起发布,因为稍后需要两个参数来进行验证。因此,只有在攻击者想要抵消$ IV $的情况下,才需要预先猜测$ IV $,这是我们在步骤3中要做的。

2.)发送字符串$ s_1 $ =向CBC-MAC功能发送“ Hello”(与$ IV_1 $异或)并接收或读取生成的加密数据$ y_1 $,在这种情况下,如果$ IV,则$ s_1 $的MAC $ m_1 $也是如此$是零向量或对于$ s_1 \ oplus IV_1 $。如果中和$ IV $,则解析为没有任何$ IV $的单个块$ s_1 $的加密。

$ MAC(s_1 \ oplus IV_1)= y_1 = m_1 =加密_K(s_1)$



$ MAC(s_1)= y_1 = m_1 = crypto_K(s_1 \ oplus IV_1)$

3。)猜测下一个$ IV_2 $。这确实消除了不需要的$ IV $,而是模拟了我们实际上没有的上一个块的链接。 =>攻击的核心!

4.)将字符串$ s_2 $ =“ World”与$ IV_2 $进行XOR并与$ m_1 $进行XOR到CBC-MAC-Function并接收结果数据$ y_2 = m_2 $。将$ s_2 $与$ IV_2 $进行异或将中和$ IV $的CBC机制,并将$ m_1 $与XIV进行异或将模拟前一个块“ Hello”中的密码块链接。

$ MAC (s_2 \ oplus IV_2 \ oplus m_1)= y_2 = m_2 $

5.)如果$ IV $在验证时设置为零向量,则消息“ HelloWorld”的MAC为$ m_2 $(因为$ m_1 $是具有中和的$ IV $的“ Hello”的MAC)。或者,如上所述,如果一个人会发现零向量$ IV $看起来很奇怪,那么在步骤1中就不能将$ s_1 $与$ IV_1 $进行XOR,而是存储$ IV_1 $供以后在验证步骤中使用。

(请记住:块大小为五个字符,HelloWorld因此为两个块。)

由于IV沿着MAC发送以进行验证,因此攻击者构造了有效的MAC对于两个串联的块(“ Hello”,“ World”),而他们不知道密钥,也无需将此消息(“ HelloWorld”)提交给MAC函数进行身份验证。

我希望能为您提供一个有关在选定的纯文本攻击下可预测的$ IV $问题的好例子。通过将测试块与$ IV $异或并将其发送给CBC机制,$是正确的。然后,使用另一个正确猜出的IV再次重复该操作。如果两个结果输出相等,则猜测的IV正确。如果没有正确猜出第一个或第二个或没有$ IV $。

重要的是要理解,尤其是在CBC-MAC的情况下,$ IV $不是静态配置,但机制会在每次调用时选择一个随机值。

#3 楼

mwhs的答案对于CBC-MAC及其对IV的使用是非常错误的!对于CBC-MAC使用相同的IV完全是安全的!实际上,Jonathan Katz和Yehuda Lindell建议在调用CBC-MAC时使用零向量IV,因为它可以在实际设置中节省存储空间和带宽! (来源:现代密码学简介,第二版)

mwhs描述的攻击是由于缺乏甲骨文对输入长度的检查。要发起这样的攻击,带有CBC-MAC密钥(oracle)的进程必须愿意接受来自外部对手的任意长度的值并提供结果标签。 CBC-MAC对于定长消息是安全的,但是,就可变长消息而言,它本身并不安全。不管使用哪种IV。


要回答这个问题:最大的失败是能够从密文中猜测出一条消息(Ilmari Karonen简洁地回答了它)。

请注意,加密的安全性意味着与了解密文之前相比,了解密文无法更容易地猜测明文消息(也称为Shannon Secrecy)。此外,在安全系统中,系统中唯一秘密的部分是密钥。对手知道算法。

因此,如果我可以预测IV,则可以通过将其与原始密文$ \所使用的IV异或来对$ M $(例如“炸弹珍珠港”)进行纯文本消息猜测。 text {IV} _ {old} $,以及预测的$ \ text {IV} $,$ \ text {IV} _ {new} $,然后再加密并观察密文$ C_ {new} $。

$$ C_ {new} = \ text {Enc} _k \ left(\ text {IV} _ {new} \ oplus \ left(\ text {IV} _ {new} \ oplus \ text {IV} _ {old} \ oplus M \ right)\ right)= \ text {Enc} _k \ left(\ text {IV} _ {old} \ oplus M \ right)$$

如果$ C_ {new} $与我要猜测的消息相同,我赢了。保密丢失。

我发现看一下CBC模式的工作方式很有帮助:https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Block_Chaining_.28CBC.29

评论


$ \ begingroup $
嗨bhass1。我认为您在看mwhs的答案时是对的。恕我直言,它已经使这里脱轨了。“在您仅考虑CBC机制的最终输出很重要的情况下,这尤其重要或有意义,例如CBC-MAC(使用分组密码构造的MAC CBC模式)。”显然,在谈论CBC加密时,我们将不使用最后一个块作为MAC,CBC + CBC-MAC至少应该是使用两个不同密钥的两次通过协议(并且应该首选CMAC)。
$ \ endgroup $
–马腾·博德威斯♦
17年1月1日在13:41

$ \ begingroup $
但是,如果您不介意,我会将此答案标记为将前两部分转换为mwhs以下的注释。
$ \ endgroup $
–马腾·博德威斯♦
17 Mar 1 '17 at 13:42

$ \ begingroup $
作为您自己的回答,我认为很可能猜测消息的第一部分是可能的,您无需猜测整个消息。在回答和评论之间通过一个mods(嗨,e-sushi)分开后,如果您不介意,我将在$ \ LaTeX $ fu中进行编辑。最后,欢迎使用加密货币,感谢您的参与!
$ \ endgroup $
–马腾·博德威斯♦
17 Mar 1 '17 at 13:44



$ \ begingroup $
听起来不错,马尔滕。我不知道包含LATEX的语法(仅仅是$$?),我急于输入最终答案。如果“消息的第一部分”是指第一个块,那么是的,但是也可以通过将IV与您的猜测的第一个块异或来猜测多块消息并使用相同的技术来验证整个内容。一旦第一个块是正确的,它将与原始消息相同地遍历CBC的其余部分,并且如果您的整个猜测正确,则所有密文块都将匹配。
$ \ endgroup $
–bhass1
17 Mar 5 '17在22:24



$ \ begingroup $
是的,包含$ LaTeX $的位置介于\ $ LaTeX \ $之间(使用MathJax,只需右键单击此处的任何公式以查看上下文菜单,“ LaTeX”一词仅用于演示)。然后,您可以使用\ $ \ $ LaTeX \ $ \ $将公式居中。
$ \ endgroup $
–马腾·博德威斯♦
17 Mar 6 '17 at 9:10



#4 楼

为了简化它:由于它具有可预测的值,因此被认为是不安全的。密码越接近随机性,它就会变得越强。