A complete technical breakdown of how Zevra achieves zero-knowledge, end-to-end encrypted real-time communication — SRP-6a, X25519, Ed25519 and AES-256-GCM, wired through a blind relay.
Phase 01
SRP-6a
Phase 02
X25519
Phase 03
Ed25519
Phase 04
AES-256-GCM
Follow a single message from your keystroke to your contact's screen. The relay appears in the middle — and never holds a key.
Step 01
Plaintext exists only in this tab's memory.
Step 02
AES-256-GCM seals it with a fresh IV.
Step 03
Ed25519 proves who wrote it.
Step 04
The server routes a blob it cannot open.
Step 05
Socket.IO pushes it to the peer device.
Step 06
Peer verifies the signature, then renders.
From authentication to delivery, every step is designed to keep your data confidential and authenticated.
Sign-in runs the Secure Remote Password protocol, so your password never travels over the network. The client produces a proof (A) and verifier (M1); the server answers with its own (B, M2). Both sides arrive at the same session key while neither reveals the password.
Every session mints ephemeral X25519 key pairs. Curve25519 Diffie-Hellman establishes a shared secret with no prior contact required — an observer holding the full transcript still cannot derive it without solving the elliptic-curve discrete logarithm problem.
Key exchanges and payloads are signed with Ed25519, so you can prove a message genuinely came from your contact and was not altered in transit. Signatures are fast enough to verify on every message without perceptible latency.
Message content is sealed with AES-256-GCM, which gives confidentiality and integrity in a single pass. Every message carries a fresh random IV and a 128-bit auth tag, so any modification is detected and rejected before rendering.
Nothing custom where a published RFC already exists — every layer maps to a single, audited algorithm.
| Layer | Algorithm | Purpose |
|---|---|---|
| Authentication | SRP-6aRFC 5054 · 2048-bit MODP | Password-based auth without exposing the password |
| Key Exchange | X25519Curve25519 | Ephemeral Diffie-Hellman session keys |
| Digital Signature | Ed25519EdDSA | Key integrity and identity proof |
| Symmetric Encryption | AES-256-GCM128-bit IV · 128-bit tag | Authenticated encryption for messages and files |
| Key Derivation | PBKDF2100K iterations · SHA-256 | Password → key material |
| Key Wrapping | AES-KWRFC 3394 | Protects stored cryptographic keys at rest |
Seven REST endpoints and eight socket events — the entire surface a client can ever touch.
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Client A │ │ Client B │ │ Client C │
│ (Browser) │ │ (Browser) │ │ (Browser) │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ X25519/AES-256 │ X25519/AES-256 │ X25519/AES-256
│ │ │
───────┼────────────────────┼────────────────────┼───────
│ │ │
┌──────▼────────────────────▼────────────────────▼───────┐
│ Load Balancer │
└──────┬────────────────────┬────────────────────┬───────┘
│ │ │
┌──────▼───────┐ ┌──────▼───────┐ ┌──────▼───────┐
│ Node 1 │ │ Node 2 │ │ Node 3 │
│ (Stateless) │ │ (Stateless) │ │ (Stateless) │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
───────┼────────────────────┼────────────────────┼───────
│ │ │
┌──────▼────────────────────▼────────────────────▼───────┐
│ Redis (Pub/Sub + BullMQ) │
│ Message Queues + Session State │
└────────────────────────────────────────────────────────┘
Every message is encrypted client-side before transmission. Zevra servers process only ciphertext.
Built for millions of concurrent encrypted sessions with sub-10ms fan-out.
Each connected client subscribes to a personal channel. Messages fan out in microseconds with at-most-once semantics, so nothing is duplicated and nothing stalls behind a polling loop.
Redis-backed queues handle delivery retries, push fan-out and priority scheduling, with rate limits and exponential backoff baked into the workers themselves.
Stateless nodes sit behind a load balancer with session state in Redis, so any node can answer any request. Scaling out is horizontal and boring — exactly how infrastructure should be.
Nodes store blobs they structurally cannot decrypt. A complete database dump yields ciphertext and hashed identifiers only — server compromise does not equal data compromise.
| Feature | Zevra | Signal | |
|---|---|---|---|
| Password Transmitted | Never | Hashed | Never |
| Key Storage | Client-side only | Server backup | Client + optional backup |
| Encryption Protocol | AES-256-GCM + X25519 | Signal Protocol | Signal Protocol |
| Authentication | SRP-6a | Phone number | Phone number |
| Open Source | Fully auditable | Partial | Fully auditable |
| Video Conferencing | E2EE | E2EE | E2EE |
| Zero-Knowledge Server | Yes | No | No |