🔥 Burn after Reading
Forward Secrecy Explained
In 15 minutes: Understand why compromising a key doesn't reveal past communications
Prerequisites: Ratcheting + Double Ratchet
🎯 The Simple Story
Alice sends Bob her password.
Without forward secrecy:
- Eve steals Bob's device at message 10
- Eve reads password (message 1) using same key
- ❌ Past messages compromised!
With forward secrecy:
- Eve steals Bob's device at message 10
- Eve reads message 10 only
- Messages 1-9 deleted, can't decrypt
- ✅ Past messages safe!
🧠 Mental Model
Hold this picture in your head:
Without Forward Secrecy:
Shared secret S (same for all messages)
Message 1: Encrypt with S → C1 (store C1)
Message 2: Encrypt with S → C2 (store C2)
...
Message 10: Encrypt with S → C10 (store C10)
Eve steals device: Has S
Eve can decrypt: C1..C10 (all messages!)
With Forward Secrecy:
Message 1: K1 = KDF(RK, 1), encrypt C1, DELETE K1
Message 2: K2 = KDF(RK, 2), encrypt C2, DELETE K2
...
Message 10: K10 = KDF(RK, 10), encrypt C10, DELETE K10
Eve steals device: No K1-K9 (already deleted!)
Eve has K10: Can decrypt C10 only
Eve can't decrypt: C1..C9 (keys gone!)
Think of it like:
🔥 Burn after reading (Key used then incinerated)
🗑️ Disposable camera (One-time use) 📍 Time capsule (Can't go back to past)
📊 See It Happen
Compromise scenarios:
🔢 The Math
With vs Without
Without forward secrecy:
S = KDF(RK)
Msg 1: Encrypt(msg1, S) → C1
Msg 2: Encrypt(msg2, S) → C2
Msg 10: Encrypt(msg10, S) → C10
Eve steals: Has S
Eve decrypts: msg1-msg10 (all!)
Compromise = 100% of conversation
With forward secrecy:
RK = KDF(DH_new) (from X3DH)
Msg 1: K1 = KDF(RK, 1), Encrypt(C1, K1), Delete K1
Msg 2: K2 = KDF(RK, 2), Encrypt(C2, K2), Delete K2
Msg 10: K10 = KDF(RK, 10), Encrypt(C10, K10), Delete K10
Eve steals: Has K10 only (RK not needed for past messages)
Eve decrypts: msg10 only
Eve can't decrypt: msg1..msg9 (K1-K9 deleted)
Compromise = 1 message (msg10)!
💡 Why Forward Secrecy?
Real-world impact:
Alice tells Bob:
- Msg 1: "My password is secret123"
- Msg 2: "My bank account is 12345"
- ...
- Msg 10: "I love you"
Without forward secrecy: Eve steals device → Reads all → All secrets compromised! ❌ Alice's password exposed ❌ Alice's bank account exposed ❌ Alice's love letter exposed
With forward secrecy: Eve steals device → Reads msg 10 only ("I love you") ✅ Password safe (K1 deleted) ✅ Bank account safe (K2 deleted) ✅ Love letter read (K10 exists, compromise limited to msg 10)
✅ Quick Check
What does forward secrecy provide?
Compromise limits:
Compromise at message i = Only message i affected.
Past messages (1..i-1): Safe (K1-K(i-1) deleted) Future messages (i+1): Safe (need new DH, no RK for future msgs)
How to achieve?
K_i per message:
K1 used → delete K2 used → delete K3 used → delete ...
Can't recover K_(i-1) from K_i (KDF is one-way).
📋 Key Takeaways
✅ Forward secrecy = Compromise doesn't reveal past communications
✅ Implementation: K_i used → deleted (per message)
✅ Benefit: Eve stealing device only reads current message
✅ Without: Same key S for all messages → all compromised
✅ With: K_i per message → only current at risk
✅ KDF: One-way (can't reverse old K_i from new)
🎯 Summary
Forward secrecy is the core benefit of the Double Ratchet!
Next: Advanced topics.