Skip to main content

Protocol

Encryption in use

Every cryptographic mechanism in the product, where it applies, and where none applies yet.

We use established standards and well reviewed libraries. We do not design our own ciphers. This page lists each mechanism and what it protects.

Mechanisms

ProtectsMechanismNotes
Direct messagesMLS (RFC 9420) through XMTPKeys are created and kept in your browser, one set per device.
CallsDTLS-SRTP (RFC 5764)Negotiated between the two browsers by WebRTC.
Every connectionTLSBetween your browser and our servers, XMTP and RPC providers.
Signing inECDSA signatures on secp256k1Over a Sign in with Ethereum message (EIP-4361).
SessionsJWT signed with HMAC-SHA256The algorithm is fixed on the server, so a token cannot downgrade it.
Your PINArgon2id (RFC 9106)With a salt per account and a secret held only by the server.
Community invite linksHMAC-SHA256So a link cannot be forged or altered.
Private payments wallet keyHKDF-SHA256 over an EIP-712 wallet signatureComputed in your browser. The derived secret is never sent to our servers.
Private paymentsZero knowledge proofs on Aztec, written in NoirAztec test network only. See Private payments on Aztec.

Where encryption does not apply yet

Some data is protected only by TLS on the way to our servers and by access controls once it is there. That means we can read it.

  • Messages that took the fallback path. They are labelled in the conversation.
  • Posts and messages in communities.
  • Attachments, which are stored as uploaded.
  • Your profile, your contacts and your community memberships.

When any of these changes, this table changes with it, and the change is recorded in the changelog.