Context
The current DKG share transport uses ECIES because the original requirement was confidential delivery of each scalar share to the recipient validator's registered Pallas public key.
The protocol has since grown into a more complex DKG flow where recipients can detect bad shares locally, but the chain cannot verify that encrypted payloads match the published Feldman commitments. A malicious dealer can publish valid-looking commitments and encrypt an invalid share to one or more recipients, causing those validators to fail local verification and withhold acks. This is a liveness risk for the ceremony.
Current Baseline
Feldman commitments only
- Publicly verifies shares after the share is known.
- The recipient can detect if their decrypted share does not match the published polynomial commitments.
- The chain cannot verify encrypted payload correctness before recipients decrypt.
Feldman commitments + polynomial Schnorr PoK
Schnorr POK POC: #304
- Proves the dealer knows openings for their commitment polynomial.
- Prevents unknown-opening / poisoned-aggregate attacks where a contributor publishes commitment points shaped to cancel or poison the aggregate without knowing the scalar polynomial.
- Does not prove anything about the encrypted payloads.
- A dealer can still encrypt a valid share to validator A and garbage to validator B while having a valid polynomial PoK.
Design Goal
Add verifiable encryption for DKG shares so each contribution proves that every encrypted payload decrypts to the scalar share matching the dealer's published Feldman commitments.
A valid contribution should prove, for each recipient index i:
- The ciphertext decrypts to plaintext scalar
s_i.
s_i * G = Eval(C, i), where C is the dealer's Feldman commitment polynomial.
- The proof is bound to the round, dealer, recipient, recipient index, and ciphertext context.
Option Space
Option A: Paillier-style scalar verifiable encryption
Use an encryption scheme with scalar plaintexts and a proof that the encrypted scalar matches the Feldman evaluation.
Open questions:
- Dependency and implementation complexity.
- Proof size and verification cost per recipient.
- Trusted setup or parameter requirements.
- Integration with existing Pallas-based DKG code.
Option B: Feldman commitments + DH/Poseidon scalar encryption + Halo2 proof
Use an encryption construction designed for circuit verification:
- Encrypt each scalar share with a fresh ephemeral DH secret.
- Derive a scalar mask using Poseidon or another circuit-friendly primitive.
- Ciphertext carries masked scalar payload.
- Prove in Halo2 that the ciphertext decrypts to
s_i and that s_i * G = Eval(C, i).
Open questions:
- Exact transcript/domain separation.
- Circuit constraints and proving/verification cost for
n-1 recipient payloads.
- Whether proofs are per-recipient or batched per dealer contribution.
- How to version/migrate from current ECIES payloads.
Non-goals / Caveats
Plain curve ElGamal over points is not sufficient by itself: it can verifiably encrypt the share point, but validators need the scalar share for threshold decryption. Recovering a full-field DKG scalar from a point would require discrete log; BSGS only works for small plaintext ranges and is unsuitable for full-field shares.
Acceptance Criteria
- A concrete protocol design is documented for verifiable DKG share encryption.
- The design explains how proofs bind to round/dealer/recipient/index/ciphertext context.
- The design compares proof size, verification cost, implementation complexity, and circuit requirements.
- The chosen design prevents a dealer from committing to one polynomial while encrypting non-matching shares to recipients.
- Tests or adversarial fixtures cover a dealer encrypting garbage to one recipient while publishing otherwise valid commitments/proofs.
Context
The current DKG share transport uses ECIES because the original requirement was confidential delivery of each scalar share to the recipient validator's registered Pallas public key.
The protocol has since grown into a more complex DKG flow where recipients can detect bad shares locally, but the chain cannot verify that encrypted payloads match the published Feldman commitments. A malicious dealer can publish valid-looking commitments and encrypt an invalid share to one or more recipients, causing those validators to fail local verification and withhold acks. This is a liveness risk for the ceremony.
Current Baseline
Feldman commitments only
Feldman commitments + polynomial Schnorr PoK
Schnorr POK POC: #304
Design Goal
Add verifiable encryption for DKG shares so each contribution proves that every encrypted payload decrypts to the scalar share matching the dealer's published Feldman commitments.
A valid contribution should prove, for each recipient index
i:s_i.s_i * G = Eval(C, i), whereCis the dealer's Feldman commitment polynomial.Option Space
Option A: Paillier-style scalar verifiable encryption
Use an encryption scheme with scalar plaintexts and a proof that the encrypted scalar matches the Feldman evaluation.
Open questions:
Option B: Feldman commitments + DH/Poseidon scalar encryption + Halo2 proof
Use an encryption construction designed for circuit verification:
s_iand thats_i * G = Eval(C, i).Open questions:
n-1recipient payloads.Non-goals / Caveats
Plain curve ElGamal over points is not sufficient by itself: it can verifiably encrypt the share point, but validators need the scalar share for threshold decryption. Recovering a full-field DKG scalar from a point would require discrete log; BSGS only works for small plaintext ranges and is unsuitable for full-field shares.
Acceptance Criteria