{"id":362,"date":"2026-09-05T04:24:11","date_gmt":"2026-09-05T04:24:11","guid":{"rendered":"https:\/\/neodata.com.uy\/labs\/two-key-exchanges-still-make-one-protocol\/"},"modified":"2026-09-05T04:24:11","modified_gmt":"2026-09-05T04:24:11","slug":"two-key-exchanges-still-make-one-protocol","status":"publish","type":"post","link":"https:\/\/neodata.com.uy\/labs\/two-key-exchanges-still-make-one-protocol\/","title":{"rendered":"Two key exchanges still make one protocol."},"content":{"rendered":"<p><!--\nWORDPRESS CONTENT: editorial notes removed\n--><\/p>\n<p class=\"nlabs-kicker\">HYBRID KEY ESTABLISHMENT<\/p>\n<h2 id=\"why-combining-x25519-and-ml-kem-is-more-than-concatenating-secrets\">Why combining X25519 and ML-KEM is more than concatenating secrets.<\/h2>\n<p>Post-quantum transition creates an uncomfortable interval. Traditional elliptic-curve key exchange has extensive deployment experience but is vulnerable to a sufficiently capable quantum computer. ML-KEM addresses that future threat but is newer, larger and less tested across operational environments.<\/p>\n<p>A hybrid key exchange runs both. Its intended guarantee is that the resulting key remains secure if at least one component retains its security.<\/p>\n<p>That guarantee belongs to the combiner and the containing protocol. Two individually sound exchanges do not automatically compose into one sound handshake.<\/p>\n<h2 id=\"two-contributions-one-key-schedule\">Two contributions, one key schedule<\/h2>\n<p>A traditional component such as X25519 produces a Diffie-Hellman shared secret. ML-KEM encapsulation produces a post-quantum shared secret and ciphertext. The hybrid construction feeds both contributions into a defined key-derivation process.<\/p>\n<p>Simple concatenation followed by an unspecified hash is not a complete construction. The combiner may need to bind public keys, ciphertexts, labels and algorithm identifiers so that an attacker cannot create equivalent outputs under different interpretations.<\/p>\n<p>Concrete hybrids such as X-Wing make those choices for one specific pair. Generic combiner frameworks need stronger conditions because they cannot rely on properties unique to that pair.<\/p>\n<h2 id=\"the-protocol-must-bind-the-negotiation\">The protocol must bind the negotiation<\/h2>\n<p>A client and server need to agree on the hybrid group. If an attacker can remove the post-quantum offer or change the selected algorithm without detection, the connection can fall back to a traditional exchange.<\/p>\n<p>TLS 1.3 binds supported groups, key shares and the selected parameters into its authenticated transcript. Hybrid security depends on that transcript authentication completing before application data is trusted.<\/p>\n<p>A compatibility fallback performed outside the handshake may not receive the same protection. Algorithm agility needs downgrade resistance, not merely several code paths.<\/p>\n<h2 id=\"failure-of-one-component-must-not-select-the-other\">Failure of one component must not select the other<\/h2>\n<p>A hybrid is not a negotiation that tries ML-KEM and uses X25519 when decapsulation fails. Both contributions are expected in the selected construction.<\/p>\n<p>Malformed public keys, invalid ciphertext lengths and decapsulation failures require protocol-defined handling. Returning detailed errors or timing differences can create an oracle around the post-quantum implementation.<\/p>\n<p>Implicit rejection inside ML-KEM and constant-time processing reduce some risks, but the outer protocol still needs uniform failure behaviour.<\/p>\n<h2 id=\"larger-keys-change-the-network\">Larger keys change the network<\/h2>\n<p>ML-KEM public keys and ciphertexts are much larger than an X25519 key share. A hybrid ClientHello can cross packet, record or radio-fragment boundaries that a traditional handshake did not.<\/p>\n<p>This affects latency, loss amplification, middleboxes, maximum message sizes and denial-of-service exposure. Offering several hybrid variants can duplicate large ML-KEM key shares.<\/p>\n<p>The correct benchmark includes encoded handshake size, fragmentation and retry behaviour on the actual network, not only microseconds spent in encapsulation.<\/p>\n<h2 id=\"constrained-devices-may-split-the-boundary\">Constrained devices may split the boundary<\/h2>\n<p>A secure element may support P-256 but not ML-KEM. A host can then compute the post-quantum component in software while the secure element contributes the traditional secret.<\/p>\n<p>This preserves some value, but the final traffic key normally exists in the host key schedule. The hardware no longer contains the complete confidentiality boundary.<\/p>\n<p>Designs should state which component generates each key pair, where decapsulation occurs, which intermediate secrets cross an interface and which party performs the combiner.<\/p>\n<h2 id=\"randomness-requirements-are-not-identical\">Randomness requirements are not identical<\/h2>\n<p>ECDHE private scalars and ML-KEM encapsulation randomness have different derivation and reuse constraints. A single failing random source may affect both if the implementation feeds them from one poorly managed state.<\/p>\n<p>Domain-separated deterministic expansion from a well-seeded generator can avoid accidental overlap while preserving independent inputs. Tests should include cloned processes, resumed virtual machines and embedded-device reboot paths.<\/p>\n<h2 id=\"authentication-remains-a-separate-transition\">Authentication remains a separate transition<\/h2>\n<p>A hybrid key exchange protects session-key establishment. If the server authenticates the transcript with RSA or ECDSA, a future quantum attacker may still forge that authentication once those algorithms become vulnerable.<\/p>\n<p>Recorded traffic is protected against harvest-now-decrypt-later when key establishment is post-quantum secure. Long-term authenticity has a different migration schedule and often a more difficult certificate ecosystem.<\/p>\n<p>A deployment claim should distinguish post-quantum confidentiality from post-quantum authentication.<\/p>\n<h2 id=\"cryptographic-redundancy-is-not-implementation-independence\">Cryptographic redundancy is not implementation independence<\/h2>\n<p>Both algorithms may share one library, allocator, random source and parser. A memory-safety error or transcript bug can defeat the combined handshake without breaking either mathematical assumption.<\/p>\n<p>Hybridization hedges against cryptanalytic failure of a component. It does not automatically hedge against common implementation, supply-chain or operational failures.<\/p>\n<h2 id=\"testing-must-break-each-half\">Testing must break each half<\/h2>\n<p>A useful hybrid test suite verifies more than successful agreement. It should alter each public key and ciphertext, remove each component, change ordering, force unsupported identifiers and compare both parties&#8217; derived transcripts.<\/p>\n<p>Interoperability tests should exercise maximum lengths, fragmentation, HelloRetryRequest, session resumption and failure after one component has completed.<\/p>\n<p>Negative tests establish that the implementation requires the hybrid, rather than merely supporting it.<\/p>\n<h2 id=\"migration-is-the-purpose-not-an-exception\">Migration is the purpose, not an exception<\/h2>\n<p>Hybrid key exchange is a transition mechanism. Its value is the ability to deploy post-quantum protection while retaining confidence in a traditional component.<\/p>\n<p>That period may last years. Systems need telemetry that distinguishes negotiated groups, a policy for disabling traditional-only paths and an eventual plan for removing redundant components when evidence supports it.<\/p>\n<p>The work connects directly to <a href=\"https:\/\/neodata.com.uy\/labs\/what-post-quantum-migration-costs-at-the-edge\/\">post-quantum migration at the edge<\/a> and to <a href=\"https:\/\/neodata.com.uy\/labs\/algorithm-agility-is-an-operational-property\/\">algorithm agility as an operational property<\/a>.<\/p>\n<h2 id=\"one-handshake-one-security-argument\">One handshake, one security argument<\/h2>\n<p>A hybrid construction contains two hard problems but produces one session key. Its security depends on how contributions are encoded, combined, negotiated and authenticated.<\/p>\n<p>Every failure path, message boundary and hardware split belongs to the same protocol analysis.<\/p>\n<p>Two key exchanges still make one protocol because the application ultimately trusts one result.<\/p>\n<hr \/>\n<h2 id=\"references\">References<\/h2>\n<ol type=\"1\">\n<li><a href=\"https:\/\/www.rfc-editor.org\/info\/rfc9954\/\">RFC 9954: Hybrid Key Exchange in TLS 1.3<\/a><\/li>\n<li><a href=\"https:\/\/www.rfc-editor.org\/info\/rfc10024\/\">RFC 10024: PQ\/T Hybrid Key Agreement Mechanisms for TLS 1.3<\/a><\/li>\n<li><a href=\"https:\/\/datatracker.ietf.org\/doc\/draft-connolly-cfrg-xwing-kem\/\">X-Wing: General-Purpose Hybrid Post-Quantum KEM<\/a><\/li>\n<li><a href=\"https:\/\/csrc.nist.gov\/pubs\/fips\/203\/final\">FIPS 203: Module-Lattice-Based Key-Encapsulation Mechanism<\/a><\/li>\n<li><a href=\"https:\/\/www.rfc-editor.org\/info\/rfc9958\/\">RFC 9958: Post-Quantum Cryptography for Engineers<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>A hybrid key exchange combines a traditional contribution with a post-quantum one. Its guarantee depends on the combiner, transcript, negotiation and every failure path around both components.<\/p>\n","protected":false},"author":2,"featured_media":360,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"nlabs_article_type":[],"class_list":["post-362","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-research"],"_links":{"self":[{"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/posts\/362","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/comments?post=362"}],"version-history":[{"count":0,"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/posts\/362\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/media\/360"}],"wp:attachment":[{"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/media?parent=362"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/categories?post=362"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/tags?post=362"},{"taxonomy":"nlabs_article_type","embeddable":true,"href":"https:\/\/neodata.com.uy\/labs\/wp-json\/wp\/v2\/nlabs_article_type?post=362"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}