Technical Deep Dive · v1.5

How encryption survives offline

The cryptography, mesh protocol, and hybrid transport that keep the same end-to-end guarantees whether you're on the network or in a Bluetooth-only room. Shipping today on iOS 17+ and macOS 14+, written end-to-end in Swift.

Security upgrade · 2026

Raven's end-to-end encryption — extended to Bluetooth mesh.

Every conversation runs on X3DH key agreement and the Double Ratchet, wrapped inside the ATSAM protocol stack. That brings forward secrecy (a key leak today reveals nothing about yesterday's messages) and post-compromise security (a single new handshake heals every channel going forward) to every Raven chat. Crucially, the same protocol runs over a 5-hop Bluetooth mesh — the cryptographic guarantees do not depend on the internet being up.

  • X3DHAsynchronous initial key exchange — start a chat while the recipient is offline.
  • Double RatchetPer-message symmetric + DH ratcheting; keys evolve forward and erase the past.
  • Safety NumbersSHA-512-derived 60-digit fingerprint, comparable in person, on a call, or by QR.
  • Signed PreKeysRecipient publishes a signed batch so first contact handshakes survive cold start.
  • OPAQUE PAKE · soonZero-knowledge password authentication (RFC 9497) — server never sees the password.

🛰️ Session establishment — X3DH + Double Ratchet

Raven's session establishment follows the published X3DH spec. The initial root key is derived from up to four Diffie–Hellman outputs combining identity, signed-prekey, ephemeral and one-time-prekey contributions:

DH1 = DH(IK_A, SPK_B)        // authenticates A's identity to B
DH2 = DH(EK_A, IK_B)        // authenticates B's identity to A
DH3 = DH(EK_A, SPK_B)       // forward-secrecy contribution
DH4 = DH(EK_A, OPK_B)       // one-time post-compromise security

SK  = HKDF-SHA256(DH1 ‖ DH2 ‖ DH3 [‖ DH4])

The session immediately moves to the Double Ratchet, which combines a symmetric ratchet (chain-key advanced per message) with a DH ratchet (root key re-derived each round trip). The result:

X3DH Double Ratchet X25519 ECDH HKDF-SHA256 Ed25519 SPK signature

🧬 Safety Numbers — verify the human, not the network

End-to-end encryption is only meaningful if you're talking to the right person. Raven's Safety Numbers use a deterministic fingerprint construction: take both identity public keys, sort them, hash them through SHA-512 5,200 times, and render the first 30 bytes as a 60-digit grouped number. Compare it once — read aloud, scan as a QR, or check in person — and a man-in-the-middle becomes cryptographically detectable, even if the carrier, the ISP, and our own server cooperate against you.

SHA-512 ×5200 Sorted IK pair QR or voice compare

🔐 End-to-end encryption — primitives

Every direct message, group message, post, and comment is encrypted on the sender's device. The server, relay nodes, and any device in between only ever see opaque ciphertext.

X25519 ECDH AES-256-GCM ChaCha20-Poly1305 Ed25519 HMAC-SHA-256 HKDF-SHA256 Argon2id (login) SQLCipher (AES-256)

📡 Bluetooth-LE mesh protocol

Raven turns every device into both a BLE peripheral and a BLE central simultaneously. Encrypted message frames hop from device to device, store-and-forward, until they reach the recipient — no router, no cell tower, no internet required.

CoreBluetooth BLE 5.0 Spray-and-Wait TTL · 5 hops SHA-256 dedup Anti-replay

🌐 Hybrid delivery — three modes, one envelope

The on-device router picks the cheapest delivery path that's actually working. The decision logic is local — no cloud lookups, no pre-flight checks.

📦 MeshEnvelope — the universal message format

Every payload travels in the same envelope, regardless of transport. The wrapper carries just enough routing metadata for the network to do its job — and not a byte more.

MeshEnvelope {
  id:           SHA-256 hash         // dedup + content addressing
  sender_id:    Hash(device_pubkey)  // anonymised identity
  recipient_id: Hash(target_pubkey)  // routing target
  payload:      AES-256-GCM(blob)    // opaque ciphertext
  signature:    Ed25519(envelope)    // origin authentication
  hmac:         HMAC-SHA-256         // integrity (cheap drop)
  ttl:          uint8                // hops remaining (default 5)
  timestamp:    ISO-8601 UTC         // anti-replay window
  nonce:        uint64 random        // per-message uniqueness
  route_type:   online | direct | bridge
}

⚡ Server architecture

The server is a thin relay — a stateless FastAPI service that accepts encrypted envelopes, fans them out via WebSocket and APNs, and parks them in PostgreSQL for offline pickup. Cost-wise it scales to zero when nobody's chatting.

Python 3.11 FastAPI WebSocket PostgreSQL 15 Cloud Run APNs HTTP/2

🍎 One Swift codebase, two native binaries

Raven runs natively on iOS 17+ and macOS 14+ — same Swift sources, same business logic, same crypto. We use Mac Catalyst with platform-specific shells so the Mac build feels native to macOS 26 (Liquid Glass UI, capsule sidebar, ⌘-shortcuts) without forking the codebase.

Swift 5.10 SwiftUI Catalyst CoreBluetooth Multipeer Connectivity Foundation Models

🧠 On-device intelligence

Smart features run locally — no prompts ever leave the device.

Foundation Models Apple Translation SFSpeechRecognizer

📊 What Raven sets out to do

Raven is built around a specific problem: keeping trusted users connected when the internet is unavailable, while keeping the same end-to-end protections that apply when it is. The list below is what Raven aims to ship, on its own terms, without framing it against any other product.

🎯 Threat model — what Raven defends against

Out of scope: a sophisticated attacker with persistent access to the unlocked device, or one capable of compromising Apple's Secure Enclave. We document the boundary honestly rather than overpromise.

📋 What's not yet shipped — and when it is

Trust in a messenger is earned by what you ship and what you admit. Below is the honest list of items a security researcher would (correctly) call out today, paired with the version that closes each gap. If we miss a date, we will say so publicly.

Next release · v1.6

Committed · 2026 H2

Why the bluntness? Because security marketing copy that overpromises makes every other claim suspect. We'd rather tell you exactly what's done, exactly what's coming, and let you make an informed choice — than wave hands and lose the trust of the readers who matter most.

👨‍💻 Architected & built by Ahmadreza

Raven is independently designed and built — every line of crypto, mesh routing, server code, and UI ships from one author. The cryptographic core (X3DH, Double Ratchet, MeshEnvelope, BLE transport) will be open-sourced alongside the third-party audit in 2026 H2; until then, security researchers can request review access today.

Reach out →

Want to audit it?

Security researchers and review partners can request access to the cryptography and mesh protocol sources. We'd rather you check than take our word for it.

Request review access Download for iOS