实现 zkSNARK 的 C++ 库:libsnark

jopen 9年前

libsnark 是实现了 zkSNARK 模式的 C++ 库。zkSNARK 是一个证明/验证计算完整性的加密方法。

This library implements zkSNARK schemes, which are a cryptographic method for proving/verifying, in zero knowledge, the integrity of computations.

A computation can be expressed as an NP statement, in forms such as the following:

  • "The C program foo, when executed, returns exit code 0 if given the input bar and some additional input qux."
  • "The Boolean circuit foo is satisfiable by some input qux."
  • "The arithmetic circuit foo accepts the partial assignment bar, when extended into some full assignment qux."
  • "The set of constraints foo is satisfiable by the partial assignment bar, when extended into some full assignment qux."

A prover who knows the witness for the NP statement (i.e., a satisfying input/assignment) can produce a short proof attesting to the truth of the NP statement. This proof can be verified by anyone, and offers the following properties.

  • Zero knowledge: the verifier learns nothing from the proof beside the truth of the statement (i.e., the value qux, in the above examples, remains secret).
  • Succinctness: the proof is short and easy to verify.
  • Non-interactivity: the proof is a string (i.e. it does not require back-and-forth interaction between the prover and the verifier).
  • Soundness: the proof is computationally sound (i.e., it is infeasible to fake a proof of a false NP statement). Such a proof system is also called an argument.
  • Proof of knowledge: the proof attests not just that the NP statement is true, but also that the prover knows why (e.g., knows a valid qux).

项目主页:http://www.open-open.com/lib/view/home/1451271203011