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 = 337
和 b = 113569
并且 return 值为 true
。
zokrates compute-witness -a 337 113569
zokrates generate-proof
如果我更改输入以进行计算 return false
;例如 a = 1
和 b = 113569
。
下面生成一个证明,我有 运行 这个程序,其中 a
和 b
的值和 return 是 false
.
zokrates compute-witness -a 1 113569
zokrates generate-proof
感谢 ZoKrates Gitter 上的 Darko 帮助我理解这一点。
总的来说,我是 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 = 337
和 b = 113569
并且 return 值为 true
。
zokrates compute-witness -a 337 113569
zokrates generate-proof
如果我更改输入以进行计算 return false
;例如 a = 1
和 b = 113569
。
下面生成一个证明,我有 运行 这个程序,其中 a
和 b
的值和 return 是 false
.
zokrates compute-witness -a 1 113569
zokrates generate-proof
感谢 ZoKrates Gitter 上的 Darko 帮助我理解这一点。