防弹论文中的错误可能导致数百万美元被盗 - Trail of Bits博客
Jim Miller
2023年8月2日
密码学, 区块链
我们在Incognito Chain中发现了一个关键漏洞,攻击者可以利用该漏洞铸造任意代币并耗尽用户资金。Incognito通过零知识证明提供隐私交易,因此攻击者可以在不被检测或识别的情况下窃取数百万美元的屏蔽资金。该漏洞源于Incognito的bulletproofs中Fiat-Shamir转换的不安全实现。
这不是该漏洞的首次出现;去年我们披露了一系列相同类型的问题,我们将其称为"冰冻之心"漏洞。正如我们在之前的博客系列中详细说明的,这些漏洞源于原始bulletproofs论文中的一个错误。这个错误在论文中存在了四年多,直到去年在我们的披露后才得到纠正。
自发布该博客系列以来,Trail of Bits继续与Paul Grubbs(密歇根大学)和Quang Dao(卡内基梅隆大学)进行研究,审查更多代码库和证明系统以查找此问题,最终形成了一篇最近被IEEE S&P 2023接受的论文。Incognito Chain中的漏洞就是在这项研究中发现的。
发现问题后,我们通知了Incognito Chain团队的多个成员,他们修补了漏洞并发布了其隐私协议的新版本。这个新版本已被他们的验证者采用,有效修补了漏洞,据我们所知,确保了所有资金的安全。
理解bulletproofs、Fiat-Shamir、冰冻之心和隐私交易
Bulletproofs是一种特殊的零知识证明,也称为范围证明。它们允许证明者验证加密值是否在特定范围内。这些证明是隐私交易的重要基础。
Fiat-Shamir是我们在之前一系列博客文章中详细介绍的转换。这些文章深入探讨了它如何在多个零知识证明系统中被错误实现和利用。
冰冻之心漏洞破坏了零知识证明的安全性。当被利用时,攻击者可以伪造零知识证明,欺骗验证者接受错误的证明。这种妥协可能对协议的安全性产生严重影响。
隐私交易是Incognito Chain的一个重要特性。与门罗币类似,这些交易隐藏了转账金额以及发送方和接收方的身份。
要更详细地检查Incognito Chain协议及其包含的密码学原语,您可以查看他们的论坛。简要说明是,硬币是其基础值的加密(技术上是一种承诺方案而不是加密方案)。发送方和接收方的身份通过使用环签名来隐藏,这证明交易来自一组(或环)密钥,其中一个是发送方控制的。为了隐藏接收方的身份,协议依赖于隐身或一次性地址;交易中的发送方生成只有接收方可以访问的一次性公钥。
交易包括一组输入硬币、输出硬币和交易费用。要使交易有效,输入的总和应等于输出的总和加上交易费用。然而,硬币的值是加密的。这个挑战通过协议对同态加密的依赖来克服,同态加密允许在保持加密状态的同时对输入和输出的值进行加减。这种余额检查可以同态执行,允许验证的交易在不知道实际值的情况下验证总和是否相等。
这种余额检查有一个注意事项。同态加密方案确保总和等于某个值的模,通常是一个256位或更大的素数值(群阶)。熟练的攻击者可以利用这一点执行本质上相当于整数溢出的攻击,其中溢出发生在模大素数的情况下。因此,攻击者可以铸造额外资金——相当于256位素数的巨额资金,而不是交易不产生额外资金(如安全协议要求的那样)。
协议设计者预见到了这个问题,使用bulletproofs作为保护措施。Bulletproofs作为范围证明,确认所有输入和输出值都小于特定最大值。因此,如果群阶是256位素数,我们可以通过使用bulletproofs验证每个硬币的值最多为2^64来避免这种溢出攻击。当使用合理数量的输入和输出时,溢出攻击将无法实现。
漏洞详情
Bulletproofs是隐私交易的重要组成部分。它们限制了隐私硬币的基础价值,从而保护系统免受攻击者非法铸造货币的影响。与大多数零知识证明一样,bulletproofs使用Fiat-Shamir转换来实现非交互性。我们之前的博客文章强调了原始bulletproofs论文中的错误如何导致Fiat-Shamir协议的不安全实现。如果按照指示实现这个错误,攻击者可以为超出范围的值伪造bulletproofs。
原始bulletproofs伪造导致硬币具有均匀随机值。虽然这可能使利用复杂化,因为你无法精确控制值,但这并非完全不可能。正如我们在最近发表的论文的"攻击Mimblewimble"部分中详细阐述的那样,可以使用Wagner的k-sum算法来设计这种利用。
然而,Incognito Chain使用了一种称为聚合bulletproofs的bulletproofs变体。顾名思义,这种变体将多个bulletproofs聚合到一个证明中,允许更高效的验证。当这种bulletproofs变体容易受到冰冻之心攻击时,严重性显著升级,因为它允许攻击者自由选择硬币的任意值,而不是局限于随机值。有了对这种值的控制水平,攻击者可以轻松解决余额方程,从而生成免费资金。加剧对此漏洞担忧的是其目标:隐私交易,这些交易本质上向外部观察者隐藏了大部分信息,使得实际检测利用变得极其困难。
协调披露
我们于2023年4月25日将此漏洞通知了Incognito Chain团队的多个成员。他们迅速回应,确认了问题,并开始着手修复。2023年4月26日,Incognito Chain提交了此补丁和其他修复bulletproofs实现的提交。
Incognito Chain团队将此补丁作为其隐私协议新版本(v3)的一部分发布,以防止未来的利用。然而,这个初始补丁无意中引入了一个导致临时网络中断的错误。团队在论坛上详细说明了这个问题,问题已得到解决,网络再次运行。
我们赞赏Incognito Chain团队在解决此问题时的快速高效响应。
如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News
页面内容
理解bulletproofs、Fiat-Shamir、冰冻之心和隐私交易
漏洞详情
协调披露
最近文章
构建安全消息传递很难:对Bitchat安全辩论的细致看法
使用Deptective调查您的依赖项
系好安全带,Buttercup,AIxCC的评分回合正在进行中!
使您的智能合约超越私钥风险
Go解析器中意外的安全隐患
© 2025 Trail of Bits.
使用Hugo和Mainroad主题生成。