Encryption in transit
Client-to-node traffic
T3N uses two layers of encryption to protect data in transit:- HTTPS protects the client connection to the deployment’s public load balancer.
- Core Session API paths add application-layer encryption. The client and node establish a shared secret with ML-KEM-768, derive directional keys with HKDF-SHA256, and encrypt payloads with AES-256-GCM.
/status endpoint.
In some cases (e.g., trusted B2B integrations), session-authenticated endpoints only rely on HTTPS and trusted party’s specific authentication (e.g, HMAC, EOA signatures, and bearer tokens).
Handshake
An end-to-end encrypted channel is established using ML-KEM (FIPS 203): The shared secret K is never transmitted: the client derives it during encapsulation and the node recovers it by decapsulating inside the TEE. The handshake response itself carries only the session identifier and expiry — a lookup handle with no key material — protected by HTTPS like the rest of the exchange. The node does not contact other nodes during each client handshake to jointly decrypt the ML-KEM ciphertext. Instead:- During startup, the node participates in the threshold process and reconstructs/recovers the wrapping secret key.
- It keeps that key inside the TEE.
- For each handshake, it uses the already-recovered key locally.
t3n-session-v1-c2s: client encrypts, server decrypts.t3n-session-v1-s2c: server encrypts, client decrypts.
Sessions are node-affine: the node that handles the handshake stores the session state in memory, and later requests in that session must return to that node.
Requests and responses
For paths that use Session API application-layer encryption, every encryption operation:- Generate a fresh random 12-byte nonce
- Encrypt the payload with AES-256-GCM
- Prepend the nonce to the ciphertext
- Verify the authentication tag during decryption
Node-to-node traffic
Node-to-node traffic first uses libp2p Noise for an encrypted, peer-authenticated channel. T3N then applies a TEE protocol upgrade in which peers:- Exchange fresh challenges
- Bind their libp2p identity to a TEE attestation quote
- Verify the quote and approved TEE measurements
- Compare a Keccak-256 digest of the cluster configuration
Encryption at rest
Private ledger data
T3N stores application state in named key-value collections called maps. Every committed transaction is recorded in the replicated ledger as a set of changes to those maps. Each ledger entry separates these changes into:- a public domain, containing changes to maps whose names start with
public: - a private domain, containing changes to all other maps
Private binary large objects (blobs)
Content addressable storage (CAS) can be configured for storing large binary objects:- Compute a SHA-256 content identifier (CID) from the plaintext;
- Encrypt the blob with AES-256-GCM under the CAS content encryption key (CEK);
- Store the blob under the CID-derived object key; and
- Store a
ValueRefin the KV map.
ValueRef records the CID, size, storage location, encryption status, and last-touch time. On read, T3N decrypts encrypted blobs and verifies that the plaintext hash matches the CID.