RFC 9954

Hybrid Key Exchange in TLS 1.3

๐Ÿ“… published July 2026, from ietf

RFC 9954: Hybrid Key Exchange in TLS 1.3 ๐ŸŽ€

okay so bestie, this one is from the Internet Engineering Task Force (IETF) ๐ŸŒธ It's RFC 9954, published July 2026. The authors are D. Stebila (University of Waterloo), S. Fluhrer (Cisco Systems), and S. Gueron (U. Haifa & Meta) ๐Ÿ‘‘. It's Informational, so it's not a Standards Track spec, and its ISSN is 2070-1721. The header doesn't list anything it obsoletes or updates โœจ

Abstract ๐Ÿ’œ

okay so hybrid key exchange means using multiple key exchange algorithms at the same time and combining their results ๐Ÿฆ‹ The goal is that you stay secure even if someone finds a way to break all but one of the component algorithms. It's motivated by the move to post-quantum cryptography ๐Ÿ”ฎ This document gives a construction for hybrid key exchange in the Transport Layer Security (TLS) protocol, version 1.3 ๐Ÿ’…

Status of This Memo ๐Ÿ“œ

this document is not an Internet Standards Track specification. It's published for informational purposes only ๐ŸŒท

It's a product of the Internet Engineering Task Force (IETF) and represents the consensus of the IETF community. It went through public review and got approved for publication by the Internet Engineering Steering Group (IESG). Not every IESG-approved document is a candidate for any level of Internet Standard, so see Section 2 of RFC 7841 for that ๐Ÿซถ

For info about the current status of this document, any errata, and how to send feedback, check https://www.rfc-editor.org/info/rfc9954 ๐Ÿ”—

Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved. ยฉ๏ธโœจ

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) as in effect on the date of publication. Please read these carefully, because they spell out your rights and restrictions for this document ๐Ÿ“– Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions, and they're provided without warranty as described in the Revised BSD License ๐ŸŒˆ

Table of Contents ๐Ÿงš

1.  Introduction
  1.1.  Terminology
  1.2.  Motivation for Use of Hybrid Key Exchange
  1.3.  Scope
  1.4.  Goals
2.  Key Encapsulation Mechanisms
3.  Construction for Hybrid Key Exchange
  3.1.  Negotiation
  3.2.  Transmitting Public Keys and Ciphertexts
  3.3.  Shared Secret Calculation
4.  Discussion
5.  IANA Considerations
6.  Security Considerations
7.  References
  7.1.  Normative References
  7.2.  Informative References
Appendix A.  Related Work
Acknowledgements
Authors' Addresses

1. Introduction โœจ

okay so this doc gives a construction for hybrid key exchange in TLS 1.3 ๐Ÿ’– The overall vibe is simple and "concatenation"-based. Each hybrid key exchange combination should be viewed as a single new key exchange method, and it should be negotiated and transmitted using the existing TLS 1.3 mechanisms ๐ŸŽ€

This document does not propose specific post-quantum mechanisms. For more on what's in scope, see Section 1.3 ๐ŸŒธ

1.1. Terminology ๐Ÿ”ค

bestie, this part is important. The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are interpreted as described in BCP 14 [RFC2119] [RFC8174], but only when they appear in ALL CAPS like shown here ๐Ÿซถ

Next, it helps to split cryptographic algorithms into two classes ๐Ÿฆ‹

  • "Traditional" algorithms: These are widely deployed today but might get deprecated later. In TLS 1.3, traditional key exchange algorithms include Elliptic Curve Diffie-Hellman (ECDH) using secp256r1 or x25519, or finite field Diffie-Hellman ๐Ÿ’œ
  • "Next-generation" (or "next-gen") algorithms: These aren't widely deployed yet but might be someday. The cryptographic community may trust them less because they're relatively new or less studied. This includes "post-quantum" algorithms ๐Ÿ”ฎ

so a "hybrid" key exchange uses two (or more) key exchange algorithms based on different cryptographic assumptions. For example, one traditional and one next-generation algorithm ๐ŸŒˆ The whole point is that the final session key stays secure as long as at least one component key exchange algorithm remains unbroken. When one is traditional and one is post-quantum, that's a Post-Quantum Traditional Hybrid Scheme [PQUIP-TERM]. That's the initial use case for this document, but the document isn't limited to it. This doc uses the term "component" algorithms for the algorithms combined in a hybrid key exchange โœจ

