Technical Deep Dive · v2.0

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.
  • ATSAM PQ PairingHybrid post-quantum key agreement (X25519 + ML-KEM-768), on by default. No passwords, no accounts.

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 a relay node cooperate against you.

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

End-to-end encryption: primitives

Every direct message and group message is encrypted on the sender's device. 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 ML-KEM-768 (ATSAM) 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 between the BLE mesh and the libp2p internet bridge. 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:   mesh | bridge
}

Serverless relay: no accounts, no message store

There is no central app, account, or message server. The internet path runs over libp2p, with an optional bootstrap/relay node that only forwards encrypted bridge traffic between peers. It never sees plaintext, accounts, identities, or a contact graph, and stores nothing.

libp2p Kademlia DHT Circuit Relay v2 Noise streams Hole-punching

One Swift codebase, two native binaries

Raven runs natively on iOS 17+ and macOS 14+, with the 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 libp2p 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 · v2.1

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, rather 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, libp2p bridge, 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