Skip to main content

🔒 Changing Combination

Diffie-Hellman Ratchet

In 15 minutes: When and why to trigger new Diffie-Hellman exchanges
Prerequisite: Symmetric Key Ratchet


🎯 The Simple Story

Alice and Bob use KDF chains for message keys. When do they update RK?

When responding to a message!

  1. Alice sends message to Bob
  2. Bob received, needs to respond
  3. Both perform new DH exchange
  4. Update RK → RK_new
  5. Derive new chain keys

This is the DH ratchet.


🧠 Mental Model

Hold this picture in your head:

Alice sends to Bob:
Current state (RK, CK_A1, CK_B1)

Alice: Send message 1 with K1

Bob: Receives message 1

Bob: Wants to respond

DH Ratchet Triggered!

Bob: Create new DH key pair (Bob_EK_new)
Alice: Create new DH key pair (Alice_EK_new)

Compute DH_new = Alice_EK_new × Bob_EK_new

RK = KDF(DH_new) (new root key)

CK_A = KDF(RK) (new sending chain)
CK_B = KDF(RK) (new receiving chain)

Old RK, CK_A1, CK_B1 discarded!

Think of it like:

🔒 Combination lock (Bob replies → new combination)

🔄 Fresh start (When responding, reset cryptostate)

Key freshness (Regular DH updates prevent stagnation)


📊 See It Happen

DH ratchet timing:


🎭 When to Trigger DH Ratchet

Trigger condition: When responding to a message!

Alice's side:

  • If Alice sent last message → no DH ratchet yet
  • If Alice is responding to Bob's message → DH ratchet!

Bob's side:

  • If Bob received → respond (even if just acknowledgment)
  • Trigger DH ratchet!

🔢 The Math

# Current state
RK_old (current root key)

# Bob receives message from Alice
bob_received = true

# Bob needs to respond
if bob_received:
# DH ratchet
Bob_EK_private, Bob_EK_public ← Generate DH key pair
Alice_EK_public ← from message

DH_new = Bob_EK_private × Alice_EK_public

RK_new = KDF(DH_new)

CK_A_new = KDF(RK_new)
CK_B_new = KDF(RK_new)

Discard old RK_old, CK_A_old, CK_B_old

return RK_new

💡 Why DH Ratchet?

Benefits:

  1. Key freshness: Regular DH updates keep cryptostate fresh
  2. Post-compromise security: Even if RK compromised, new DH freshens it
  3. Eventual recovery: Compromise recovers after DH ratchet
  4. Limited damage: Compromise time limited to between DH ratchets

Without DH ratchet:

  • If RK compromised → all messages compromised (until RK manually updated)

With DH ratchet:

  • If RK compromised → only messages until next DH at risk
  • Next DH freshens RK, compromise recovers!

✅ Quick Check

When to DH ratchet?

When responding:

Not every message! Only when responding.

If Alice sends 10 messages to Bob:

  • No DH ratchet (just KDF chains) If Bob responds to message 10:
  • DH ratchet triggers!

Why DH ratchet?

Fresh keys = limited compromise:

RK compromised → only messages until next DH at risk.

Next DH adds new entropy → RK fresh → compromise recovers!


📋 Key Takeaways

Trigger: When responding to message
Purpose: Freshen RK with new DH
Both sides: Perform DH, update RK synchronously
Result: New RK, new chain keys
Benefits: Fresh keys, post-compromise security
Limit damage: Compromise only to current DH segment


🎉 What's Next

DH ratchet explained! Next: Combined System.