本文假设读者已具备零知识证明的基础知识。如需深入了解,可参考Matt Green的入门指南等资源。关于Fiat-Shamir变换的详细解释,可查阅作者先前撰写的博客文章。ZKDocs也提供了相关主题的更多信息。
Bulletproofs是一种高效复杂的零知识范围证明协议,允许证明者在不泄露具体数值的情况下,证明某个秘密值处于预定范围内(如[0, 2³²))。
该协议基于Pedersen承诺密码学原语:承诺值计算为comm = (gˣ)(hᵞ),其中g和h是有限群的不同生成元,h相对于g的离散对数未知。Pedersen承诺不会泄露任何关于x的信息,且无法对承诺进行 equivocation(即无法找到产生相同承诺的不同x'和γ'值)。
Bulletproofs存在多个Fiat-Shamir变换点(具体数量取决于参数配置),可能以不同方式被滥用。原始Bulletproofs论文作者推荐的不安全Fiat-Shamir实现方式导致了该漏洞,影响ING Bank的zkrp、SECBIT Labs的ckb-zkp以及Adjoint, Inc.的bulletproofs等多个实现。
根据Fiat-Shamir安全实现准则:哈希计算必须包含零知识证明语句中的所有公共值(g, h, V, n)以及证明过程中生成的所有随机承诺值。但原始论文建议的挑战值计算方式:
验证方程(65)的左右两边通过恶意V值的构造实现平衡:
Frozen Heart漏洞允许攻击者为随机值伪造证明,其实际影响取决于具体应用场景。由于群阶通常远大于预定范围(如2²⁵⁶ vs 2³²),攻击者能轻易生成范围外值的有效证明。在大多数Bulletproofs应用场景中,这都是严重的安全威胁。
系列最终篇将探讨更复杂证明系统PlonK中的Frozen Heart漏洞。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。