零知识证明漏洞:Bulletproofs论文错误可能导致数百万美元被盗

本文详细分析了Incognito Chain中发现的Frozen Heart漏洞,该漏洞源于Bulletproofs论文中的错误实现Fiat-Shamir变换,攻击者可伪造零知识证明窃取隐私交易资金,涉及密码学原理和实际攻击向量。

零知识证明漏洞:Bulletproofs论文错误可能导致数百万美元被盗

我们发现了Incognito Chain中的一个关键漏洞,攻击者能够通过该漏洞任意铸造代币并耗尽用户资金。Incognito通过零知识证明提供隐私交易,因此攻击者可以在不被检测或识别的情况下窃取数百万美元的屏蔽资金。该漏洞源于Incognito的bulletproofs中Fiat-Shamir变换的不安全实现。

这并非该漏洞的首次出现;去年我们披露了一系列相同类型的问题,并将其命名为Frozen Heart漏洞。正如我们在之前的博客系列中详细说明的,这些漏洞源于原始bulletproofs论文中的一个错误。该错误在论文中存在超过四年,直到去年在我们的披露后才得以纠正。

自发布该博客系列以来,Trail of Bits继续与密歇根大学的Paul Grubbs和卡内基梅隆大学的Quang Dao合作研究,审查更多代码库和证明系统以查找此问题,最终形成一篇论文并被IEEE S&P 2023接受发表。Incognito Chain中的漏洞正是在这项研究中发现的。

发现问题后,我们通知了Incognito Chain团队的多个成员,他们修复了漏洞并发布了其隐私协议的新版本。据我们所知,该新版本已被其验证者采用,有效修补了漏洞并确保了所有资金的安全。

理解bulletproofs、Fiat-Shamir、Frozen Heart和隐私交易

Bulletproofs是一种特殊的零知识证明,也称为范围证明。它们允许证明者验证加密值是否位于特定范围内。这些证明是隐私交易的关键基础。

Fiat-Shamir是一种变换,我们在之前的一系列博客文章中详细介绍了它。这些文章深入探讨了它在多个零知识证明系统中如何被错误实现和利用。

Frozen Heart漏洞破坏了零知识证明的安全性。当被利用时,攻击者可以伪造零知识证明,欺骗验证者接受不正确的证明。这种破坏可能对协议的安全性产生严重影响。

隐私交易是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变体容易受到Frozen Heart攻击时,严重性显著升级,因为它允许攻击者自由选择硬币的任意值,而不是仅限于随机值。凭借对此类值的控制水平,攻击者可以轻松解决余额方程,从而生成免费资金。加剧此漏洞担忧的是其目标:隐私交易本质上向外部观察者隐藏大多数信息,使得实际检测利用变得极其困难。

协调披露

我们于2023年4月25日将此漏洞通知了Incognito Chain团队的多个成员。他们迅速响应,确认了问题并开始着手修复。2023年4月26日,Incognito Chain提交了此补丁以及其他修复bulletproofs实现的提交。

Incognito Chain团队将此补丁作为其隐私协议新版本(v3)的一部分发布,以防止未来的利用。然而,此初始补丁无意中引入了一个导致临时网络中断的错误。团队在其论坛上详细说明了此问题,问题已解决,网络再次运行。

我们赞赏Incognito Chain团队在解决此问题时的快速高效响应。

如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计