Security
This page describes how Knock actually protects your conversations today, and where those protections stop. It's written to be checked against the code, not to sound reassuring. If a claim here is ever wrong, please tell us.
What is end-to-end encrypted
Encrypted on your device before it ever reaches Knock's server, and readable only by the devices in the conversation:
- message text;
- photos, videos, voice messages and files (each with its own random encryption key);
- reactions, replies, edits and deletions — these travel as ordinary encrypted messages, marked so they don't trigger a notification.
Encryption uses libsignal, the open-source implementation of the Signal Protocol maintained by Signal Messenger: PQXDH session setup (including one-time post-quantum ML-KEM/Kyber prekeys) and the Double Ratchet with SPQR, Signal's post-quantum ratchet extension. Knock does not implement its own cryptographic primitives.
Encryption is per device, not per account
Every device you sign in on has its own encryption keys and its own encrypted session with every other device in a conversation. There is no shared account key. A message is encrypted separately for each of your friend's devices, and for your own other devices.
Encrypted storage on your device
Decrypted messages, and all of your private encryption key material, are stored in a local database encrypted at rest (SQLCipher, AES-256). The database key is generated on your device and held by the iOS Keychain or Android Keystore — never sent to Knock's server, never included in the database file itself. If that key can't be read or doesn't unlock the database, Knock fails closed: it will not silently store anything unencrypted.
What Knock's server cannot see
The content of your messages, photos, videos, voice messages and files, and the content of your reactions, replies, edits and deletions (including which message they refer to). Your private encryption keys and session state never leave your device.
What Knock's server can see
To connect and deliver conversations, Knock's server does process:
- your account details: username, display name, and (if you add one) a profile photo;
- which devices you're signed in on, and their public encryption keys;
- who you're talking to, and when — conversation membership, message timestamps and order;
- the encrypted size of a message or file (padded, but not hidden);
- delivery and read status, and typing indicators;
- whether you're online right now and when you were last seen, if you've allowed that (see below);
- connection metadata such as IP address and connection times.
This is metadata Knock needs to route conversations — it is not message content, and it is not end-to-end encrypted.
Profile photos are not end-to-end encrypted
Unlike everything else on this page, a profile photo you add is stored as a plain image file and is readable by Knock's server and its storage host. It's optional, and removing it deletes the stored file.
How encrypted media works
Photos, videos, voice messages and files never travel inside a message the way text does. Each file is encrypted on your device with its own random key using authenticated encryption (AES-256-GCM, in a streaming construction, so a whole file is never held unencrypted in memory), then uploaded as an opaque encrypted blob. The key itself travels only inside the encrypted message content — the server never has it and never sees the file's real contents, name, or type.
Presence and read receipts
Seeing when someone's online, and read receipts, both depend on the server knowing your state — they are not, and cannot be, end-to-end encrypted the way message content is. Both are reciprocal and controllable in Settings: if you turn off sharing your presence, you stop seeing everyone else's too; the same is true for read receipts. Either is visible only to people you already share a conversation with.
Backups
Server backups contain the same data described above — usernames, conversation membership, timestamps, ciphertext — never readable message content or private keys. They are still sensitive (they reveal who talks to whom, and when) and are treated and protected accordingly. Knock does not currently offer encrypted chat-history backup to a new device; if you lose every device that held your keys, that conversation history cannot be recovered by Knock or anyone else.
Current alpha limitations
Read this section as carefully as the rest. Knock is a private alpha, and:
- the encryption implementation has not had an independent security review;
- there is no interface yet to verify a friend's identity (compare "safety numbers"); a new device is trusted automatically the first time you talk to it, which is a known limitation of the underlying protocol without verification;
- testing so far has focused on simulators and emulators, with limited testing on physical devices;
- a compromised device, or malware on it, is outside what any of this protects against.
Knock does not describe itself as "unbreakable," "military-grade," "zero-knowledge," or as strong as any specific other messenger. Those words don't hold up to scrutiny, and we'd rather be checked than sound impressive.
Open-source components
Knock's encryption relies on open-source software, including libsignal (licensed AGPL-3.0-only) and SQLCipher. An in-app open-source notices screen is planned but not yet shipped.