子弹证明论文漏洞可能导致数百万美元被盗

研究人员在Incognito Chain中发现关键漏洞,攻击者可通过伪造子弹证明任意铸造代币并盗取用户资金。漏洞源于Fiat-Shamir转换的不安全实现,属于Frozen Heart漏洞家族,可能造成数百万美元隐私资金被盗且无法被检测。

子弹证明论文漏洞可能导致数百万美元被盗

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

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

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

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

理解子弹证明、Fiat-Shamir、Frozen Heart和隐私交易

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

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

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

隐私交易是Incognito Chain的一个重要特性。与Monero类似,这些交易隐藏了转账金额以及发送方和接收方的身份。

要更详细地检查Incognito Chain协议及其包含的密码学原语,您可以查看他们的论坛。简要说明是,硬币是其基础值的加密(技术上是一种承诺方案而不是加密方案)。发送方和接收方的身份通过使用环签名来隐藏,环签名证明交易来自一组(或环)密钥,其中一个是发送方控制的。为了隐藏接收方的身份,协议依赖于隐身或一次性地址;交易中的发送方生成只有接收方可以访问的一次性公钥。

交易包括一组输入硬币、输出硬币和交易费用。要使交易有效,输入的总和应等于输出的总和加上交易费用。然而,硬币的值是加密的。这个挑战通过协议对同态加密的依赖得以克服,同态加密允许在保持加密状态的情况下对输入和输出的值进行加减。这个余额检查可以同态执行,允许验证的交易在不知道实际值的情况下验证总和是否相等。

这个余额检查有一个注意事项。同态加密方案确保总和在模某个值(通常是256位或更大的素数值,即群阶)下相等。熟练的攻击者可以利用这一点执行攻击,其功能本质上类似于整数溢出,其中溢出发生在模大素数的情况下。因此,攻击者可以铸造额外资金——相当于256位素数的巨额资金,而不是交易不产生额外资金(如安全协议所要求)。

协议设计者预见到了这个问题,使用子弹证明作为保护措施。子弹证明作为范围证明,确认所有输入和输出值小于特定最大值。因此,如果群阶是256位素数,我们可以通过使用子弹证明来验证每个硬币的值最多为2^64,从而避免这种溢出攻击。当使用合理数量的输入和输出时,溢出攻击将无法实现。

漏洞详情

子弹证明是隐私交易的重要组成部分。它们限制了隐私硬币的基础值,从而保护系统免受攻击者非法铸造资金的影响。与大多数零知识证明一样,子弹证明使用Fiat-Shamir转换来实现非交互性。我们之前的博客文章强调了原始子弹证明论文中的错误如何导致Fiat-Shamir协议的不安全实现。如果按照指示实现这个错误,攻击者可以为范围外的值伪造子弹证明。

原始子弹证明伪造导致硬币具有均匀随机值。虽然这可能使利用复杂化,因为您无法精确控制值,但这并非完全不可能。正如我们在最近发表的论文的“攻击Mimblewimble”部分中详细说明的,可以使用Wagner的k-sum算法来设计这种利用。

然而,Incognito Chain使用一种称为聚合子弹证明的子弹证明变体。顾名思义,这种变体将多个子弹证明聚合为一个证明,允许更高效的验证。当这种子弹证明变体容易受到Frozen Heart攻击时,严重性显著增加,因为它允许攻击者自由选择硬币的任意值,而不是局限于随机值。凭借对这种值的控制水平,攻击者可以轻松解决余额方程,从而生成免费资金。加剧对此漏洞担忧的是其目标:隐私交易,其固有地对外部观察者隐藏大多数信息,使得实际检测利用变得极其困难。

协调披露

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

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

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

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