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

feat: translation evaluations with zk pt.1 #12051

Open
wants to merge 13 commits into
base: master
Choose a base branch
from

Conversation

iakovenkos
Copy link
Contributor

@iakovenkos iakovenkos commented Feb 17, 2025

To fix the issue with translation evaluations when the masking is enabled in ECCVM, we need to prove the batched evaluation of the masking term, where by masking term we mean a small table (5 columns, 4 rows) added at the end of the Transcript polynomials.

Fortunately, we could use the SmallSubgroupIPA protocol to do this efficiently and faciliatate the integration of this fix into Goblin.

This is the first batch of changes:

  • Introduction of a class TranslationData designed to process the masked wires and commit to the masking term
  • Extension of SmallSubgroupIPA functionality - now it could accept Translation data and produce a proof of the batch opening of the masking term
  • Added corresponding test to SmallSubgroupIPATests

Also, discovered and resolved a soundness issue related to the translation evaluations.

@iakovenkos iakovenkos self-assigned this Feb 17, 2025
@@ -157,50 +157,8 @@ void ECCVMProver::execute_pcs_rounds()
sumcheck_output.round_univariates,
sumcheck_output.round_univariate_evaluations);

// Get the challenge at which we evaluate all transcript polynomials as univariates
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

isolated into a separate method

@@ -0,0 +1,90 @@
#pragma once
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a new class in a way similar to ZKSumcheckData. It is supposed to accept the eccvm transcript wires, extract, and concatenate the masking terms to prepare them for the SmallSubgroupIPA.

commitments.transcript_z1,
commitments.transcript_z2 };

const OpeningClaim translation_opening_claim = reduce_verify_translation_evaluations(transcript_commitments);
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

again, isolated the translation evaluations logic into a separarte method to improve readability and make it uniform with the prover class

@@ -209,9 +167,6 @@ void ECCVMProver::execute_pcs_rounds()

// Compute the opening proof for the batched opening claim with the univariate PCS
PCS::compute_opening_proof(key->commitment_key, batch_opening_claim, ipa_transcript);

// Produce another challenge passed as input to the translator verifier
translation_batching_challenge_v = transcript->template get_challenge<FF>("Translation:batching_challenge");
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was a very strange step, the challenge that has to be propagated is the batching_challenge_v produced in reduce_translation_evaluations

// Load the proof produced by the translator prover
transcript->load_proof(proof);

Flavor::VerifierCommitments commitments{ key };
Flavor::CommitmentLabels commitment_labels;

const auto circuit_size = transcript->template receive_from_prover<uint32_t>("circuit_size");
evaluation_input_x = transcript->template receive_from_prover<BF>("evaluation_input_x");
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this was not sound, the prover could've sent anything here, switched to the propagation of these challenges from the ECCVMVerifier to TranslatorVerifier.

@iakovenkos iakovenkos marked this pull request as ready for review February 20, 2025 14:37
@iakovenkos iakovenkos changed the title feat: translation evaluations with zk feat: translation evaluations with zk pt.1 Feb 20, 2025
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

Successfully merging this pull request may close these issues.

1 participant