Some researchers prefer the word "composite" for using multiple algorithms, to tell it apart from "hybrid public key encryption." In that one, a key encapsulation mechanism and a data encapsulation mechanism get combined to make public key encryption ๐Ÿ™ˆ

The component algorithms in a hybrid key exchange are meant to be performed, meaning negotiated and transmitted, within the TLS 1.3 handshake. Any out-of-band method of exchanging keying material is out of scope ๐Ÿšซ

The main motivation here is preparing for post-quantum algorithms. But public key cryptography based on alternative mathematical constructions might be wanted too, to reduce risk regardless of whether a quantum computer shows up. For example, a cryptanalytic breakthrough could cause that. So this document goes with the more generic term "next-generation" algorithms, rather than only "post-quantum" algorithms ๐Ÿงš

Also, TLS 1.3 uses the term "groups" for key exchange algorithms. The supported_groups extension is one example. That's because all key exchange algorithms in TLS 1.3 are Diffie-Hellman-based. As a result, some parts of this document use data structures or messages with "group" in their names, even when the algorithm is neither Diffie-Hellman-based nor a group ๐Ÿ’…

1.2. Motivation for Use of Hybrid Key Exchange ๐ŸŒท

a hybrid key exchange algorithm lets early adopters who are eager for post-quantum security get the potential of it (possibly from a less-well-studied algorithm), while still keeping at least the security traditional algorithms offer today ๐Ÿ’– They might even need to keep traditional algorithms because of regulatory constraints, like US National Institute of Standards and Technology (NIST) FIPS compliance ๐Ÿ“‹

Ideally, nobody would need hybrid key exchange. You'd have confidence in one algorithm and parameterization that stands the test of time ๐Ÿ‘‘ But that may not be the case with quantum computers and cryptanalytic advances more generally ๐Ÿ”ฎ

Lots of post-quantum algorithms under consideration are relatively new. They haven't been studied as deeply as RSA, finite field Diffie-Hellman, or elliptic curve Diffie-Hellman. So the security community doesn't necessarily have as much confidence in their fundamental security, or in the concrete security level of specific parameterizations ๐Ÿ™ˆ

Also, after next-generation algorithms get defined, conservative users may not have full confidence in some of them for a while ๐Ÿซ 

Some users want to speed up post-quantum adoption because of retroactive decryption, also called "harvest-now-decrypt-later" ๐Ÿ˜ญ If a cryptographic assumption breaks, because of a quantum computer or some other cryptanalytic breakthrough, the confidentiality of information can be broken retroactively by any adversary who passively recorded handshakes and encrypted communications. Hybrid key exchange gives potential protection against retroactive decryption without fully abandoning traditional cryptosystems ๐Ÿฆ‹

So there may be users for whom hybrid key exchange is a sensible step before an eventual move to next-generation algorithms โœจ Users should look at how much confidence they have in each hybrid component, to judge whether the hybrid system meets their goal ๐Ÿ’œ

1.3. Scope ๐Ÿ”ญ

this document focuses on hybrid ephemeral key exchange in TLS 1.3 [TLS13]. It intentionally does NOT address the following ๐Ÿšซ

  • Selecting which next-generation algorithms to use in TLS 1.3, or algorithm identifiers or encoding mechanisms for next-generation algorithms ๐Ÿ”ค
  • Authentication using next-generation algorithms. While quantum computers could retroactively decrypt previous sessions, session authentication can't be retroactively broken ๐Ÿซถ

1.4. Goals ๐ŸŽ€

okay so the big boss goal of a hybrid key exchange ๐Ÿ‘‘ is getting a shared secret that stays secure as long as one of the component key exchange mechanisms is still unbroken. so even if one of them gets cracked, you're still covered. main character energy fr ๐Ÿฆ‹

