本文详细分析了Frozen Heart漏洞,这一漏洞源于Fiat-Shamir变换的安全性问题。在阐述Fiat-Shamir变换及其在零知识证明中的应用后,文章探讨了弱Fiat-Shamir变换如何导致攻击者在不知秘密值的情况下伪造证明,从而威胁零知识证明系统的安全性。最后,作者强调在实施过程中必须认真审查Fiat-Shamir变换的正确性。
背景
Frozen Heart 漏洞最早是由 Trail of Bits 团队命名的。“Frozen”代表零知识证明的铸造,而“Heart”则表明 Fiat-Shamir 转换是许多证明系统的核心。该漏洞指的是使用“弱 Fiat-Shamir”转换。在这种情况下,只对证明者的消息的部分进行了哈希,而公共信息(如参数、公共输入等)被排除在外,从而导致出现安全问题。
在接下来的部分中,我们将对这一漏洞进行全面的分析,首先讨论什么是 Fiat-Shamir 转换。
Fiat-Shamir 转换,也称为 Fiat-Shamir 启发式或 Fiat-Shamir 范式,由 Fiat 和 Shamir 在1986年提出。它是一种将交互式零知识证明协议转换为非交互式协议的转换。它通过用哈希函数的输出替代协议中的随机挑战来完成这一转换。这一替代使证明者能够生成并发送证明给验证者,而无需进行交互式的挑战和响应。
Schnorr 证明是交互式零知识证明协议的一个例子。它允许证明者向验证者证明一个陈述是真实的而不透露陈述的细节。验证者可以进行交互式验证。Schnorr 证明通常用于需要证明对一个秘密值的知识但又不透露该秘密值的场合。
借助 Fiat-Shamir 转换,Schnorr 的交互式证明可以被修改为非交互式证明。
如前所述,Schnorr 可以在有限域或椭圆曲线 (EC) 上实施,技术规范大体保持一致,只是底层的循环群不同。下面,我们主要描述这两个过程在有限域中的上下文。
符号说明:
- Alice:协议中证明者假定的身份
- Bob:协议中验证者假定的身份
- a | b:a 约束了 b
- a || b:a 和 b 的连接
- [a, b]:整数区间,包括 a 和 b
- t:Bob 选择的挑战的位长度
- H:一个安全的加密哈希函数
- p:一个大的质数
- q:p-1 的一个大的质因子,意味着 q | p-1
- Zp^*:p 模的整数乘法群
- Gq:Zp^* 中的一个质序子群 q
- g:Gq 的生成元
- g^d:g 的 d 次方
- a mod b:a 对 b 取模
- Fp:包含 p 个元素的有限域,其中 p 是质数
基于有限域的实现
首先,Alice 计算 A = g^a mod p,其中私钥 a 被选自区间 [0, q-1]。然后,她公开发布公钥 A。
接下来,在不揭示 a 的情况下,Alice 向 Bob 证明她知道与 A 对应的私钥 a:
如果检查返回 true,则可以确认 Alice 知道 a。其基本原理如下:
这里,Bob 需要生成一个随机 c,是因为如果攻击者在公开 A 之前知道这个值,他们可以在不知道实际 a 的情况下伪造证明。攻击者伪造 (A, V, r) 的方法如下:
1)生成一个随机值 r
2)V 的计算方法保持不变,设定
在收到这三个参数后,验证者将它们代入验证公式,验证仍然会通过。然而,仔细观察这些参数的生成过程,它们与需要证明的秘密值 a 完全没有联系。
2. 非交互式
对非交互式的修改也很简单。在交互式基础上,将 Bob 随机生成 c 的过程改为参数的哈希值:
首先,Alice 计算 A = G * [a],其中私钥 a 从区间 [0, n-1] 中选择。然后,她公开发布公钥 A。
接下来,在不揭示 a 的情况下,Alice 向 Bob 证明她知道与 A 对应的私钥 a:
如果验证是真实的,那么可以证明 Alice 知道 a。原理如下:
非交互式实现方法与以上基于有限域的实现相同,因此无需进一步详细阐述。
弱 Fiat-Shamir 转换
在上述非交互式实施过程中,随机数:
是一个合适和安全的生成方式。不幸的是,在一些早期的论文中,这个过程没有得到严格描述,仅简称为:
这提出了一个安全问题,称为弱 Fiat-Shamir 转换,可以通过预计算 A 来伪造证明,从而误导验证者。
这提出了一个安全问题,称为弱 Fiat-Shamir 转换。它可以通过预计算 A 来利用,从而欺骗验证者。
要重构参数 (A, r),使用以下方法:
1. 生成一个随机值 r。
2. 计算 a=(v-r)/c,计算方法不变。
3. 计算
我们可以看到,这个 A 现在已经变成了一个与 a 不相关的参数。代入验证方程:
使其等于 V。
换句话说,攻击者可以在不知道秘密值的情况下通过协议验证。
一些其他论文 [3] 描述的过程如下:
Frozen Heart 漏洞
Trail of Bits 团队发表了一篇文章 [2] 指出,在 ZKP 系统(如 Bulletproofs 和 Plonk)中,Fiat-Shamir 实施存在漏洞,允许恶意用户伪造随机陈述的证明。
例如,在 Plonk 中,Fiat-Shamir 算法用于生成证明生成中的第 2、3、4 和 5 轮的随机数。
论文 [3] 调查了许多现代零知识证明系统的开源实现,发现其中 36 个利用了弱 Fiat-Shamir 转换,包括 Bulletproofs、Plonk、Spartan 和 Wesolowski 的 VDF。攻击者可以在不需要知道有效证明秘密的情况下生成通过验证的证明。
漏洞示例
这里,fs 是 Fiat-Shamir 计算的一个实例。在 z(X) 参数的 Round2proof 计算中,由于未将公共输入绑定到挑战,造成伪造证明信息的可能性。
同样,不包含 publicSignals 导致可能伪造证明信息。
结论
从披露的内容来看,这一漏洞显然是普遍存在的。它对零知识证明构成了严重的威胁。在实际应用中,仔细审查 Fiat-Shamir 实施的正确性,并在随机数生成中包含公共见证数据,以防止攻击者伪造证明,至关重要。
最后,特别感谢 Safeheron,这是一家领先的一站式数字资产自我保管服务提供商,感谢他们提供的专业技术建议。
参考文献:
1. https://datatracker.ietf.org/doc/html/rfc8235
3. https://eprint.iacr.org/2023/691.pdf
SlowMist是一家成立于2018年1月的区块链安全公司。该公司由一支拥有十年以上网络安全经验的团队创立,旨在成为全球性的力量。我们的目标是使区块链生态系统对每个人尽可能安全。我们现在是一家知名的国际区块链安全公司,曾参与许多知名项目,如Huobi、OKX、Binance、imToken、Crypto.com、Amber Group、Klaytn、EOS、1inch、PancakeSwap、TUSD、Alpaca Finance、MultiChain、Cheers UP等。
SlowMist 提供多种服务,包括但不限于安全审计、威胁信息、防御部署、安全顾问和其他安全相关服务。我们还提供反洗钱 (AML) 软件、Vulpush(漏洞监测)、SlowMist Hacked(加密黑客档案)、FireWall.x(智能合约防火墙)、Safe Staking 和其他 SaaS 产品。我们与国内外公司如 Akamai、BitDefender、FireEye、RC²、TianJi Partners、IPIP 等建立了合作关系。
通过为个别项目提供定制的综合安全解决方案,我们能够识别风险并防止其发生。我们的团队能够发现并发布几个高风险的区块链安全漏洞。通过这样做,我们能够传播意识并提升区块链生态系统的安全标准。
官网:
推特:
https://twitter.com/SlowMist_Team
Github:
- 原文链接: slowmist.medium.com/slow...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!