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
| Identity | A 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. |
| Encryption | ChaCha20-Poly1305 with a fresh random 256-bit key per message. |
| Key agreement | X25519 (ed25519 keys), ECDH on the key’s own curve (ECDSA), or RSA-OAEP-SHA256 (RSA), with HKDF-SHA256. |
| Authentication | The sender’s SSH signature, inside the ciphertext, over the recipient’s key, the key-exchange data, a timestamp and the text. |
| Transport | A link: https://crochik.github.io/whisper/m#…. The payload is in the URL fragment, which browsers never send to a server. |
| Storage | Private key in the platform keystore (Keychain, Android Keystore, libsecret, DPAPI). History encrypted at rest under a separate vault key. |
| Network | None. No analytics, no remote fonts, no network code. |
| Platforms | iOS, Android, macOS, Windows, Linux and the web (Flutter). |
The pages in this section
Message format & cryptography
The envelope, key agreement per key type, signatures, padding and message sizes.
Read →Keys & ssh-keygen compatibility
Which OpenSSH key types Whisper supports, which it doesn't and why, and how import/export works.
Read →Invites & safety codes
The signed contact card, what it proves and doesn't, safety codes, QR codes and vCards.
Read →Links & privacy
How message and invite links work, why the payload never reaches a server, and how app links fall back to the web.
Read →Storage, history & app lock
Where keys live, how message history is encrypted at rest, and what the app lock does.
Read →What Whisper protects against
The threats Whisper is designed for, and the ones it is not.
Read →Platforms & languages
Where Whisper runs, platform-specific notes and supported languages.
Read →