In the context of TLS 1.3, there may be several additional goals too:

  • Backwards compatibility: Clients and servers who are "hybrid-aware", i.e., compliant with whatever hybrid key exchange standard is developed for TLS, should remain compatible with endpoints and middleboxes that are not hybrid-aware. there are three scenarios to think about ๐Ÿงš
    1. Hybrid-aware client, hybrid-aware server: These parties should establish a hybrid shared secret.
    2. Hybrid-aware client, non-hybrid-aware server: These parties should establish a non-hybrid shared secret (assuming the hybrid-aware client is willing to downgrade to non-hybrid-only).
    3. Non-hybrid-aware client, hybrid-aware server: These parties should establish a non-hybrid shared secret (assuming the hybrid-aware server is willing to downgrade to non-hybrid-only).

Ideally, backwards compatibility should be achieved without extra round trips and without sending duplicate information; see below. ๐Ÿ™ˆ

  • High performance: Use of hybrid key exchange should not be prohibitively expensive in terms of computational performance. In general, this will depend on the performance characteristics of the specific cryptographic algorithms used and, as such, is outside the scope of this document. See [PST] for preliminary results about performance characteristics. ๐Ÿ’…
  • Low latency: Use of hybrid key exchange should not substantially increase the latency experienced to establish a connection. Factors affecting this may include the following:
    • The computational performance characteristics of the specific algorithms used. See above.
    • The size of messages to be transmitted. Public key and ciphertext sizes for post-quantum algorithms range from hundreds of bytes to over one hundred kilobytes, so this impact can be substantial. See [PST] for preliminary results in a laboratory setting and [LANGLEY] for preliminary results on more realistic networks. the size thing is wild ๐Ÿ˜ญ
    • Additional round trips added to the protocol. See below.
  • No extra round trips: Attempting to negotiate hybrid key exchange should not lead to extra round trips in any of the three hybrid-aware/non-hybrid-aware scenarios listed above. โญ
  • Minimal duplicate information: Attempting to negotiate hybrid key exchange should not mean having to send multiple public keys of the same type. ๐Ÿ“

The tolerance for lower performance and increased latency due to use of hybrid key exchange will depend on the context and use case of the systems and the network involved. it's all vibes-dependent, bestie ๐ŸŒธ


2. Key Encapsulation Mechanisms โœจ

This document models key agreement as key encapsulation mechanisms (KEMs), which consist of three algorithms:

  • KeyGen() -> (pk, sk): A probabilistic key generation algorithm, which generates a public key pk and a secret key sk.
  • Encaps(pk) -> (ct, ss): A probabilistic encapsulation algorithm, which takes as input a public key pk and outputs a ciphertext ct and shared secret ss.
  • Decaps(sk, ct) -> ss: A decapsulation algorithm, which takes as input a secret key sk and ciphertext ct and outputs a shared secret ss or, in some cases, a distinguished error value.

The main security property for KEMs is indistinguishability under adaptive chosen ciphertext attack (IND-CCA2), which means that shared secret values should be indistinguishable from random strings even given the ability to have other arbitrary ciphertexts decapsulated. IND-CCA2 corresponds to security against an active attacker, and the public key and secret key pair can be treated as a long-term key or reused. A common design pattern for obtaining security under key reuse is to apply the Fujisaki-Okamoto (FO) transform [FO] or a variant thereof [HHK]. the active attacker is the villain in this story ๐Ÿฆน

A weaker security notion is indistinguishability under chosen plaintext attack (IND-CPA), which means that the shared secret values should be indistinguishable from random strings given a copy of the public key. IND-CPA roughly corresponds to security against a passive attacker and sometimes corresponds to one-time key exchange.

See [KATZ] or [HHK] for definitions of IND-CCA2 and IND-CPA security. ๐Ÿ“š

Key exchange in TLS 1.3 is phrased in terms of Diffie-Hellman key exchange in a group. DH key exchange can be modeled as a KEM, with (1) KeyGen corresponding to selecting an exponent x as the secret key and computing the public key g^x, (2) encapsulation corresponding to selecting an exponent y and computing the ciphertext g^y and the shared secret g^(xy), and (3) decapsulation corresponding to computing the shared secret g^(xy). See [HPKE] for more details of such Diffie-Hellman-based key encapsulation mechanisms. Diffie-Hellman key exchange, when viewed as a KEM, does not formally satisfy IND-CCA2 security but is still safe to use for ephemeral key exchange in TLS 1.3; see, for example, [DOWLING]. ๐Ÿฆ‹

