Bulletproofs中的Frozen Heart漏洞零知识证明与Fiat-Shamir变换本文假设读者已具备零知识证明的基础知识。如需深入了解,可参考Matt Green的入门指南等资源。 关于Fiat-Shamir变换的详细解释,可查阅作者先前撰写的博客文章。ZKDocs也提供了相关主题的更多信息。 Frozen Heart漏洞技术分析Bulletproofs存在多个Fiat-Shamir变换点(具体数量取决于参数配置),可能以不同方式被滥用。 原始Bulletproofs论文作者推荐的不安全Fiat-Shamir实现方式导致了该漏洞,影响ING Bank的zkrp、SECBIT Labs的ckb-zkp以及Adjoint, Inc.的bulletproofs 漏洞核心问题根据Fiat-Shamir安全实现准则:哈希计算必须包含零知识证明语句中的所有公共值(g, h, V, n)以及证明过程中生成的所有随机承诺值。
而采用 Hash 函数的方法来把一个交互式的证明系统变成非交互式的方法被称为 Fiat-Shamir 变换。 零知识证明 Schnorr 协议经过 Fiat-Shamir 变换之后,就具有 NIZK 性质。 Schnorr 协议,对于任意的 Public-Coin 协议,都可以用 Fiat-Shamir 变换来把整个协议压缩成一步交互,也就是一个非交互式的证明系统。 通过 Fiat-Shamir 变换,可以把 Bob 每一次的挑战行为用一次随机预言来代替。 下面是一个示例图,大家可以迅速理解这个 Fiat-Shamir 变换的做法。
第三章 非交互式零知识证明 3.1 Fiat-Shamir变换 Fiat-Shamir变换是将交互式零知识证明转换为非交互式零知识证明的关键技术: 基本思想:使用密码学哈希函数代替验证者的随机挑战 变换过程 response(commitment, c, secret) 最终证明为:(commitment, r) 验证者计算c = H(commitment || public_inputs)并验证响应 以下是Fiat-Shamir 变换的简化实现: import hashlib def fiat_shamir_transform(interactive_protocol, public_inputs): """执行Fiat-Shamir 使用Fiat-Shamir变换生成挑战c # 将公共参数和承诺组合起来作为哈希输入 challenge_data = f"{self.p}:{self.g}:{y}:{t 总结与未来展望 8.1 零知识证明技术总结 零知识证明技术已经从理论研究发展到实际应用: 基本概念:零知识证明的核心是在不泄露信息的情况下证明知识 交互式协议:通过多轮交互实现零知识证明 非交互式证明:通过Fiat-Shamir
Schorr 签名算法是将密码学中著名的 Fiat-Shamir 转换应用到 Schnorr 身份鉴别协议转换而来。算法的正确性显而易见,它的安全性也在相应的安全模型下得到了证明。
我们使用Fiat-Shamir变换将其转换为非交互式证明,并使用以下表示法引用生成的证明: 构造 现在描述一个具体的分散式电子现金方案(Decentralized E-Cash Scheme)。 相反,我们使用 来签名交易哈希,要求我们将交易摘要包括在针对 Fiat-Shamir proofs 的挑战的哈希计算中。
详细的过程如下: 关于非交互式零知识证明的实现,例如在上述方案的基础上,使用Fiat-Shamir启发式,令x=hash(A0,……Am),证明者可以不通过和验证者交互生成一个关于witness的证明 简洁性(Succinct):证明是简短的,并且可以容易验证(验证者计算量小) 非交互式(Non-interactive):不需要上面验证者对x的提问是一次交互,采用Fiat-Shamir启发式即可替换为非交互式
在个人介绍中,陈一镭的研究成果主要包括设计了格问题的量子算法,建立了多线性映射和代码混淆在格问题上安全实现的基础,提出了证明 Fiat-Shamir 假设的方法,以及提出了一个不可逆群的构造。
这种验证具可以限制爬虫批量的抓取数据,因为它的有效时间很短,而且这个钥匙是第一无二的,例如用md5、RSA、ElGamal、Fiat-Shamir、Guillou- Quisquarter、Schnorr
我们可以用 Fiat-Shamir 启发式把交互式的证明转化成非交互式的证明,也就是证明者算出一个非交互式证明之后,任何人都能在没有证明者协助的情况下进行验证 (类似签名中的验签)。 关于 protocol 和 Fiat-Shamir 协议的基本概念,可以参考下面的知识小课堂。 证明输入中的 其实是 的一个 Pedersen 承诺。
普通数字签名算法有RSA、ElGamal、Fiat-Shamir、Guillou- Quisquarter、Schnorr、Ong-Schnorr-Shamir数字签名算法、Des/DSA,椭圆曲线数字签名算法和有限自动机数字签名算法等
idemix使用非交互式的Fiat-Shamir启发协议构造零知识证明。对于一个承诺y,证明方需证明自己知道x,使得y = gx。
generate_challenge_response(self, offset, r): """生成挑战响应(简化示例)""" # 在实际的零知识证明系统中,这将涉及交互式挑战-响应协议 # 或使用 Fiat-Shamir
这可以再次使用 Schnorr 的协议和 Fiat-Shamir 启发式有效地实例化。或者,Apple 可以选择密钥 αi 并将它们与签名值 Yσ,i 一起交给客户端设备。
Fiat-Shamir启发式允许我们用非交互式的随机神谕访问代替交互式步骤3,但在实践中,使用的是Hash函数。