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

give example of how soundness proof can go wrong #5

Open
amiller opened this issue Jan 17, 2020 · 5 comments
Open

give example of how soundness proof can go wrong #5

amiller opened this issue Jan 17, 2020 · 5 comments
Labels
enhancement New feature or request

Comments

@amiller
Copy link
Contributor

amiller commented Jan 17, 2020

given the focus of this writeup on soundness proofs, motivated in party by https://eprint.iacr.org/2019/119 https://eprint.iacr.org/2015/437 it would be great to illustrate a buggy variation of BabySNARK that is unsound and can be exploited to create false proofs for at least some statements.
partially explored by @sanket1729 and @SilverPoker but needs to be completed

@amiller amiller added the enhancement New feature or request label Jan 17, 2020
@bl4ck5un
Copy link

Maybe this is relevant here. From reading the soundness proof I didn't get why \gamma is needed. I.e., if you remove it from the scheme and the proof, it extraction seems still going through.

Specifically, if you

  • remove \gamma and related terms from CRS;
  • change the last line of Verify to e(B_w, G)=?e(\beta G, V_w);
  • in the soundness proof, remove terms with Z from B_w(.), V_w(.), H(.).

the extraction proof seems still going through. What did I miss?

@bl4ck5un
Copy link

bl4ck5un commented May 24, 2020

oh, I think I see where the problem is. Extracted V(.) will be off by a constant term.

Hmm. this is subtle. Would def. appreciate some intuition around why \gamma is there.

@SilverPoker
Copy link

The intuition is still enforcing the prover only to evaluate a polynomial that lies in the linear span of u_i(X). If you don't have \gamma, then \beta is exposed to the prover. So he can use the span of 1 and u_i(X). (A constant shift can be used to make fake proof) @bl4ck5un

@bl4ck5un
Copy link

Yeah once you see it, it's clear.

I suppose "without z, the prover can compute in the span of 1 and {u_i(X)}" is a nice and intuitive explanation. thanks.

@sanket1729
Copy link
Contributor

Yes, this is indeed a non-intuitive part of the crs. We originally tried to remove it and prove the soundness but struggled at exactly this step.

However, generically for all circuits, this on its own does not allow the prover to create fake proof.

Maybe, if for a particular circuit 1 lied in the span of statement u_i, then maybe a fake proof can be created. (I am not sure, have not worked this out completely).

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

No branches or pull requests

4 participants