TLS 1.3 does not require that ephemeral public keys be used only in a single key exchange session; some implementations may reuse them, at the cost of limited forward secrecy. As a result, any KEM used in the manner described in this document MUST explicitly be designed to be secure in the event that the public key is reused. Finite field and elliptic curve Diffie-Hellman key exchange methods used in TLS 1.3 satisfy this criteria. For generic KEMs, this means satisfying IND-CCA2 security or having a transform like the Fujisaki-Okamoto transform [FO] [HHK] applied. While it is recommended that implementations avoid reuse of KEM public keys, implementations that do reuse KEM public keys MUST ensure that the number of reuses of a KEM public key abides by any bounds in the specification of the KEM or subsequent security analyses. Implementations MUST NOT reuse randomness in the generation of KEM ciphertexts. ๐Ÿšจ no randomness recycling, periodt ๐Ÿ’€


3. Construction for Hybrid Key Exchange ๐Ÿ‘‘

3.1. Negotiation ๐Ÿ’–

Each particular combination of algorithms in a hybrid key exchange will be represented as a NamedGroup and sent in the supported_groups extension. No internal structure or grammar is implied or required in the value of the identifier; they are simply opaque identifiers. โœจ

Each value representing a hybrid key exchange will correspond to an ordered pair of two or more algorithms. (Note that this is independent from future documents standardizing solely post-quantum key exchange methods, which would have to be assigned their own identifier.) ๐ŸŒˆ

3.2. Transmitting Public Keys and Ciphertexts ๐Ÿฆ‹

This document takes the relatively simple "concatenation approach": The messages from the two or more algorithms being hybridized will be concatenated together and transmitted as a single value to avoid having to change existing data structures. The values are directly concatenated, without any additional encoding or length fields; the representation and length of elements MUST be fixed once the algorithm is fixed. simple, but it has to be exact ๐ŸŽ€

Recall that, in TLS 1.3 ([TLS13], Section 4.2.8), a KEM public key or KEM ciphertext is represented as a KeyShareEntry:

struct {
    NamedGroup group;
    opaque key_exchange<1..2^16-1>;
} KeyShareEntry;

These are transmitted in the extension_data fields of KeyShareClientHello and KeyShareServerHello extensions:

struct {
    KeyShareEntry client_shares<0..2^16-1>;
} KeyShareClientHello;

struct {
    KeyShareEntry server_share;
} KeyShareServerHello;

The client's shares are listed in descending order of client preference; the server selects one algorithm and sends its corresponding share.

For a hybrid key exchange, the key_exchange field of a KeyShareEntry is the concatenation of the key_exchange field for each of the constituent algorithms. The order of shares in the concatenation MUST be the same as the order of algorithms indicated in the definition of the NamedGroup. ๐Ÿ”ฅ order matters, no exceptions

For the client's share, the key_exchange value contains the concatenation of the pk outputs of the corresponding KEMs' KeyGen algorithms if that algorithm corresponds to a KEM or the (EC)DH ephemeral key share if that algorithm corresponds to an (EC)DH group. For the server's share, the key_exchange value contains the concatenation of the ct outputs of the corresponding KEMs' Encaps algorithms if that algorithm corresponds to a KEM or the (EC)DH ephemeral key share if that algorithm corresponds to an (EC)DH group.

Section 4.2.8 of [TLS13] requires that "The key_exchange values for each KeyShareEntry MUST be generated independently." In the context of this document, the same algorithm may appear in multiple named groups; thus, this document relaxes the above requirement to allow the same key_exchange value for the same algorithm to be reused in multiple KeyShareEntry records sent within the same ClientHello. However, key_exchange values for different algorithms MUST be generated independently. Explicitly, if the NamedGroup is the hybrid key exchange MyECDHMyPQKEM, the KeyShareEntry.key_exchange values MUST be generated in one of the following two ways: ๐Ÿซถ

Fully independently:

MyECDHMyPQKEM.KeyGen() = (MyECDH.KeyGen(), MyPQKEM.KeyGen())

KeyShareClientHello {
    KeyShareEntry {
        NamedGroup: 'MyECDH',
        key_exchange: MyECDH.KeyGen()
    },
    KeyShareEntry {
        NamedGroup: 'MyPQKEM',
        key_exchange: MyPQKEM.KeyGen()
    },
    KeyShareEntry {
        NamedGroup: 'MyECDHMyPQKEM',
        key_exchange: MyECDHMyPQKEM.KeyGen()
    },
}

Reusing key_exchange values of the same component algorithm within the same ClientHello:

myecdh_key_share = MyECDH.KeyGen()
mypqkem_key_share = MyPQKEM.KeyGen()
myecdh_mypqkem_key_share = (myecdh_key_share, mypqkem_key_share)

KeyShareClientHello {
    KeyShareEntry {
        NamedGroup: 'MyECDH',
        key_exchange: myecdh_key_share
    },
    KeyShareEntry {
        NamedGroup: 'MyPQKEM',
        key_exchange: mypqkem_key_share
    },
    KeyShareEntry {
        NamedGroup: 'MyECDHMyPQKEM',
        key_exchange: myecdh_mypqkem_key_share
    },
}

3.3. Shared Secret Calculation ๐Ÿ’–

okay so for the shared secret, this doc goes with a super simple "concatenation approach" ๐Ÿงš Both shared secrets just get stuck together, and that blob becomes the shared secret in the existing TLS 1.3 key schedule. No extra structure gets added to the concatenation, so no length fields either ๐Ÿ™ˆ For both the traditional groups and the post-quantum KEMs, the shared secret output length is already fixed for a specific elliptic curve or parameter set โœจ

So if the NamedGroup is MyECDHMyPQKEM, the shared secret gets calculated like this:

   concatenated_shared_secret = MyECDH.shared_secret
                                || MyPQKEM.shared_secret

Then that concatenated secret gets plugged into the TLS 1.3 key schedule in place of the (EC)DHE shared secret, as shown in Figure 1 ๐Ÿฆ‹

                                       0
                                       |
                                       v
                         PSK ->  HKDF-Extract = Early Secret
                                       |
                                       +-----> Derive-Secret(...)
                                       +-----> Derive-Secret(...)
                                       +-----> Derive-Secret(...)
                                       |
                                       v
                                 Derive-Secret(., "derived", "")
                                       |
                                       v
   concatenated_shared_secret -> HKDF-Extract = Handshake Secret
   ^^^^^^^^^^^^^^^^^^^^^^^^^^          |
                                       +-----> Derive-Secret(...)
                                       +-----> Derive-Secret(...)
                                       |
                                       v
                                 Derive-Secret(., "derived", "")
                                       |
                                       v
                            0 -> HKDF-Extract = Main Secret
                                       |
                                       +-----> Derive-Secret(...)
                                       +-----> Derive-Secret(...)
                                       +-----> Derive-Secret(...)
                                       +-----> Derive-Secret(...)

               Figure 1: Key Schedule for Hybrid Key Exchange

Now the FIPS compliance bit ๐Ÿง The US National Institute of Standards and Technology (NIST) documents [NIST-SP-800-56C] and [NIST-SP-800-135] give recommendations for key derivation methods in key exchange protocols. Some hybrid combos might mix a shared secret from a NIST-approved algorithm (like ECDH using the nistp256/secp256r1 curve) with one from an unapproved algorithm (like post-quantum). [NIST-SP-800-56C] lists simple concatenation as an approved method for generating a hybrid shared secret where one of the constituent shared secrets comes from an approved method โœจ

4. Discussion ๐Ÿ”ฅ

Larger public keys and/or ciphertexts: The key_exchange field in the KeyShareEntry struct in Section 3.2 limits public keys and ciphertexts to 2^16-1 bytes. Some post-quantum KEMs have bigger public keys and/or ciphertexts. For example, Classic McEliece's smallest parameter set has a public key size of 261,120 bytes [Classic-McEliece] ๐Ÿ˜ญ But all the defined parameter sets for the Module-Lattice-Based Key Encapsulation Mechanism (ML-KEM) [NIST-FIPS-203] have public keys and ciphertexts that fit within the TLS constraints. Just know this might make ClientHello messages bigger than a single packet ๐Ÿ“ฆ

Duplication of key shares: Concatenating public keys in the key_exchange field of the KeyShareEntry struct, as described in Section 3.2, can end up sending duplicate key shares ๐Ÿ‘ฏ For example, if a client wants to offer support for two combinations, say "SecP256r1MLKEM768" and "X25519MLKEM768" [ECDHE-MLKEM], it would end up sending two ML-KEM-768 public keys, since the KeyShareEntry for each combination has its own copy of an ML-KEM-768 key. This duplication could be more of a problem for post-quantum algorithms with larger public keys. On the other hand, if the client wants to offer, for example, "SecP256r1MLKEM768" and "secp256r1" (for backwards compatibility), there's relatively little duplicated data, since the secp256r1 keys are comparatively small ๐ŸŒธ

5. IANA Considerations ๐ŸŒธ

IANA has added this document as a reference for the "TLS Supported Groups" registry [IANA-TLS] ๐Ÿ“–

For hybrid combinations defined per this document, IANA will assign identifiers in a range that is distinct from the Finite Field Groups range. Also, the "Recommended" column SHOULD be "N", and the "DTLS-OK" column SHOULD be "Y" โœจ

6. Security Considerations ๐Ÿ’€

This part is serious, bestie, so read it carefully ๐Ÿซถ The shared secrets computed in the hybrid key exchange should be computed in a way that achieves the "hybrid" property. In other words, the resulting secret is secure as long as at least one of the component key exchange algorithms is unbroken. See [GIACON] and [BINDEL] for an investigation of these issues. Under the assumption that shared secrets are fixed length once the combination is fixed, the construction in Section 3.3 corresponds to the dual-PRF combiner of [BINDEL], which is shown to preserve security under the assumption that the hash function is a dual-PRF.

As noted in Section 2, KEMs used in the manner described in this document MUST explicitly be designed to be secure in the event that the public key is reused, such as by achieving IND-CCA2 security or by having a transform like the Fujisaki-Okamoto transform applied. ML-KEM has such security properties. However, some other post-quantum KEMs designed to be IND-CPA-secure (i.e., without countermeasures such as the FO transform) are completely insecure under public key reuse. For example, some lattice-based IND-CPA-secure KEMs are vulnerable to attacks that recover the private key after just a few thousand samples [FLUHRER] ๐Ÿ˜ฑ

Public keys, ciphertexts, and secrets should be constant length. This document assumes that the length of each public key, ciphertext, and shared secret is fixed once the algorithm is fixed. This is the case for ML-KEM.

Note that variable-length secrets are, generally speaking, dangerous ๐Ÿšจ In particular, when you use key material of variable length and process it with hash functions, a timing side channel may arise. Broadly speaking, when the secret is longer, the hash function may need to process more blocks internally. In some unfortunate circumstances, this has led to timing attacks, e.g., the Lucky Thirteen [LUCKY13] and Raccoon [RACCOON] attacks.

Furthermore, [AVIRAM] identifies a risk of using variable-length secrets when the hash function used in the key derivation function is no longer collision-resistant.

If concatenation were to be used with values that are not fixed length, a length prefix or other unambiguous encoding would need to be used to ensure that the composition of the two values is injective, and it would require a mechanism different from the one specified in this document ๐Ÿ™…โ€โ™€๏ธ

Therefore, this specification MUST only be used with algorithms that have fixed-length shared secrets (after the variant has been fixed by the algorithm identifier in the NamedGroup negotiation in Section 3.1). No cap, this one is non-negotiable ๐Ÿ‘‘

7. References ๐Ÿ“š

7.1. Normative References

Here's the reading list, with every detail kept ๐ŸŽ€

   [FO]       Fujisaki, E. and T. Okamoto, "Secure Integration of
              Asymmetric and Symmetric Encryption Schemes", Journal of
              Cryptology, vol. 26, no. 1, pp. 80-101,
              DOI 10.1007/s00145-011-9114-1, December 2011,
              <https://doi.org/10.1007/s00145-011-9114-1>.

   [HHK]      Hofheinz, D., Hรถvelmanns, K., and E. Kiltz, "A Modular
              Analysis of the Fujisaki-Okamoto Transformation", Theory
              of Cryptography (TCC 2017), Lecture Notes in Computer
              Science, vol. 10677, pp. 341-371,
              DOI 10.1007/978-3-319-70500-2_12, 2017,
              <https://doi.org/10.1007/978-3-319-70500-2_12>.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.

   [TLS13]    Rescorla, E., "The Transport Layer Security (TLS) Protocol
              Version 1.3", RFC 9846, DOI 10.17487/RFC9846, July 2026,
              <https://www.rfc-editor.org/info/rfc9846>.

7.2. Informative References โœจ

okay bestie, this is the bibliography ๐Ÿ“š๐Ÿ’… these are the informative references, aka the receipts and background reading that back up the whole spec ๐Ÿงพ I kept every single one, all the authors, titles, dates, DOIs and links exactly as they are ๐Ÿซถ

okay so quantum computing and post-quantum cryptography in general are outside the scope of this doc, bestie ๐Ÿ’… for a general intro to quantum computing, grab a standard textbook like [NIELSEN]. for an overview of post-quantum crypto as of 2009, see [BERNSTEIN]. it's not up to date with newer stuff, but it's still a super helpful starting point ๐Ÿ“š for the current status of the NIST Post-Quantum Cryptography Standardization Project, see [NIST]. and for more perspectives on moving from traditional to post-quantum crypto, see for example [ETSI], among others ๐ŸŒˆ

there have been several Internet-Drafts describing ways to embed post-quantum and/or hybrid key exchange in TLS, and they're giving main character energy โœจ

  • TLS 1.2: [WHYTE12], [CAMPAGNA]
  • TLS 1.3: [KIEFER], [SCHANCK], [WHYTE13]

there have also been several prototype implementations of post-quantum and/or hybrid key exchange in TLS ๐Ÿ› ๏ธ

  • TLS 1.2: [BCNS15], [CECPQ1], [FRODO], [OQS-102], [S2N]
  • TLS 1.3: [CECPQ2], [OQS-111], [OQS-PROV], [PST]

these experimental implementations took an ad hoc approach and did not try to implement any of the Internet-Drafts listed above. messy but iconic ๐Ÿ˜ญ

unrelated to post-quantum, but still connected to the issue of combining multiple types of keying material in TLS, is the use of pre-shared keys. especially the recent TLS Working Group document on including an external pre-shared key [EXTERN-PSK] ๐Ÿ”‘

[RFC9370] covers multiple key exchanges in the Internet Key Exchange Protocol Version 2 (IKEv2), and it's been published as a Proposed Standard ๐ŸŽ€ other IETF work includes post-quantum preshared keys in IKEv2 [IKE-PSK]. and the eXtended Merkle Signature Scheme (XMSS) hash-based signature scheme has been published as an Informational RFC by the IRTF [XMSS] ๐ŸŒธ

in the academic literature, [EVEN] started the study of combining multiple symmetric encryption schemes. [ZHANG], [DODIS], and [HARNIK] looked at combining multiple public key encryption schemes. and [HARNIK] coined the term "robust combiner" for a compiler that builds a hybrid scheme from individual schemes while preserving security properties. [GIACON] and [BINDEL] examined combining multiple key encapsulation mechanisms ๐Ÿง ๐Ÿ’œ


Acknowledgements ๐Ÿซถ

the ideas in this document grew out of discussions with lots of colleagues, including Christopher Wood, Matt Campagna, Eric Crockett, Deirdre Connolly, the authors of the various hybrid documents and implementations cited here, and members of the TLS Working Group ๐Ÿ’– the immediate spark came from chats with attendees at the Workshop on Post-Quantum Software in Mountain View, California in January 2019 โœจ Daniel J. Bernstein and Tanja Lange commented on the risks of reusing ephemeral public keys ๐Ÿ™ˆ Matt Campagna and the team at Amazon Web Services gave extra suggestions. and Nimrod Aviram proposed restricting to fixed-length secrets ๐Ÿ“


Authors' Addresses ๐ŸŒท

Douglas Stebila University of Waterloo Email: dstebila@uwaterloo.ca

Scott Fluhrer Cisco Systems Email: sfluhrer@cisco.com

Shay Gueron University of Haifa and Meta Email: shay.gueron@gmail.com

and that's a wrap on the whole RFC, bestie ๐ŸŒˆ๐Ÿ‘‘

๐Ÿ“ฆ where this page comes from