Overview
A grouped ciphertext validity proof certifies that a grouped ElGamal ciphertext is well-defined - specifically, that the ciphertext can be decrypted by the private keys associated with its decryption handles. A grouped ciphertext consists of one Pedersen commitment and multiple decryption handles, each encrypted under different public keys. This proof is crucial for confidential token transfers where multiple parties (source, destination, auditor) need to decrypt portions of the transaction. The protocol guarantees computational soundness and perfect zero-knowledge in the random oracle model.Proof Variants
The SDK provides proofs for different handle counts:- 2 Handles: Most common, used for sender + destination or sender + auditor
- 3 Handles: Used for sender + destination + auditor scenarios
This page focuses on the 2-handle variant, which is the most commonly used in confidential token transfers.
Proof Structure (2 Handles)
TheGroupedCiphertext2HandlesValidityProof contains five components:
Commitment to the Pedersen commitment:
Y_0 = y_r*H + y_x*GCommitment for the first handle:
Y_1 = y_r*P_firstCommitment for the second handle:
Y_2 = y_r*P_secondMasked randomness:
z_r = c*r + y_rMasked amount:
z_x = c*x + y_xProof Data Context
What is a Grouped Ciphertext?
A grouped ElGamal ciphertext allows multiple parties to decrypt the same encrypted value:handle_i = r * P_i where:
ris the shared randomnessP_iis the i-th recipient’s public key
Generating a Proof
Verification
The verification checks that all handles are correctly derived from the same commitment:Cis the shared commitmentD_first,D_secondare the decryption handlesP_first,P_secondare the public keysc,w,wware challenge scalars
The first public key and commitment must be non-identity points. However, the second public key is allowed to be identity, as auditor keys can be disabled in Token-2022.
Use Cases
Confidential Token Transfers (2 Handles)
- Source + Destination: Prove transfer amount is correctly encrypted for both sender and receiver
- Source + Auditor: Allow compliance auditing while keeping amounts private
- Destination + Auditor: Enable regulatory oversight of received amounts
Multi-Party Scenarios (3 Handles)
- Source + Destination + Auditor: Complete transparency for all parties
- Split payments: Prove amounts are correctly divided among recipients
- Escrow services: Allow escrow agent to verify amounts
Typical Transfer Flow
Security Considerations
Proof Size (2 Handles)
Total size: 160 bytes (5 × 32 bytes)- 3 Ristretto points (96 bytes)
- 2 scalars (64 bytes)
Batched Variant
For verifying multiple grouped ciphertexts with the same public keys, use the Batched Grouped Ciphertext Validity Proof for better efficiency.Related Proofs
- Batched Grouped Ciphertext Validity: Batch verification of multiple grouped ciphertexts
- Ciphertext-Commitment Equality: Link ciphertexts with commitments
- Public Key Validity: Verify public keys are well-formed
Source Code
Sigma proof implementation:zk-sdk/src/sigma_proofs/grouped_ciphertext_validity/handles_2.rs:47
Proof data structure: zk-sdk/src/zk_elgamal_proof_program/proof_data/grouped_ciphertext_validity/handles_2.rs:40