Skip to main content

groth16 使用者

作为一个使用 Groth16 的开发者,您需要关注以下几个关键步骤和文件:

  1. 电路设计和编译

    • 设计一个用于证明的电路(例如,使用 Circom)。
    • 编译电路以生成中间表示文件和验证密钥文件。
  2. 设置可信初始化(Trusted Setup)

    • 使用 snarkjs 进行可信初始化,以生成证明密钥和验证密钥。
    • 生成的文件包括 circuit_final.zkey(证明密钥)和 vk.json(验证密钥)。
  3. 生成证明

    • 使用输入数据文件(input.json)和证明密钥文件(circuit_final.zkey)生成证明文件(proof.json)和公共信号文件(public.json)。
  4. 验证证明

    • 使用验证密钥文件(vk.json)和公共信号文件(public.json)来验证证明文件(proof.json)。

具体步骤和文件

1. 设计和编译电路

  • 使用 Circom 设计电路(例如 circuit.circom)。
  • 编译电路以生成中间表示文件(例如 circuit.r1cs)。
circom circuit.circom --r1cs --wasm --sym

2. 设置可信初始化

  • 使用 snarkjs 进行可信初始化。
snarkjs groth16 setup circuit.r1cs pot12_final.ptau circuit_final.zkey
snarkjs zkey export verificationkey circuit_final.zkey vk.json

3. 生成证明

  • 准备输入数据文件(input.json),例如:
{
"a": 3,
"b": 11
}
  • 使用 snarkjs 生成证明文件和公共信号文件。
snarkjs groth16 prove circuit_final.zkey input.json proof.json public.json

4. 验证证明

  • 使用验证密钥文件和公共信号文件来验证证明文件。
snarkjs groth16 verify vk.json public.json proof.json

重点关注的文件和步骤

  • input.json:包含证明者的输入数据。
  • proof.json:包含生成的证明文件。
  • public.json:包含公共信号文件,验证过程中需要公开的数据。
  • vk.json:验证密钥文件,用于验证证明文件。

验证过程

验证过程的关键在于:

  1. 验证公共信号文件中的数据

    • 确保公共信号文件中的数据(例如哈希值)与预期值一致。
  2. 验证证明文件的正确性

    • 使用验证密钥文件和公共信号文件来验证证明文件是否正确生成。

总结

作为一个使用 Groth16 的开发者,您的主要关注点是:

  1. 准备好输入数据文件(input.json)。
  2. 使用 snarkjs 工具生成证明文件(proof.json)和公共信号文件(public.json)。
  3. 使用验证密钥文件(vk.json)和公共信号文件(public.json)来验证证明文件(proof.json)。

通过这些步骤,您可以确保证明者的输入数据满足电路的约束条件,而验证者可以验证证明的有效性而不需要知道具体的输入数据。