Privacy & Confidential Transfers
Note Encryption (ECDH)
X25519 ECDH per-note encryption for inter-sender privacy
Note Encryption
Axiomatic uses X25519 ECDH (Elliptic Curve Diffie-Hellman) for per-note encryption on the confidential ledger. Each note gets a unique encryption key, ensuring inter-sender privacy.
Encryption (Sender)
- Retrieve recipient's X25519 public key from their stealth meta-address
- Generate ephemeral X25519 keypair
(r, R) - Compute shared secret:
x25519(r, recipientX25519Pub) - Derive note key:
HKDF-SHA256(sharedSecret, commitment, "axiomatic.note.ecdh.v1") - Encrypt note data with AES-256-GCM
- Submit transaction with
encryptedNote,ephemeralPubKey = R,scanTag
Decryption (Recipient)
- Derive X25519 private key from IVK:
HKDF(ivk, "axiomatic.x25519.v1") - Compute shared secret:
x25519(x25519Private, ephemeralPubKey) - Derive note key:
HKDF-SHA256(sharedSecret, commitment, "axiomatic.note.ecdh.v1") - Decrypt with AES-256-GCM
Inter-Sender Privacy
Because each sender generates a fresh ephemeral keypair per note:
- Sender A's notes produce different shared secrets than Sender B's
- Even if Sender A is compromised, they cannot decrypt Sender B's notes to the same recipient
- The ephemeral private key
ris discarded after computing the shared secret
Key Derivation
IVK (Incoming Viewing Key)
|
|-- HKDF(ivk, "axiomatic.x25519.v1") --> X25519 private key
|
|-- getPublicKey(private) --> X25519 public keyThe X25519 public key is published in the stealth meta-address. The private key exists only on the client and (encrypted) on the server for cron scanning.