For the technically curious

Under the hood

How Whisper encrypts, signs and delivers messages without any server — for developers, security teams and the curious.

Whisper is an app with two operations — Write and Read — and an address book of trusted public keys. There is no backend: messages and invites travel as links over whatever channel the user already has (SMS, email, chat, AirDrop…), and all cryptography happens on the device.

At a glance

IdentityA standard OpenSSH key pair: ssh-ed25519, ecdsa-sha2-nistp256/384/521 or ssh-rsa (≥ 2048 bits). Generated on first launch or imported from ssh-keygen.
EncryptionChaCha20-Poly1305 with a fresh random 256-bit key per message.
Key agreementX25519 (ed25519 keys), ECDH on the key’s own curve (ECDSA), or RSA-OAEP-SHA256 (RSA), with HKDF-SHA256.
AuthenticationThe sender’s SSH signature, inside the ciphertext, over the recipient’s key, the key-exchange data, a timestamp and the text.
TransportA link: https://crochik.github.io/whisper/m#…. The payload is in the URL fragment, which browsers never send to a server.
StoragePrivate key in the platform keystore (Keychain, Android Keystore, libsecret, DPAPI). History encrypted at rest under a separate vault key.
NetworkNone. No analytics, no remote fonts, no network code.
PlatformsiOS, Android, macOS, Windows, Linux and the web (Flutter).

The pages in this section