写点什么

Bulletproofs 中的 Frozen Heart 漏洞:零知识证明系统的致命缺陷

作者:qife122
  • 2025-08-21
    福建
  • 本文字数:988 字

    阅读完需:约 3 分钟

Bulletproofs 中的 Frozen Heart 漏洞

零知识证明与 Fiat-Shamir 变换

本文假设读者已具备零知识证明的基础知识。如需深入了解,可参考 Matt Green 的入门指南等资源。关于 Fiat-Shamir 变换的详细解释,可查阅作者先前撰写的博客文章。ZKDocs 也提供了相关主题的更多信息。

Bulletproofs 技术原理

Bulletproofs 是一种高效复杂的零知识范围证明协议,允许证明者在不泄露具体数值的情况下,证明某个秘密值处于预定范围内(如[0, 2³²))。


该协议基于 Pedersen 承诺密码学原语:承诺值计算为 comm = (gˣ)(hᵞ),其中 g 和 h 是有限群的不同生成元,h 相对于 g 的离散对数未知。Pedersen 承诺不会泄露任何关于 x 的信息,且无法对承诺进行 equivocation(即无法找到产生相同承诺的不同 x'和γ'值)。

Frozen Heart 漏洞技术分析

Bulletproofs 存在多个 Fiat-Shamir 变换点(具体数量取决于参数配置),可能以不同方式被滥用。原始 Bulletproofs 论文作者推荐的不安全 Fiat-Shamir 实现方式导致了该漏洞,影响 ING Bank 的 zkrp、SECBIT Labs 的 ckb-zkp 以及 Adjoint, Inc.的 bulletproofs 等多个实现。

漏洞核心问题

根据 Fiat-Shamir 安全实现准则:哈希计算必须包含零知识证明语句中的所有公共值(g, h, V, n)以及证明过程中生成的所有随机承诺值。但原始论文建议的挑战值计算方式:


  • y = Hash(A,S)

  • z = Hash(A,S,y)

  • x = Hash(A,S,y,z,T₁,T₂)未包含语句关键公共值 V,构成 Frozen Heart 漏洞。

漏洞利用步骤

  1. 设置 v 为范围内任意值(如 v=3),选择随机γ

  2. 按协议生成 aₗ, aᴿ, A, S

  3. 计算 t₁和 t₂后,随机生成 t₁'和 t₂'替换实际值计算 T₁和 T₂

  4. 按协议计算其他值(l, r, t̂, τₓ, μ)

  5. 构造恶意 V 值:v' = 3 + (t₁ - t₁')(x/z²) + (t₂ - t₂')(x²/z²)

  6. 通过调整随机值可使 v'以极高概率落在范围外

数学验证

验证方程(65)的左右两边通过恶意 V 值的构造实现平衡:


  • 左边:g 指数包含 t₀ + t₁·x + t₂·x²

  • 右边:g 指数包含 3z² + δ(y,z) + t₁·x + t₂·x²

  • 根据 t₀定义(t₀ = ⟨aₗ, aᴿ·yⁿ⟩),两边数学等价

漏洞影响范围

Frozen Heart 漏洞允许攻击者为随机值伪造证明,其实际影响取决于具体应用场景。由于群阶通常远大于预定范围(如 2²⁵⁶ vs 2³²),攻击者能轻易生成范围外值的有效证明。在大多数 Bulletproofs 应用场景中,这都是严重的安全威胁。


系列最终篇将探讨更复杂证明系统 PlonK 中的 Frozen Heart 漏洞。更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码

办公AI智能小助手
用户头像

qife122

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
Bulletproofs中的Frozen Heart漏洞:零知识证明系统的致命缺陷_密码学_qife122_InfoQ写作社区