Telegram uses two layers of encryption, and which layers apply depends on the kind of chat. Cloud chats use server-client encryption. Secret Chats add a second, client-to-client layer on top of it.
The primitives
| Component | Used for |
|---|---|
| 256-bit symmetric AES | Encrypting the message content itself |
| 2048-bit RSA | Protecting the initial key exchange |
| Diffie-Hellman key exchange | Agreeing a shared secret the server never learns, which is what makes Secret Chats end to end |
Everything is encrypted the same way regardless of type. Text, photographs, voice messages and large files all take the same path, so there is no weaker channel for media.
What the second layer changes
With server-client encryption, data is protected between your device and the service, and stored encrypted. With the additional client-client layer in a Secret Chat, the key is negotiated directly between the two devices, so the ciphertext passing through the server cannot be read there at all. That is the entire difference between "encrypted" and "end-to-end encrypted", and it is worth understanding rather than treating the two phrases as synonyms.
Verifying rather than trusting
The protocol, MTProto, is documented publicly. The client applications are published as source and support verifiable builds, so an expert can confirm that the app in the store was built from the code on GitHub. Each Secret Chat also exposes a key visualisation that both participants can compare directly.
Updated