里蔡新闻网
当前位置: 里蔡新闻网>文化>金赞娱乐场地址 - 零知识证明:ZoKrates 使用和案例说明 | 火星技术帖 » 正文

金赞娱乐场地址 - 零知识证明:ZoKrates 使用和案例说明 | 火星技术帖

发布日期:2020-01-10 12:16:39  
免责声明:本文旨在传递更多市场信息,不构成任何投资建议。文章仅代表作者观点,不代表火星财经官方立场。小编:记得关注哦来源:币探索zokrates 是一个针对以太坊的 zk-snarks 工具类项目, 利用它可以比较容易地实现链下生成零知识证明, 再提交到以太坊链上用智能合约进行验证的功能.zokrates 本身主要用 rust 实现, 底层 zkp 方案依赖于 bellman, libsnark

金赞娱乐场地址 - 零知识证明:ZoKrates 使用和案例说明 | 火星技术帖

金赞娱乐场地址,免责声明:本文旨在传递更多市场信息,不构成任何投资建议。文章仅代表作者观点,不代表火星财经官方立场。

小编:记得关注哦

来源:币探索

zokrates 是一个针对以太坊的 zk-snarks 工具类项目, 利用它可以比较容易地实现链下生成零知识证明, 再提交到以太坊链上用智能合约进行验证的功能.

zokrates 本身主要用 rust 实现, 底层 zkp 方案依赖于 bellman, libsnark 实现.

本文简要介绍 zokrates 的使用以及 v 神 zksnarks 相关文章里的一个案例用 zokrates 实现说明.

关于 zksnarks, zokrates 更详细的介绍和说明可以参考文末参考资料.

命令行说明

compile

编译源码: 将 zok 源码压平成逻辑条件语句形式, 生成两个文件(默认 out, out.ztf), 其中 .ztf 文件是可读版.

命令样例: zokrates compile [-o out] -i sample.zok

zok 源码文件 sample.zok:

生成的 ztf 文件:

setup

可信启动: 执行可信启动(trusted setup)操作, 生成 crs(common reference string).

命令样例: zokrates setup [-i out] [-s g16] [-p proving.key] [-v verification.key]

setup 输入为 compile 生成的 out, 在生成 crs 前会会先生成 r1cs 等操作, 最终输出两个文件: proving.key 和 verification.key.

可以用参数 -s 指定采用的零知识证明方案, 目前支持 g16、pghr13、gm17, 默认为 g16.

生成的 verification.key:

compute-witness

计算 witness: 这是生成证明的一个步骤, 根据原计算问题的输入生成 witness.

命令样例: zokrates compute-witness [-i out] [-o witness] -a 4 16

命令的输入为 compile 生成的 out, 以及计算问题(函数)的输入参数; 输出一个文件, 默认文件名为 witness.

generate-proof

生成证明: 基于约束系统(计算问题)以及 witness 生成对应的零知识证明.

命令样例:zokrates generateproof [-i out] [-p proving.key] [-w witness] [-s g16] [-j proof.json]

命令的输入为 compile 和 setup 生成的(out, proving.key) 以及 compute-witness 生成的(witness); 输出证明文件, 默认为 proof.json.

proof.json 样例:

export-verifier

导出验证合约: 根据 verification.key 生成 verifier 合约.

命令样例: zokrates export-verifier [-i verification.key] [-s g16] [-o verifier.sol]

证明方案

docs: proving schemes

当前 zokrates 支持三个证明方案:

pghr13: pghr13, 依赖于 libsnark

g16: groth16, 默认方案, 不依赖 libsnark, 依赖于 bellman

gm17: gm17, 依赖于 libsnark

setup, export-verifier, generate-proof 三个命令可以通过 -s 指定证明方案, 但须保持一致.

要使用 pghr13 或者 gm17, 需要在编译生成 zokrates 命令时增加额外的参数来加入 libsnark:cargo +nightly -z package-features build --release --package zokrates_cli --features="libsnark"

说明: g16 存在延展性(malleability)问题, 推荐使用 gm17.

验证方法

验证方法就是调用 export-verifier 命令生成的 verifier.sol 合约的 verifytx 函数.

function verifytx(uint[2] memory a, uint[2][2] memory b, uint[2] memory c, uint[2] memory input) public returns (bool r)

函数的参数来自 generte-proof 命令的输出结果.

案例: x^3+x+3=35

本案例来自 vitalik 的 qap 文章:

quadratic arithmetic programs: from zero to hero

白话零知识证明 (二)

执行过程:

使用 dsl 来对问题编码:

main.zok

编译:

命令: zokrates compile -i main.zok

结果:

根据结果可以知道:

setup

命令: zokrates setup

输出结果:

生成验证合约

命令: zokrates export-verifier

编译并发布合约

使用 remix 和 metamask 来编译和发布.

rinkby 上发布并源码认证的合约:0x53577a6d35da004d1c76397959c594d0426ecd1a

https://rinkeby.etherscan.io/address/0x53577a6d35da004d1c76397959c594d0426ecd1a

生成正确的 witness 和 proof

命令: zokrates compute-witness -a 3 -o witness.good

witness.good:

生成正确的 proof

命令: zokrates generate-proof -w witness.good -j proof-good.json

proof-good.json

调用 verifier 合约进行验证

交易:0xf84aa9f7cc7b7ef7896f77b295bcce657c18c6053fe33eba0905f86131c6851f

https://rinkeby.etherscan.io/tx/0xf84aa9f7cc7b7ef7896f77b295bcce657c18c6053fe33eba0905f86131c6851f

根据 verifier.sol, 交易有抛出事件就说明验证通过.

生成错误的 witness 和 proof

命令: zokrates compute-witness -a 4 -o witness.bad

witness.bad 无法生成.

伪造错误的 proof, 基于上面的 proof-good.json 的数据进行任意修改.

调用 verifier 合约进行验证

交易:0x669936c392f39a10bc0ee594e1472b87a93b0370ed329ab03892e5f702fb1ea3

https://rinkeby.etherscan.io/tx/0x669936c392f39a10bc0ee594e1472b87a93b0370ed329ab03892e5f702fb1ea3

交易:0x89689b344f88751995641f8f682768aaf99b770f70f404bd003fedc6ecb50393

https://rinkeby.etherscan.io/tx/0x89689b344f88751995641f8f682768aaf99b770f70f404bd003fedc6ecb50393

有些交易会失败, 有些交易会成功, 但是成功的交易也是没有事件的(说明验证没通过, 函数返回 false)

参考资料

zokrates - github

https://github.com/zokrates/zokrates

zokrates docs

https://zokrates.github.io/

bellman

https://github.com/zkcrypto/bellman

libsnark

https://github.com/scipr-lab/libsnark

vitalikbuterin - quadratic arithmetic programs: from zero to hero

https://medium.com/@vitalikbuterin/quadratic-arithmetic-programs-from-zero-to-hero-f6d558cea649

零知识证明 - 深入理解 zokrates

https://learnblockchain.cn/2019/07/24/zokrates/

篮球滚球

 
 
[ 资讯搜索 ]  [ 加入收藏 ]  [ 告诉好友 ]  [ 打印本文 ]  [ 违规举报 ]  [ 关闭窗口 ]

©Copyright 2018-2019 nycityjewelry.com 里蔡新闻网 Inc. All Rights Reserved.