Reference
Research
Forward-secure, post-quantum-ready note encryption, and ideas that were rejected.
Research, not a commitment
Nothing on this page changes the circuit or promises a launch feature.
The problem
Each transaction carries two encrypted notes that stay on-chain forever. If a viewing key leaks, every past note encrypted to it can be read. And if the key exchange is elliptic-curve only, someone can store the ciphertexts now and decrypt them once a large quantum computer exists.
The commitments and nullifiers use a hash and are fine. The proof system (UltraHonk over BN254) is not post-quantum: a quantum attacker could forge proofs, not read old notes. So the ciphertext is the privacy gap that matters first.
Proposal
- Hybrid key exchange. Combine an elliptic-curve exchange with ML-KEM-768, so an attacker has to break both.
- A versioned ciphertext format, with an epoch field from day one, so epoch keys can be added later without a format change.
- Fixed-length plaintext, so ciphertext size reveals nothing.
- Ciphertexts in event data, not storage. About 1.2 KB each, so about 2.4 KB per two-note transaction. Real cost on Robinhood Chain is not measured.
Epoch keys (optional, later)
- A cold master key with per-epoch hot keys limits the damage of a device leak and allows date-range disclosure. It is not strict forward secrecy.
- Per-epoch ML-KEM keys must be generated and published in advance, and looking them up can reveal who is receiving.
- Tree-based forward-secure encryption gives strict forward secrecy and is large and slow. Out of scope for now.
Moving to a post-quantum proof system
The pool is immutable, so a new proof system means a new pool version. The plan is to design for it now: a next version whose circuit accepts the old pool's nullifiers, so users migrate without a public unshroud and reshroud. "Post-quantum" will not be used as a claim until commitments, proofs and encryption all are.
Rejected ideas
- Replacing the Merkle tree with lattice ring signatures: smaller anonymity sets, huge signatures, no EVM support.
- Security tiers picked by a threat oracle: needs an admin and splits the anonymity set.
- Private computation with homomorphic encryption: impractical on the EVM.
- Notary-set bridges: add a trusted set. A ZK light-client proof is the better tool.
- Nullifiers that stop being linkable after some epochs: allows double spends.