Circom电路中非约束公开信号可否被敌手篡改?额外数据提交安全性咨询
问题解答
绝对不安全,敌手完全可以将证明中的消息替换为任意值,你的“签名”会彻底失去有效性。
原因分析
- 非约束公开信号的核心问题是:这类信号完全不受电路约束逻辑绑定,电路只会验证
H(x)=pk(x为私有原像,pk为公开哈希值),不会检查消息与原像、公钥的任何关联。 - 在零知识证明体系中,非约束的公开信号相当于未被证明逻辑锚定的附加数据。敌手拿到你的证明后,无需知晓私有原像x,就能修改这个公开信号为任意值,且修改后的证明依然能通过电路验证——因为核心约束
H(x)=pk仍满足,电路不会对消息的真实性做任何校验。
正确做法
必须将消息纳入电路的约束逻辑,把它和私有原像x绑定起来,确保证明只能对应特定的消息。常见的实现方式有两种:
- 将消息与原像结合后哈希:在电路中计算
H(x || m)(x为私有原像,m为公开消息),并将这个新哈希作为公开信号,同时保留原有的H(x)=pk约束。这样证明必须同时满足两个条件:你持有x使得H(x)=pk,且这个证明是针对特定消息m生成的。 - 添加消息的绑定约束:将m作为公开输入信号,在电路中添加关联约束(比如让m参与与x相关的哈希计算,或作为验证逻辑的必要输入),确保m与x在证明生成过程中绑定,无法被单独替换。
内容的提问来源于stack exchange,提问作者Orny
相关产品推荐
相关产品推荐

