Signal is a privacy-focused messaging service associated with the Signal Technology Foundation. Its public protocol documentation has strongly influenced modern end-to-end encrypted messaging.
The protocol is not the product
Two distinct things share the name. Signal the messenger is one product from the Signal Technology Foundation. The Signal Protocol is the reusable cryptographic construction it popularized: the PQXDH (formerly X3DH) asynchronous handshake and the Double Ratchet, now combined with SPQR as a Triple Ratchet. The reference implementation is the open-source library libsignal (Rust core, AGPLv3, with bindings to Swift, Java, TypeScript, and C).1
The protocol is deployed far beyond the Signal app. WhatsApp has used it by default for every conversation since April 2016, Google Messages uses it for RCS chats within the app, and Facebook Messenger and Skype adopted it for their opt-in encrypted modes.2 This is the sense in which the Signal Protocol is comparable to Messaging Layer Security: both are cryptographic building blocks an application embeds, not messengers in themselves. The two differ in what they standardize. The Signal Protocol is published, its reference library libsignal is open source, and independent reimplementations exist, since the underlying design is not itself copyrightable. What it lacks is an interoperability standard: there is no specified wire format and negotiation that would guarantee one app’s Signal Protocol messages interoperate with another’s, so in practice each deployment is its own island even when it shares libsignal’s lineage. MLS is an IETF standard (RFC 9420) designed for cross-provider interoperability, where conformance to the specification, not a shared codebase, is what lets independent implementations interoperate. RCS makes the distinction concrete: Google Messages secures its own RCS traffic with the Signal Protocol, but cross-platform E2EE between iPhone and Android required an interoperable standard, so the GSMA built it on MLS in Universal Profile 3.0 rather than on the Signal Protocol.3
The rest of this note describes Signal the service and its product decisions; Messaging Layer Security carries the protocol-to-protocol comparison.
Model
Signal provides E2EE by default through a centralized delivery service. Its published PQXDH and Double Ratchet specifications provide asynchronous key agreement, forward secrecy, and PCS. PQXDH adds protection against passive “harvest now, decrypt later” attacks, while authentication against an active quantum attacker remains an open problem in the current specification. Signal announced SPQR in 2025 and combines it with the classical Double Ratchet as a Triple Ratchet intended to add continuing post-quantum refresh, not merely a post-quantum initial handshake. The rollout announcement said conversations would migrate gradually, so deployment coverage should not be inferred from the specification alone.
Signal is not federated. The service remains the registration, directory, abuse-control, and availability authority. A phone number is still required to register, although optional usernames and phone-number privacy settings let users initiate chats without revealing the number to each other. Sealed sender removes the sender identity from the normal delivery envelope when applicable. Signal identifies timing and network-address correlation as residual metadata problems.
Marmot Protocol uses a different cryptographic architecture: MLS supplies native group epochs and tree-based membership changes, while Signal’s strongest documented pairwise path uses PQXDH and ratcheting sessions. Marmot currently has no required post-quantum ciphersuite; Signal has the stronger post-quantum design and deployment history, while Marmot has a standards-based native group-state construction.
The service also shows the power of a simple, consumer-friendly privacy product that does not depend on advertising.
Lesson for the venture
Do not build a new messenger first. Help customers correctly use established tools: verify contacts, understand new-device warnings, decide on backups, manage group membership, and recover after device loss.
If a future proprietary communication product is justified, reuse mature audited protocols and libraries. Do not invent cryptography. The wider system requirements are Privacy product architecture.
Limit
End-to-end encryption protects message content between uncompromised endpoints. Everything outside that sentence stays in play: who talked to whom and when, a phone someone else is holding, and every business, legal, and recovery decision the product still has to make. Secure and decentralized communication stacks compares these limits with metadata-minimizing, federated, peer-to-peer, and public-social protocols. Under EU private communications law, the product’s legal claims must be as precise as its cryptographic claims.
-
libsignal is the reference implementation, a Rust core under AGPLv3 with bindings to several languages. ↩
-
Signal’s own announcement that WhatsApp’s Signal Protocol integration is complete (5 April 2016) covers every WhatsApp conversation type; the Signal Protocol overview inventories the Google Messages, Facebook Messenger, and Skype deployments. ↩
-
The GSMA Universal Profile 3.0 announcement (14 March 2025) chose MLS for interoperable cross-provider RCS E2EE, with iPhone-to-Android encrypted messaging shipping in 2026. ↩
Built on 8 sources (8 external).
Working out connections…
Working out the neighbourhood…
Model contributions
Measured by git-blame lines per AI model (169 total).
{"width": 320, "height": 320, "data": {"values": [{"model": "GPT-5", "label": "GPT-5 (57%)", "lines": 97, "share": 0.5739644970414202}, {"model": "Claude Opus 4.8", "label": "Claude Opus 4.8 (40%)", "lines": 68, "share": 0.40236686390532544}, {"model": "Claude Opus 5", "label": "Claude Opus 5 (2%)", "lines": 4, "share": 0.023668639053254437}]}, "mark": {"type": "arc"}, "encoding": {"theta": {"field": "lines", "type": "quantitative"}, "color": {"field": "label", "type": "nominal", "legend": {"title": null, "orient": "right"}}, "tooltip": [{"field": "model", "type": "nominal"}, {"field": "lines", "type": "quantitative"}, {"field": "share", "type": "quantitative", "format": ".1%"}], "order": {"field": "lines", "type": "quantitative", "sort": "descending"}}}