德国的RUB报告说XML加密已损坏。本质上,这是W3C标准,用于保护XML文档免遭窥视。

这是否意味着攻击者只能看到一条消息,或者实际上他们可以推断所有消息的加密密钥?

这是CBC中的一个新漏洞吗?

这与使用CBC的现有应用程序有什么关系?

评论

我的理解是W3C的标准实施很容易受到攻击,而不是CBC本身,但是我看不懂德语,而且我发现的所有新闻报道都含糊不清...

@SteveS我可以阅读德语,但是第一个链接中的新闻稿并未提供有关此次攻击的任何详细信息。

这是原始论文的PDF-英文nds.rub.de/media/nds/veroeffentlichungen/2011/10/22/…

#1 楼

看完论文How to Break XML Encryption(感谢链接的Krzysztof)之后,这里是我的两分钱。

这种攻击依赖于CBC密文C =(IV,C1, ... Cd)可分解为(IV,C1),(C1,C2),(C2,C3),...(C(d-1),Cd)对,每对也是有效的相同密钥的CBC密文,与相应的明文片段有关(忽略填充)。

具有这样的一对C'=(IV,C1)(例如),我们可以修改其相应的明文现在,我们通过修改初始化矢量部分来任意设置。在这种对XML加密的攻击中,oracle告诉我们(a)是否正确填充了明文,并且(b)不会导致XML无效(例如XML不允许使用的字符,或者&<不匹配)。可以从受攻击的Web服务的错误消息中构造这样一个预言家。

使用初始化向量的稍有不同的值重复查询此预言家,现在允许我们重建纯文本的各个字节。

这篇博客中的文章还有更多分析,这是本周的攻击:Matthew Green的XML加密。


这是否意味着攻击者只能看到一条消息,或者它们实际上可以推断所有消息的加密密钥?


攻击是对操作模式的攻击-适用于任何块如果可以有效地构造和使用这种验证oracle,则可以使用CBC模式的密码。
它不会退还密钥,因为它实际上绕过了分组密码而不是攻击密码。

对于每个损坏的明文字节,它需要多个oracle查询(确切的数目将取决于oracle的类型),但是可以应用于任何截获的密文消息。它还允许使用任意明文构造密文(使用更多此类oracle查询)。


这是CBC中的新漏洞吗?


引言中,似乎早在2002年就已经知道使用CBC模式对其他协议的类似攻击(攻击填充方案而不是像此处的编码)。如上所示可以分解CBC消息这一事实当然不是一个新见识。

但是这种特殊的破解方式似乎是新的(它于2011年2月被发现,他们只是在等待写作并发表论文)。


这与使用CBC的现有应用程序有什么关系?


诸如TLS,SSH和IPSec之类的协议将加密与消息身份验证代码结合使用以进行完整性/身份验证(甚至使用组合的“身份验证加密”方案)。选定的密文攻击者(如此处)通常无法构造有效的MAC标签,并且如果应用程序拒绝具有错误MAC的消息,而不是尝试解析纯文本(并给出适当的错误消息),则不应问题。

XML加密还提供了MAC,但是它是可选的-允许攻击者剥离MAC并仍然获得有效的加密消息。

对于文件或电子邮件加密(如PGP),通常每条消息都有一个密钥,并且没有使用验证Oracle的简便方法。

#2 楼

都不行这意味着攻击者可以解密使用此标准加密的所有消息。

攻击是一种填充oracle攻击。这意味着,如果攻击者拥有他们想要解密的密文,则他们可以将密文的多种变体发送到服务器。通过分析服务器的响应(例如,返回的错误消息),攻击者可以推断出相应的解密明文。攻击者从不学习加密/解密密钥。但是,攻击者可以根据需要重复多次,以解密他们捕获的每个密文。解密N个密文的工作量与N成正比。特别是,该论文报告说,它们的攻击每个解密的字节对服务器执行14个查询。

填充oracle攻击是可能的,因为XML标准没有这样做。不能使用针对所选密文攻击安全的加密算法。或者,换一种说法,他们使用未经身份验证的加密。

这是经典加密设计错误的另一个实例:不要使用未经身份验证的加密。避免此错误的一种方法是使用经过身份验证的加密和其他防止滥用的算法。

#3 楼

您的第三个问题询问此攻击与CBC的现有应用程序有何关系。在用于破坏XML加密之前,它已在TLS / SSL上运行的某些协议上使用。在这里查看我的答案。对于其他协议(例如IPSEC,WTLS和SSH),提出攻击的原始论文对它的适用性进行了很好的讨论(在第5节中)。