A normal TLS 1.3 handshake costs one round trip before the client can send data. If the client has a PSK from a previous session (a resumption ticket), it already shares a secret with the server — so it can send application data (“early data”) immediately, in its very first flight, encrypted right away. Zero round trips before useful data: 0-RTT.

The early-data key is derived from the Early Secret:

And crucially, Early Secret = Extract(0, PSK) — derived from the PSK alone, before the ephemeral DH secret Z is mixed in (that happens at the Handshake Secret stage). Both weaknesses of 0-RTT fall directly out of this one fact:

  1. No forward secrecy. Normal TLS gets forward secrecy from the ephemeral DH keys being discarded. But the PSK is long-lived. If an attacker records the 0-RTT traffic and later compromises the PSK, they can decrypt that early data — no ephemeral secret ever protected it.

  2. Replayable. Normal TLS binds the client’s data to a fresh, server-chosen value before the server acts. But 0-RTT data is a function of PSK + ClientHello only — sent before the server contributes any freshness. A network attacker can capture and resend the whole early-data flight, and the server can’t cryptographically distinguish a replay from the original.

Hence the spec is blunt: 0-RTT replay cannot be cryptographically prevented, only mitigated — restrict early data to idempotent operations, use single-use tickets, or a bounded-window replay cache.

See also

References

Questions

flashcards/software-engineering/tls

What single design choice causes 0-RTT to lack both forward secrecy and replay protection?::Its early key comes from the Early Secret (PSK alone) before the ephemeral DH secret is mixed in — so no forward secrecy, and no server freshness yet, so it can be replayed

Why can 0-RTT early data be replayed?::It’s a function of PSK + ClientHello only, sent before the server contributes any fresh value, so a captured flight can be resent and looks identical to the original

0-RTT replay cannot be cryptographically prevented, only mitigated — e.g. restricting early data to idempotent operations, single-use tickets, or a replay window.