Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add parameter verification to zcashd distribution (Sapling) #3555

Open
matthewdgreen opened this issue Oct 2, 2018 · 6 comments
Open

Add parameter verification to zcashd distribution (Sapling) #3555

matthewdgreen opened this issue Oct 2, 2018 · 6 comments

Comments

@matthewdgreen
Copy link

matthewdgreen commented Oct 2, 2018

The Zcash Sapling parameter generation ceremony is designed to ensure the correct structure of all Zcash zkSNARK proving parameters. This is conducted using a combination of pairing checks and efficient ZK proofs. Parameter validation is important (and an essential part of the system design) because failure to ensure valid parameters can lead to violation of ZK properties in the zkSNARK.

For users not involved in the Sapling generation process, Zcash proposes to publish a separate parameter verification tool that allows third-party users to check that the parameters are correctly structured. However, at the time of this filing (10/2/18), the equivalent parameter verification scripts are not published for Zcash Sprout. While this does not present a critical security issue, the apparent difficulty in maintaining availability of this code represents a violation of a user promise: parameters should be easily verifiable by all users who rely on them.

To simplify the distribution of this verification code, I propose that the parameter verification logic be included in either (1) the zcashd binary, or (2) the "fetch_parameters.sh" scripts distributed with zcashd. Because verification is time consuming, it need not be a requirement. It could be activated with a flag as follows:

zcashd --verify-params

Or

fetch_params.sh --verify

As a result of these optional flags, the scripts would conduct a full verification of the parameter structure to ensure user confidence in the anti-subversion countermeasures. Any failure of verification would cause either (1) zcashd to exit(1) with a clear error, or (2) the parameter fetch to fail. The parameter verification checks should also be included as tests in the CI behavior of zcashd and the distribution.

Update: Just to be clear, I'm talking about anti-subversion checks -- not a full MPC transcript verification.

@daira
Copy link
Contributor

daira commented Oct 2, 2018

It's not the case that we didn't publish the scripts for the Sprout MPC verification; they are present in the https://github.com/zcash/mpc repo. The files that are currently missing and needed for reverification are r1cs (describing the circuit) and transcript (the MPC transcript).

@daira
Copy link
Contributor

daira commented Oct 2, 2018

Note that it is not possible to reverify the ceremony without the transcript, which is very large, and impractical to include with zcashd. It is possible to reverify the subversion-ZK property with a much smaller amount of data (perhaps just the parameters, I'm not sure), but not the knowledge soundness property.

@tromer
Copy link
Contributor

tromer commented Oct 2, 2018

I support this, as a way to ensure that verification code is readily available to any interested user, and is distributed by channels that users already trust.

However, it bears noting that in practice it's not necessary for all users to verify the parameters. It's sufficient that a large enough set of independent users (or the software packagers that users trust anyway) have verified the parameters and have the ability to broadly communicate a verification failure.

@tromer
Copy link
Contributor

tromer commented Oct 2, 2018

@daira, verifying soundness also requires checking that (sufficiently many) ceremony participants weren't dropped from the transcript. That requires (sufficiently many) participants to check the transcript and shout out if their contribution is amiss, or alternatively, comparing the transcript to the archives of the mailing list (or similar) used to report participation. This, too, requires tool support.

@matthewdgreen
Copy link
Author

matthewdgreen commented Oct 2, 2018

@daira: All I'm referring to in this thread is subversion issues. To avoid subversion issues, all you need to do is conduct pairing checks on the FINAL parameters. You do NOT need the full transcript. This is actually a subroutine in (various versions) of the Zcash parameter setup process. It may require some extra data, but it's still worth doing in fetch_params.sh.

@tromer
Copy link
Contributor

tromer commented Oct 2, 2018

@matthewdgreen, a terminological nitpick: "subversion" is not the right term to distinguish, since the paper that introduces the term defines both subversion soundness and subversion zero knowledge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants