ZoKrates Invalid witness 产生有效证据

ZoKrates Invalid witness produces valid proof

总的来说,我是 ZoKrates 和 ZK 的新手。我对证人的工作方式感到困惑。如果我计算出一个无效见证人,验证者仍然会验证证据是否正确。例如(基于 ZoKrates“入门”)。

给出这个程序:

def main(private field a, field b) -> bool:
  return a * a == b

然后运行宁以下:

zokrates compile -i root.zok
zokrates setup
zokrates compute-witness -a 337 113569
zokrates generate-proof

当我运行

zokrates verify

它returns 通过了。

但是,如果我为 compute-witness 提供错误的值,它仍然会通过。例如:

zokrates compute-witness -a 1 113569
zokrates generate-proof
zokrates verify // PASSES

我显然对这里的某些内容有误解,但在花了几个小时在线阅读不同内容后,我仍然不确定是什么。

我已经意识到我所缺少的理解,而且很简单。这种情况下的证明不是验证 a * a 等于 b,而是证明我有 运行 计算。

例如,下面生成的证明表明我有 运行 这个程序 a = 337b = 113569 并且 return 值为 true

zokrates compute-witness -a 337 113569
zokrates generate-proof

如果我更改输入以进行计算 return false;例如 a = 1b = 113569。 下面生成一个证明,我有 运行 这个程序,其中 ab 的值和 return 是 false.

zokrates compute-witness -a 1 113569
zokrates generate-proof

感谢 ZoKrates Gitter 上的 Darko 帮助我理解这一点。