demo · v131
handshake bytes: classical vs hybrid
Pure X25519 keyshares are 32 bytes. Kyber768 keyshares are 1,184 bytes. The hybrid scheme concatenates them, so your ClientHello grows by ~1.2KB. That's typically fine for TCP but matters for QUIC's first-flight and for embedded IoT clients on tight buffers. Visualise the size delta.
classical TLS 1.3 (X25519)
→ ClientHello — key_share: X25519 (32B)
← ServerHello — key_share: X25519 (32B)
↔ Application data (encrypted)
client key_share size
32 bytes
hybrid TLS 1.3 (X25519 + Kyber768)
→ ClientHello — key_share: X25519 (32B) || Kyber768 (1184B) = 1216B
← ServerHello — key_share: X25519 (32B) || Kyber768 (1088B) = 1120B
↔ Application data (encrypted)
client key_share size
1216 bytes (38x larger)
why it still ships
1.2KB is well under typical MTU. TCP handles it transparently. QUIC's 1-RTT initial packets can fragment the ClientHello over multiple packets, which costs a half-RTT — but the trade-off (post-quantum confidentiality forever) wins. Embedded IoT is the one edge case to test.
see also
scenario focus
Select a scenario to focus its rendered example and summary.