Send a message to begin the conversation.

Choose sender
Forward Secrecy Every message sent Unique message key DH Ratchet Break-in Recovery Direction change New root + chain keys

Symmetric Ratchet:

Uses HKDF to derive a unique message key from a chain key:


MK[n] = HKDF(CK[n], salt=0x01, "ratchet-wire-message")
CK[n+1] = HKDF(CK[n], salt=0x02, "ratchet-wire-chain")
                

DH Ratchet:

Uses X25519 ephemeral key pairs to derive a new root key:


root_new = HKDF(root_old, DH(my_private, their_public), "root")
                

Key Properties

This Demo vs. Production

Simplified (for demo):

Production (Signal, WhatsApp):

References

Credits

The Double Ratchet Algorithm was developed by Trevor Perrin and Moxie Marlinspike (2016), building on prior work in the Off-the-Record Messaging (opens in new tab) protocol.