原文:https://medium.com/@noahruderman/a-summary-of-why-iotas-refutation-of-a-vulnerability-by-dci-labs-is-absurd-128e894781b1
作者:Noah Ruderman
译者:知道创宇404实验室
DCI实验室发布报告称,他们发现了针对IOTA交易签名方案中存在性不可伪造(EU-CMA)的安全问题,允许攻击者窃取资金。
而对于密码学来说,这个漏洞正是密码学安全研究的向量。如果你不同意这一点,你就是在反对密码学。
1. 前言
争议开始于由麻省理工学院旗下的DCI实验室撰写的漏洞报告。IOTA开发人员否认密码学和互联网安全对漏洞的定义,指控DCI实验室学术欺诈,并骚扰DCI的安全研究员伊森·海尔曼,威胁说要对这份不利的漏洞报告采取法律行动。
尽管DCI声称的漏洞在每一位加密专家、安全研究人员和主要加密货币开发人员看来都是正确的,但这很难令常人所理解。在这基础上,IOTA强烈反对curl-p易受攻击的观点,并发布了相关文章。
本篇文章的目的:
(a) 向几乎没有密码学知识的人解释该漏洞的性质;
(b) 为什么IOTA的反驳并不能说服密码学专家和安全研究人员;
(c) 如何论证哈希函数的安全性。
2. DCI实验室声明的摘要
DCI实验室表示,用于保护交易安全的数字签名方案不符合EU-CMA的安全概念。该数字签名方案的安全性之所以能被打破,是因为所使用的哈希函数curl-p没有抗碰撞的属性。
3. 什么是curl-p?
Curl-p是一个哈希函数。哈希函数将任意长度的数据转换为固定长度的输出。你可以将这些输出看作数字指纹。哈希函数旨在满足以下主要特性:
- 确定性:给定相同的输入,获取的哈希值始终相同。
- 一致性:预期的输入应尽可能一致地映射到输出范围。
- 不可逆性:给定哈希值,应该很难找到相应的输入。但“非常困难”的定义很宽泛,因为它取决于许多外部因素,比如随着时间推移而变化的技术,但专家们对此没有争议。在普通硬件上计算冲突是不可能的,并且对于安全的哈希函数来说,任何人都很难找到冲突。如果政府能够找到冲突,那么哈希函数就不会被认为是安全的。
curl-p的目的是使哈希函数表现出高度随机的行为,它使我们将哈希值视为唯一的且防篡改的。
4. curl-p的作用是什么?
Curl-p是由Sergey Ivancheglo编写的自定义哈希函数,他也被称为Come-from-Beyond。它是数字签名方案的一部分,用于确保交易的身份验证的完整性。在消息上构造数字签名的过程包括将数据哈希并用私钥加密哈希值。这是加密货币的标准做法。详细解释如下:
- 身份验证:证明消息是由公钥所有者创建的。如果消息未经过哈希处理,则签名会更长,则需要更多时间进行验证。
- 完整性:防止消息在创建后被篡改,同时仍然在数字签名下进行验证。
数字签名是通过用公钥解密签名并将交易数据哈希来进行验证的。如果未加密签名和相应的哈希值相同,则认为数字签名有效。
然而,预期中的数字签名要求哈希函数表现出高度的随机行为。如果curl-p表现出足够的非随机行为,攻击者就可以构造一个没有私钥签名但具有相同签名的消息,因为消息的哈希值是相同的。这意味着数字签名方案被破坏,攻击者可能会伪造交易来窃取资金,因此交易的数字签名(扩展为curl-p)在软件生产中具有关键的安全作用。
5. curl-p必须满足哪些安全属性才能防止攻击?
我们可以简单的把这个问题归结为冲突,即两则不同的消息可以用curl-p哈希得到相同值的频率。如果两则消息哈希值相同,那么签名将是相同的,如果攻击者的消息是有效的交易,这意味着可能有人通过使用前一个交易的签名来使用你的Iota币。任何curl-p的冲突都会对数字签名方案发起攻击,因此curl-p应该具有最强的安全性。
用于满足最严格的安全属性的哈希函数被称为加密哈希函数。这些安全属性包括:
- 抗碰撞性:攻击者应该无法找到两则消息m1和m2使得hash(m1) = hash(m2)。
- 抗原像攻击:如果提供哈希值h,攻击者应该无法找到消息m使得m = hash(h)。
- 抗第二原像攻击:如果提供消息m1,攻击者应该无法找到消息m2,使得hash(m1)= hash(m2),m1!= m2。
6. curl-p是加密哈希函数吗?
IOTA开发人员一直含糊其辞,但更频繁地声称curl-p并非旨在成为加密哈希函数。他们反驳了DCI实验室关于漏洞的说法,因为他们认为在curl-p中不需要抗碰撞性。换句话说,他们不能因为curl-p是一个不安全的哈希函数而被指责,因为它从来没有打算保证curl-p是安全的。
然而,curl-p在确保使用拥有超过10亿美元生产系统的安全方面发挥了关键作用。curl-p的充分非随机行为可能使资金被盗。除非允许资金窃取是curl-p的预期功能,否则其应该被设计为满足我概述的最严格的安全属性,这将使其成为加密哈希函数。如果按照IOTA开发人员所说,curl-p并不是一个加密哈希函数,那么这就是一个重大的设计缺陷。
因此,IOTA开发人员要么为其极其糟糕的设计负责,要么认为他们自己构建了一个安全的哈希函数,因为他们无法找到破解它的方法。两者都表现出极差的判断力,第一种是健忘,第二种是对其安全性过于自信。
7. 是否存在漏洞?
存在。DCI实验室发现curl-p并不具有抗碰撞性,他们展示了两则消息的真实例子,这两则消息被网络视为有效交易,但是哈希到相同的值。他们通过利用curl-p中的非随机行为来改变消息中的一些位以生成哈希值相同的新值。这些位就是交易金额。因此,如果你向某人发送了一些Iota币,那么你可以通过修改交易来发送不同的金额。
DCI实验室还展示了理论上的攻击是如何通过破坏抗碰撞性来实现的。你可以构造两项哈希值相同的交易来发送Alice的Iota币,然后让Alice签署第一项交易,然后用这个签名发送第二项交易。
正如密码学专家、安全研究人员等普遍理解的那样,漏洞确实存在,原因如下:商用硬件上的curl-p上发生了碰撞;curl-p中被打破的抗碰撞性是用来自同一地址的事务来表示的;使用curl-p来哈希交易数据意味着用户资金可能被盗;加密哈希函数不可能实现这一点……
但如果我认为这次攻击没有那么严重呢?
“安全”(secure)一词用于哈希函数,“漏洞”(vulnerability)一词用于软件,它们都有明确的定义,这些定义独立于任何人对这些攻击破坏力的感受。密码学对数字签名方案的安全性有严格的定义,且数字签名方案的安全性也与个人感受无关。因此,我们完全可以说curl-p是不安全的,并且其存在一个漏洞,但攻击并没有那么严重。因为攻击没有那么严重,所以不存在漏洞这种说法是不正确的。
8. 为什么要考虑标准的EU-CMA而不是实际的攻击呢?
没有受过软件工程或密码学培训的人最常犯的一个错误是,EU-CMA攻击是一个抽象的游戏,不能很好地转化为实际的结果。毕竟,IOTA的协调员可能自己做了一些验证,这肯定会影响概述的攻击的可行性,而这并不是EU-CMA模拟的一部分。当然也有一些外部组件对攻击很重要——不建议重用地址。让我们先把明显的细节放在一边,即协调器是一个临时措施,而且它是闭源的——这意味着没有人知道它到底做了什么。
如果关于系统安全性的评判标准是“能否在生产系统中演示实际的攻击”,那么在实际部署这些演示时,会出现一些明显的问题。首先,黑客攻击计算机系统是违法的。其次是关于安全漏洞的微妙本质——你真的认为等到商用硬件上的SHA-1被破坏后再将其用于关键的互联网基础设施是一个好主意吗?还有一个事实是,闭源代码是不能进行公开访问的——你认为我们应该忽略那些闭源系统的安全性吗?这样的例子不胜枚举。
如何解释安全性的标准,你可以将其视为最佳实践。最佳实践就像专家的常识一样,因为同样的错误往往会重复出现——比如创建自定义的哈希函数。EU-CMA攻击包含了我们期望从构建了安全方面的最佳实践的系统中看到的行为。也就是说,如果你实现了EU-CMA关于数字签名安全的概念,那么你就知道存在某些安全保证,甚至不需要为系统的各个部分创建巨大的流程图。从另一个角度来看,如果你系统的安全性依靠外部验证来维护被破坏的协议的完整性,那么你就会有一个过于草率、复杂的系统,它很容易出现安全漏洞。
Sergey说EU-CMA对数字签名不重要,因为他的系统会做额外的验证,这就像在说:
- 你不用担心把所有的硬币都放在一个热钱包里,因为没有人知道这台电脑在哪里以及它的密码。
- 你不必用VPN来向政府隐藏你的IP,因为他们的隐私政策说他们不保存日志。
- 你无需为重复使用密码而担心,因为密码的安全性很高。
这些例子听起来很愚蠢吗?当然!但它们本质一样。安全漏洞在技术上可以通过外部因素得到缓解。但是这种缓和因素是非常脆弱的,特别是对那些安全因素至关重要的东西来说。如果与大型热钱包交易可以获得10亿美元呢?它完全打破了你的安全模式。IOTA开发人员冒着损失用户10亿美元的风险——用他们自己的话说,因为他们不知道有比在生产系统中测试未经同行评审的自定义加密原语更好的方法,也不知道有比只是部署它并查看是否有人破坏了它更好的方法——这极其荒谬。(参见:泄露邮件第4封)
9. 如果现实生活中的攻击看起来还不那么切合实际,为什么安全研究人员还会担心呢?
因为哈希函数的历史给了我们一些教训,那就是第一个漏洞只是开始,随着时间的推移,会发现更多的漏洞。DCI团队非常接近于找到一个原像攻击,他们先发制人地声明他们与IOTA进行了私下交流。DCI实验室表示,他们认为这是有可能的,但还无法对其进行量化。他们还认为curl-p也破坏了抗原像攻击,而并不难以置信。
如果发现了curl-p的原像攻击,那么实际的攻击将十分危急且无法恢复。原像攻击意味着你不需要为消息签名攻击就可以成功。想象一下攻击者设置了大量的Iota完整节点。现在使用一个轻钱包连接这些节点,并传播你的交易。该交易不会被传到网上。相反地,他们会伪造一个假交易,然后用你的签名进行传播。
10. 将SHA-1作为哈希函数安全性的案例研究
显示非随机行为迹象的哈希函数只是一个开始。SHA-1于1995年被正式指定。2005年,在其规范化整整十年后,漏洞开始被发布,其攻击力比暴力攻击更有效。与curl-p不同的是,在2005年的时候还没有发现实际的碰撞。SHA-1提供的安全性比承诺的要低,差距太小而不容忽视,可能在政府的预算范围内无法攻破,但这足以让密码学界认为它是不安全的。
在接下来的几年里,打破SHA-1安全性的障碍不断变小,并且完全在政府的掌控之中。同样地,尽管没有发现碰撞事实,但许多组织都建议用SHA-2或SHA-3来代替SHA-1。2017年,终于发现了一次碰撞。这是一次碰撞攻击,他们证明它可以用来做一些事情,比如构造一个低租金的合同,用具有相同哈希值的高租金合同来交换数字签名。
SHA-1的历史总结:
- 第一个漏洞是在其规范之后整整十年才发现的。
- 一旦攻击被证明比暴力更有效时,密码学家就认为它是不安全的,尽管这是不切实际的。没有一个密码学家认为SHA-1是安全的,因为它太难攻击了。
- 尽管在2017年之前,没有人负担得起在SHA-1中发现碰撞的计算能力,但政府完全有能力做到这一点。
- 自2005年以来,每年对SHA-1的攻击都变得越来越高效。换句话说,一旦SHA-1显示出非随机行为,对它的尝试性利用变得越来越好。
与此curl-p比较:
-
第一个漏洞是在IOTA在交易所上市后一个月内发现的,该项目也因此受到公众关注,市值超过10亿美元。而SHA-1花了10年的时间才得到研究人员的关注。
-
尽管curl-p在保护签名完整性方面与SHA-1有类似的作用,但Sergey Ivancheglo并不认为抗碰撞性很重要。整个密码学界都认为SHA-1的抗碰撞能力非常重要。这种几乎被破坏的抗碰撞性会导致SHA-1的不安全调用。
-
根据泄露的电子邮件,IOTA开发人员使用curl-p来处理关键的安全应用程序,但并不认为有必要将其提交给密码学专家的同行进行评审。用他们自己的话来说,他们觉得确保自制的加密技术安全性的唯一方法就是在生产系统中使用它然后看它是否受到攻击。
-
根据DCI实验室的数据,对curl-p的攻击花费了20个小时。
11. 但你确定真的有漏洞吗?
根据密码学的定义,有漏洞。
评估说curl-p不安全是因为它在生产系统中发挥着关键的安全作用(意味着它应该是一个加密哈希函数),但是它已经破坏了抗碰撞性(它不是一个安全的加密哈希函数)。
评估认为在交易的数字签名方案中存在漏洞是因为有不安全的哈希函数,它意味着你可以使用以前交易的签名来伪造交易。
12. 但你说这是密码学的定义……
更严格地说,DCI实验室表明,根据EU-CMA,IOTA使用curl-p的交易数字签名方案失败了。在这种攻击中,攻击者能够签署他们选定的任何消息,并可以根据需要重复生成和签署消息。如果任意两条消息生成相同的签名,则攻击成功。
对于此次攻击,消息来源是未签名的IOTA交易。由于交易的签名实际上是交易数据的curl-p哈希函数的签名,因此打破curl-p的抗碰撞性就足以赢得这场游戏。DCI实验室的研究人员通过产生碰撞消息打破了curl-p的抗碰撞性。这些碰撞消息是良构事务,这是一个额外收获。
但是IOTA反驳说,EU-CMA的安全也被破坏了……
相信我,我们现在都已经习惯了。
在泄露的电子邮件中,Sergey反驳了这一说法,理由是对EU-CMA安全的定义过于抽象。(这就是他提到的“真空中的球形签名方案”。)他的观点十分令人困惑,部分原因是他反复引用维基百科(Wikipedia)和security.stackexchange.com等网站上的非正式信息来为自己的观点辩护,他认为这些信息具有权威性。Sergey反复引用安全的定义,但是不考虑加密货币协议。其他时候,他对EU-CMA安全的定义提出异议,称其需要进行原像攻击。在推特上,他经常挑战那些认为IOTA很容易受到原像攻击的人,Heilman反复强调,这对于他们所概述的EU-CMA攻击来说不是必要的。
Sergey在一篇文章中更仔细地阐述了他的理解。很明显,他的理解力还很差劲。他努力地从一个非常直截了当的角度来看待EU-CMA安全的各个方面。例如,EU-CMA允许攻击者获取从目标生成的任何消息的签名。因此,DCI实验室通过使用由他们控制的私钥来模拟提供这些消息的受害者。Sergey认为这违规了,因为他们模拟的是可以创建密钥的虚拟受害者,而不是无法创建密钥的虚拟受害者。
Sergey也误解了“微不足道”这个词的概念。他一再强调,如果DCI实验室不提供在curl-p中查找碰撞的代码,那么他们就没有任何可信度,就好像这改变了curl-p在普通硬件上存在碰撞的事实,意味着碰撞对密码学者来说是微不足道的。
Sergey并不是提出几个问题而已,而是在质疑密码学中他所能质疑的一切。如果他不理解这些概念,他应该去上与密码学相关的课程,在课堂上提出自己的问题,而不是去骚扰撰写漏洞报告的安全研究人员。如果做不到这一点,他应该聘请密码学专家来回答他的问题,因为他要求的细节如此之多,以至于DCI实验室能够主动满足其要求变得遥遥无期。
13. 结论
DCI实验室对IOTA存在漏洞的评估与密码学的定义一致。每一位密码学家、安全研究员和主要加密货币的开发者都公开发表了言论,他们都同意DCI实验室的观点。
IOTA对此提出异议的原因如下:
- 他们缺乏对密码学的功能性理解,以至于将security.stackexchange.com上的的非正式答案作为严格的定义;
- 他们缺乏研究安全问题的直觉,以至于在没有同行评审的情况下,他们就开始使用自己的加密原语并在生产系统上进行测试;
- 他们缺乏社会技能,无法准确解释密码学定义中更定性的方面,比如“微不足道”这个词的含义。
本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1003/