RFC 9958

Post-Quantum Cryptography for Engineers

๐Ÿ“… published June 2026, from ietf

Post-Quantum Cryptography for Engineers ๐Ÿ”ฎ๐ŸŽ€

okay so this RFC is RFC 9958 ๐Ÿฆ‹ and it's titled Post-Quantum Cryptography for Engineers. It's from June 2026 and it's Informational, so it's not a standards-track spec, it's here to explain stuff ๐Ÿง โœจ. The authors are A. Banerjee, T. Reddy.K, and D. Schoinianakis from Nokia, plus T. Hollebeek from DigiCert and M. Ounsworth from Entrust ๐Ÿ’…. It's on the Independent Submission stream... wait no, it's an IETF document (ISSN 2070-1721), so it's an IETF product ๐Ÿซถ. And since the title block doesn't list any Obsoletes or Updates line, it doesn't replace or update any earlier RFC ๐Ÿ’–.

Abstract โœจ

bestie, here's the big picture ๐Ÿ˜ญ. A cryptographically relevant quantum computer (CRQC) would make the traditional public key algorithms we use today obsolete, because the math they're built on would stop being safe ๐Ÿ’€. So protocols and infrastructure need to move over to post-quantum algorithms, which are designed to hold up against both traditional and quantum attacks ๐Ÿ”ฅ. This doc explains why engineers need to get what PQC is about, how CRQCs would hit existing systems, and what's hard about the switch ๐Ÿงš. The lowkey plot twist is that this isn't like the earlier crypto upgrades, because PQ algorithms have unique properties that may mean real protocol redesign ๐Ÿ‘‘. periodt ๐Ÿ’….

Status of This Memo

this is not an Internet Standards Track spec, it's published just for information ๐ŸŒธ.

It's a product of the IETF, and it reflects the consensus of the IETF community ๐Ÿ’œ. It went through public review and got approved by the Internet Engineering Steering Group (IESG) ๐ŸŽ€. Not every IESG-approved doc is up for any level of Internet Standard, so check Section 2 of RFC 7841 if you want the deets ๐Ÿ™ˆ.

You can find out the current status of this doc, any errata, and how to send feedback at https://www.rfc-editor.org/info/rfc9958 ๐Ÿ“.

Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved ๐ŸŒˆ.

This doc is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) as they stand on the publication date ๐Ÿ“œ. Please actually read those, because they spell out your rights and restrictions for this doc ๐Ÿซถ. Code Components pulled out of this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions, and they come with no warranty, as the Revised BSD License says โญ.

Table of Contents ๐Ÿงพ

1.  Introduction
2.  Terminology
3.  Threat of CRQCs on Cryptography
  3.1.  Symmetric Cryptography
  3.2.  Asymmetric Cryptography
  3.3.  Quantum Side-Channel Attacks
4.  Traditional Cryptographic Primitives That Could Be Replaced by
        PQC
5.  NIST PQC Algorithms
  5.1.  NIST Candidates Selected for Standardization
    5.1.1.  PQC Key Encapsulation Mechanisms (KEMs)
    5.1.2.  PQC Signatures
6.  ISO Candidates Selected for Standardization
  6.1.  PQC Key Encapsulation Mechanisms (KEMs)
7.  Timeline for Transition
8.  PQC Categories
  8.1.  Lattice-Based Public Key Cryptography
  8.2.  Hash-Based Public Key Cryptography
  8.3.  Code-Based Public Key Cryptography
9.  KEMs
  9.1.  Authenticated Key Exchange
  9.2.  Security Properties of KEMs
    9.2.1.  IND-CCA2
    9.2.2.  Binding
  9.3.  HPKE
10. PQC Signatures
  10.1.  Security Properties of PQC Signatures
    10.1.1.  EUF-CMA and SUF-CMA
  10.2.  Details of FN-DSA, ML-DSA, and SLH-DSA
  10.3.  Details of XMSS and LMS
    10.3.1.  LMS Key and Signature Sizes
  10.4.  Hash-then-Sign
11. NIST Recommendations for Security and Performance Trade-offs
12. Comparing PQC KEMs/Signatures against Traditional KEMs, Key
        Exchanges, and Signatures
13. Post-Quantum and Traditional (PQ/T) Hybrid Schemes
  13.1.  PQ/T Hybrid Confidentiality
  13.2.  PQ/T Hybrid Authentication
  13.3.  Hybrid Cryptographic Algorithm Combinations:
         Considerations and Approaches
    13.3.1.  Hybrid Cryptographic Combinations
    13.3.2.  Composite Keys in Hybrid Schemes
    13.3.3.  Key Reuse in Hybrid Schemes
    13.3.4.  Future Directions and Ongoing Research
14. Impact on Constrained Devices and Networks
15. Security Considerations
  15.1.  Cryptanalysis
  15.2.  Cryptographic Agility
  15.3.  Jurisdictional Fragmentation
  15.4.  Hybrid Key Exchange and Signatures: Bridging the Gap
         Between PQ/T Cryptography
  15.5.  Caution: Ciphertext Commitment in KEM vs. DH
16. IANA Considerations
17. Further Reading and Resources
18. References
  18.1.  Normative References
  18.2.  Informative References
Acknowledgements
Authors' Addresses

That's part 1 done ๐Ÿง๐Ÿ’– Next up is the Introduction and the Terminology section, so stay tuned, bestie โœจ

1. Introduction โœจ

Okay so quantum computing is no longer just a theory nerd topic ๐Ÿ”ฌ It's a full-on active research area with real practical implications, bestie. Huge amounts of research and enormous corporate and government funding are going into building practical quantum computing systems right now ๐Ÿ’ธ At the time this document is published, cryptographically relevant quantum computers (CRQCs) that can break widely used asymmetric algorithms (also known as public key algorithms) are not yet available. But research and development keeps going, with the goal of building more powerful and scalable quantum computers ๐Ÿš€

One common myth is that quantum computers are faster than conventional CPUs and GPUs at everything. Not the case ๐Ÿ™…โ€โ™€๏ธ Just like GPUs only beat general-purpose CPUs on certain types of problems, quantum computers have a niche set of problems they absolutely excel at. Unfortunately for cryptographers ๐Ÿ˜ญ integer factorization and discrete logarithms, the math problems holding up a lot of classical public key cryptography, happen to fall right inside that niche. As quantum tech advances, future quantum computers could have a significant impact on current cryptographic systems. Predicting when a CRQC will actually show up is a challenging task, and there's ongoing uncertainty about when they'll become practically feasible [CRQCThreat] ๐Ÿ”ฎ

Extensive research has produced several post-quantum cryptographic algorithms that could help cryptography survive the quantum computing era โœจ However, moving to a post-quantum infrastructure is not a straightforward task, and there are numerous challenges to overcome. It takes a mix of engineering efforts, proactive assessment and evaluation of available technologies, and a careful approach to product development and deployment ๐Ÿ› ๏ธ

PQC is sometimes called "quantum-proof", "quantum-safe", or "quantum-resistant" ๐Ÿ›ก๏ธ It's the development of cryptographic algorithms designed to secure communication and data in a world where quantum computers are powerful enough to break traditional systems like RSA (Rivest-Shamir-Adleman) and ECC (Elliptic Curve Cryptography). PQC algorithms are meant to resist attacks from quantum computers, which use quantum-mechanical phenomena to solve mathematical problems that are infeasible for classical computers ๐Ÿง โšก

As the CRQC threat gets closer, engineers who design, maintain, and secure cryptographic systems have to prepare for the big changes that CRQCs will bring ๐Ÿ˜ค Engineers need to understand how to implement post-quantum algorithms in applications, how to weigh the trade-offs between security and performance, and how to keep backward compatibility with current systems where needed. This is not merely a one-for-one swap of algorithms ๐Ÿ™ˆ In many cases, moving to PQC means redesigning protocols and infrastructure to handle the significant differences in resource utilization and key sizes between traditional and PQC algorithms. Because these impacts are so wide-ranging, discussions of protocol changes are woven throughout this document instead of being stuck in one section ๐Ÿงถ

This document gives general guidance to engineers working on cryptographic libraries, network security, and infrastructure development, where long-term security planning is crucial ๐Ÿ’… It covers topics like selecting appropriate PQC algorithms and understanding the differences between PQC Key Encapsulation Mechanisms (KEMs) and traditional Diffie-Hellman (DH) and RSA-style key exchanges. It also gives insights into the expected differences in keys, ciphertext, signature sizes, and processing times between PQC and traditional algorithms ๐Ÿ“Š Plus, it discusses the potential threat to symmetric cryptography and hash functions from CRQCs ๐Ÿ‘€

Here's the thing to remember: asymmetric algorithms (also known as public key algorithms) are largely used for secure communications between organizations or endpoints that may never have interacted before ๐Ÿค So a lot of coordination between organizations, and within and between ecosystems, needs to be factored in. These transitions are some of the most complicated in the tech industry ๐Ÿ˜ตโ€๐Ÿ’ซ and will require staged migrations in which upgraded agents need to coexist and communicate with non-upgraded agents, at a scale never before undertaken ๐ŸŒ

The National Security Agency (NSA) of the United States released an article on future PQC algorithm requirements for US national security systems [CNSA2-0], based on the need to protect against deployments of CRQCs in the future ๐Ÿ‡บ๐Ÿ‡ธ The German Federal Office for Information Security (BSI) also released a PQC migration and recommendations document [BSI-PQC] that largely aligns with United States National Institute of Standards and Technology (NIST) and NSA guidance, but differs in aspects such as specific PQC algorithm profiles ๐Ÿ‡ฉ๐Ÿ‡ช

CRQCs pose a threat to both symmetric and asymmetric cryptographic schemes, but the threat to asymmetric cryptography is significantly greater because of Shor's algorithm [Shors], which can break widely used public key schemes like RSA and ECC ๐Ÿ’ฅ Symmetric cryptography and hash functions face a lower risk from Grover's algorithm [Grovers]. The impact is less severe and can typically be mitigated by doubling key and digest lengths where the risk applies ๐Ÿฆ‹ It's crucial that you understand that when "PQC" comes up in this document, it means asymmetric cryptography (or public key cryptography), and not symmetric algorithms based on stream ciphers, block ciphers, hash functions, Message Authentication Codes (MACs), etc., which are less vulnerable to quantum computers ๐Ÿ™Œ This document doesn't cover when traditional algorithms might become vulnerable (for that, check out documents such as [QC-DNS] and others) ๐Ÿ“š

Quick aside: this doc is NOT about quantum key distribution (QKD) or quantum key generation. Those are unrelated technologies that use quantum hardware to exploit quantum effects to protect communications and generate keys, respectively. PQC is based on conventional math (not on quantum mechanics) and software, so it can run on any general-purpose computer ๐Ÿ’ป๐ŸŒธ

This document doesn't go into the deep mathematics or technical specification of the PQC algorithms ๐Ÿค“ It's more of an overview for engineers on the current threat landscape and the relevant algorithms designed to help prevent those threats. Also, the cryptographic and algorithmic guidance in this document should be taken as non-authoritative if it conflicts with emerging and evolving guidance from the IRTF's Crypto Forum Research Group (CFRG) ๐Ÿซถ


2. Terminology ๐ŸŽ€

Let's get the vocab down so we're all on the same page ๐Ÿ’œ

  • Quantum computer: A computer that performs computations using quantum-mechanical phenomena such as superposition and entanglement.
  • Physical qubit: The basic physical unit in a quantum computer, which is prone to noise and errors.
  • Logical qubit: A fault-tolerant qubit constructed from multiple physical qubits using quantum error correction. It is the effective unit for reliable quantum computation.
  • Post-Quantum Cryptography (PQC): Cryptographic algorithms designed to be secure against quantum and classical attacks.
  • Cryptographically Relevant Quantum Computer (CRQC): A quantum computer with sufficient logical qubits to break traditional asymmetric cryptographic algorithms (e.g., RSA or ECC) within a practical timeframe.
  • Public Key Cryptography (also called Asymmetric Cryptography): A class of cryptographic algorithms in which separate keys are used for encryption and decryption, or for signing and verification. Throughout this document, the terms Public Key Cryptography and Asymmetric Cryptography are used interchangeably ๐Ÿ”‘

Now the naming drama ๐Ÿฟ There's ongoing discussion about whether to use the term "post-quantum", "quantum ready", "quantum resistant", or "quantum secure" to describe algorithms that resist CRQCs, and a consensus has not been reached yet ๐Ÿคทโ€โ™€๏ธ NIST coined the term "post-quantum" to refer to the algorithms that took part in its competition-like selection process. In this context, the term can be read as "the set of algorithms that are designed to still be relevant after quantum computers exist," and it's not a statement about their security. "Quantum resistant" or "quantum secure" is obviously the goal of these algorithms. However, some people have raised concerns that labeling a class of algorithms as "quantum resistant" or "quantum secure" could cause confusion if one or more of those algorithms are later found to be insecure, or to not resist quantum computers as much as theory predicted ๐Ÿ˜ฌ "Quantum ready" is often used to refer to a solution (a device, appliance, or software stack) that has reached maturity with regard to integrating these new cryptographic algorithms. That said, the authors recognize there's great variability in how these terms are used. This document uses these terms interchangeably to refer to such algorithms ๐ŸŒˆ

In this document, the terms "current", "state-of-the-art", and "ongoing" refer to work, research, investigations, deployments, or developments that are applicable at the time of publication โฐ


3. Threat of CRQCs on Cryptography ๐Ÿ”ฅ

Okay, this section is the heart of the threat model, so pay attention ๐Ÿ‘€ When you're thinking about the security risks of a quantum computer attacking traditional cryptography, it's important to tell apart the impact on symmetric algorithms and on public key ones. Dr. Peter Shor and Dr. Lov Grover developed two algorithms that totally changed the way the world thinks about security in the presence of a CRQC ๐Ÿ‘‘

Quantum computers are, by their nature, hybrids of classical and quantum computational units. For example, Shor's algorithm is a mix of quantum and classical computational steps ๐Ÿงฉ So the term "quantum adversary" should be thought of as "quantum-enhanced adversary", meaning they have access to both classical and quantum computational techniques ๐Ÿ˜ˆ

Although large-scale quantum computers don't exist yet to experiment on, the theoretical properties of quantum computation are very well understood ๐Ÿ“– This lets engineers and researchers reason about the upper limits of quantum-enhanced computation, and design cryptographic algorithms that are resistant to any conceivable form of quantum cryptanalysis ๐Ÿฆธโ€โ™€๏ธโœจ

3.1. Symmetric Cryptography โœจ

okay bestie, let's talk symmetric crypto ๐Ÿ’– For unstructured data like symmetric encrypted data or cryptographic hashes, CRQCs can search for specific solutions across all possible input combinations (e.g., Grover's algorithm), but no quantum algorithm is known to break the underlying security properties of these classes of algorithms ๐Ÿ” Symmetric-key cryptography includes keyed primitives like block ciphers (e.g., AES) and message authentication mechanisms (e.g., HMAC-SHA256). It relies on secret keys shared between the sender and receiver and stays secure even in a post-quantum world ๐ŸŒˆ Symmetric cryptography also includes hash functions (e.g., SHA-256) that do secure message digesting without any shared key material. HMAC (Hashed Message Authentication Code) is a specific construction that uses a cryptographic hash function and a secret key shared between the sender and receiver to produce a message authentication code ๐ŸŽ€

Grover's algorithm is a quantum search algorithm with a theoretical quadratic speedup for searching an unstructured database, compared to traditional search algorithms. This has sparked the common misconception that symmetric key lengths need to be doubled for quantum security ๐Ÿ™ˆ When you treat the mapping of hash values to their corresponding hash inputs (also known as pre-image), or of ciphertext blocks to the corresponding plaintext blocks, as an unstructured database, then Grover's algorithm theoretically requires doubling the key sizes of the symmetric algorithms that are currently deployed at the time of publication, to counter the quadratic speedup and maintain the current security level. This is because Grover's algorithm reduces the number of operations needed to break 128-bit symmetric cryptography to 2^64 quantum operations, which might sound computationally feasible. However, quantum operations are fundamentally different from classical ones. 2^64 classical operations can be efficiently parallelized, but 2^64 quantum operations must be performed serially, which makes them infeasible on practical quantum computers ๐Ÿ’€

Grover's algorithm is highly non-parallelizable. Even if you deploy 2^c computational units in parallel to brute-force a key using Grover's algorithm, it will complete in time proportional to 2^((128-c)/2). Put simply, using 256 quantum computers will only reduce runtime by a factor of 16, 1024 quantum computers will only reduce runtime by a factor of 32, and so forth (see [NIST] and [Cloudflare]) ๐Ÿ“‰ Because of this inherent limitation, the general expert consensus is that AES-128 remains secure in practice, and key sizes do not necessarily need to be doubled ๐Ÿ’…

It would be natural to ask whether future research will develop a superior algorithm that could outperform Grover's algorithm in the general case. However, Christof Zalka has shown that Grover's algorithm achieves the best possible complexity for this type of search, meaning no significantly faster quantum approach is expected [Grover-Search] ๐Ÿ‘‘

Finally, in their evaluation criteria for PQC, NIST is assessing the security levels of proposed post-quantum algorithms by comparing them against the equivalent traditional and quantum security of AES-128, AES-192, and AES-256. This indicates that NIST is confident in the stable security properties of AES, even in the presence of both traditional and quantum attacks. As a result, 128-bit algorithms can be considered quantum-safe for the foreseeable future โœจ However, for compliance purposes, some organizations, such as the French National Agency for the Security of Information Systems (ANSSI) [ANSSI] and the National Security Agency (NSA) (CNSA 2.0) [CNSA2-0], recommend the use of AES-256 ๐Ÿซถ

3.2. Asymmetric Cryptography ๐Ÿฆ‹

"Shor's algorithm" efficiently solves the integer factorization problem (and the related discrete logarithm problem), which underpin the foundations of the vast majority of public key cryptography the world uses today. This implies that, if a CRQC is developed, today's public key algorithms (e.g., RSA, Diffie-Hellman, and ECC, as well as less commonly used variants such as ElGamal [RFC6090] and Schnorr signatures [RFC8235]) and protocols would need to be replaced by algorithms and protocols that can offer cryptanalytic resistance against CRQCs. Note that Shor's algorithm cannot run solely on a classical computer; it requires a CRQC ๐Ÿ˜ญ

For example, studies show that, if a CRQC existed, it could break RSA-2048 in hours or even seconds, depending on assumptions about error correction [RSAShor] [RSA8HRS] [RSA10SC]. While such machines are purely theoretical at the time of writing, this illustrates the eventual vulnerability of RSA to CRQCs ๐Ÿงš

For structured data such as public keys and signatures, CRQCs can fully solve the underlying hard problems used in traditional cryptography (see Shor's algorithm). Because an increase in the size of the key pair would not provide a secure solution (short of RSA keys that are many gigabytes in size [PQRSA]), a complete replacement of the algorithm is needed. Therefore, post-quantum public key cryptography must rely on problems that are different from the ones used in traditional public key cryptography (i.e., the integer factorization problem, the finite-field discrete logarithm problem, and the elliptic-curve discrete logarithm problem) ๐Ÿ”ฅ

3.3. Quantum Side-Channel Attacks ๐ŸŒธ

Cryptographic side-channel attacks exploit physical implementations (such as timing, power consumption, or electromagnetic leakage) to recover secret keys ๐Ÿ™€

The field of cryptographic side-channel attacks potentially stands to gain a boost in attacker power once cryptanalytic techniques can be enhanced with quantum computation techniques [QuantSide]. While a full discussion of quantum side-channel techniques is beyond the scope of this document, implementers of cryptographic hardware should be aware that current best practices for side-channel resistance may not be sufficient against quantum adversaries ๐Ÿ“

4. Traditional Cryptographic Primitives That Could Be Replaced by PQC ๐Ÿ’œ

Any asymmetric cryptographic algorithm based on integer factorization, finite field discrete logarithms, or elliptic-curve discrete logarithms will be vulnerable to attacks using Shor's algorithm on a CRQC. This document focuses on the principal functions of asymmetric cryptography:

  • Key agreement and key transport: Key agreement schemes, typically referred to as Diffie-Hellman (DH) or Elliptic Curve Diffie-Hellman (ECDH), as well as key transport, typically using RSA encryption, are used to establish a shared cryptographic key for secure communication. They are one of the mechanisms that can be replaced by PQC, as they are based on existing public key cryptography and are therefore vulnerable to Shor's algorithm. A CRQC can employ Shor's algorithm to efficiently find the prime factors of a large public key (in the case of RSA), which, in turn, can be exploited to derive the private key. In the case of DH, a CRQC has the potential to calculate the discrete logarithm of the (short- or long-term) DH public key. This, in turn, would reveal the secret required to derive the symmetric encryption key ๐Ÿ—๏ธ
  • Digital signatures: Digital signature schemes are used to authenticate the identity of a sender, detect unauthorized modifications to data, and underpin trust in a system. Similar to key agreement, signatures also depend on a public-private key pair based on the same mathematics as key agreement and key transport. Because of this, a break in existing public key cryptography will also affect traditional digital signatures, hence the importance of developing post-quantum digital signatures โœ๏ธ
  • Boneh-Boyen-Shacham (BBS) signatures: BBS signatures are a privacy-preserving signature scheme that offers zero-knowledge proof-like properties by allowing selective disclosure of specific signed attributes without revealing the entire set of signed data. The security of BBS signatures relies on the hardness of the discrete logarithm problem, making them vulnerable to Shor's algorithm. A CRQC can break the data authenticity security property of BBS but not the data confidentiality (Section 6.9 of [BBS-SIG-SCHEME]) ๐Ÿ•ต๏ธโ€โ™€๏ธ
  • Content encryption: Content encryption typically refers to the encryption of the data using symmetric key algorithms, such as AES, to ensure confidentiality. The threat to symmetric cryptography is discussed in Section 3.1 ๐Ÿ”’

5. NIST PQC Algorithms ๐ŸŒˆ

At the time of writing, NIST has standardized three PQC algorithms, with more expected to be standardized in the future (see [NISTFINAL]). These algorithms are not necessarily drop-in replacements for traditional asymmetric cryptographic algorithms. For instance, RSA [RSA] and ECC [RFC6090] can be used as both a KEM and a signature scheme, whereas there is currently no post-quantum algorithm that can perform both functions. When upgrading protocols, it is important to replace the existing use of traditional algorithms with either a PQC KEM or a PQC signature method, depending on how the traditional algorithm was previously being used. Additionally, KEMs, as described in Section 9, present a different API than either key agreement or key transport primitives. As a result, they may require protocol-level or application-level changes in order to be incorporated ๐Ÿงฉ

5.1. NIST Candidates Selected for Standardization ๐Ÿ†

5.1.1. PQC Key Encapsulation Mechanisms (KEMs) ๐Ÿ”‘

  • ML-KEM: Module-Lattice-Based Key-Encapsulation Mechanism. See FIPS 203 [ML-KEM].
  • HQC: Hamming Quasi-Cyclic. See [HQC]. The coding algorithm based on the hardness of the syndrome decoding problem for quasi-cyclic concatenated Reed-Muller and Reed-Solomon (RMRS) codes in the Hamming metric. Reed-Muller (RM) codes are a class of block error-correcting codes commonly used in wireless and deep-space communications, while Reed-Solomon (RS) codes are widely used to detect and correct multiple-bit errors. HQC has been selected as part of the NIST post-quantum cryptography project but has not yet been standardized ๐Ÿ€

5.1.2. PQC Signatures โœ๏ธ

  • ML-DSA: Module-Lattice-Based Digital Signature Algorithm. See FIPS 204 [ML-DSA].
  • SLH-DSA: Stateless Hash-Based Digital Signature Algorithm. See FIPS 205 [SLH-DSA].
  • FN-DSA: Fast-Fourier Transform over NTRU-Lattice-Based Digital Signature Algorithm. See [FN-DSA]. Note that NIST has named this algorithm "FN-DSA" and assigned "FIPS 206" for its specification, but at the time of this document's publication, it has not yet been released ๐ŸŒŸ

For more information about these, see Sections 8.1, 8.2, and 10.2 ๐Ÿ“š

6. ISO Candidates Selected for Standardization ๐ŸŒท

At the time of writing, ISO has selected three PQC KEM algorithms as candidates for standardization. These are mentioned in the following subsection ๐Ÿ’ซ

6.1. PQC Key Encapsulation Mechanisms (KEMs) ๐Ÿฆ‹

okay bestie, here are the KEMs ๐Ÿ’…

  • FrodoKEM: a KEM built on the hardness of learning with errors in algebraically unstructured lattices ๐ŸŒธ See [FrodoKEM].
  • ClassicMcEliece: a KEM based on the hardness of syndrome decoding of Goppa codes. Goppa codes are a class of error-correcting codes that can fix a certain number of errors in a transmitted message ๐Ÿ”ง The decoding problem is about getting the original message back out of the received noisy codeword. See [ClassicMcEliece].
  • NTRU: a KEM based on "N-th degree Truncated polynomial Ring Units" (NTRU) lattices ๐Ÿ’œ One variant is Streamlined NTRU Prime (sntrup761), which gets leveraged for use in SSH [RFC9941]. See [NTRU].

7. Timeline for Transition โณ

okay so the timeline and the big "why do we need to move" motivation are a little different for data confidentiality (think encryption ๐Ÿ”) and data authentication (think signatures โœ๏ธ).

For data confidentiality, we're worried about the so-called "harvest now, decrypt later" (HNDL) attack ๐Ÿ˜ฌ That's where a malicious actor with serious resources stores sensitive encrypted data today, hoping to decrypt it once a CRQC exists. This means that every single day, sensitive encrypted data is at risk if you're not using quantum-safe strategies, because that data might get deciphered later on ๐Ÿ’€

For authentication, signatures often have a very short lifetime between signing and verifying (like during a TLS handshake) ๐Ÿค But some authentication use cases need long lifetimes, like signing firmware or software that will be active for decades, signing legal documents, or signing certificates that get embedded into hardware devices such as smart cards ๐ŸŽ€ Even for short-lived signature use cases, the infrastructure often leans on long-lived root keys, and those can be hard to update or replace on in-field devices ๐Ÿซ 

+------------------------+----------------------------+
|                        |                            |
|           y            |             x              |
+------------------------+----------+-----------------+
|                                   | <--------------->
|               z                   |   Security gap
+-----------------------------------+

                           Figure 1: Mosca Model

This is the vibe the so-called Mosca model captures so nicely ๐Ÿ“ˆ (it's discussed in [Threat-Report]). In Figure 1, "x" is how long systems and data need to stay secure, "y" is the number of years it takes to fully migrate to a PQC infrastructure, and "z" is how long until a CRQC that can break current cryptography shows up โšก The model assumes that either encrypted data can be intercepted and stored before the migration finishes in "y" years, or that signatures will still be relied upon for "x" years after they were created. That data stays vulnerable for the whole "x" years of its lifetime, so the sum "x+y" gives us an estimate of the full timeframe the data stays insecure ๐Ÿ˜ญ The model basically asks how you're preparing your IT systems during those "y" years (or in other words, how you can minimize those "y" years) so the transition to a PQC infrastructure is as short as possible and the risk of data getting exposed later is as low as possible ๐Ÿงš

Other factors could speed up the arrival of a CRQC, and you should not underestimate them ๐Ÿ‘€ Think faster-than-expected advances in quantum computing, or more efficient versions of Shor's algorithm that need fewer qubits. Innovation comes in waves, so it's good for the industry to stay vigilant and prep as early as possible ๐ŸŒŠ Also, the industry tracks advances from public research institutions like universities and from companies that publish their results, but there's also a ton of large-budget quantum research happening privately by various national interests ๐Ÿ•ต๏ธโ€โ™€๏ธ So the true state of quantum computer advancement is likely several years ahead of the publicly available research at the date this document is published ๐Ÿคฏ

Organizations also need to think honestly about what their migration timeline "y" really is ๐Ÿง If you only count the time between getting a patch from your technology vendor and rolling it out, then "y" might seem as short as a few weeks. But that's the minority of migration cases! More often, a PQC migration involves at least some hardware replacement ๐Ÿ› ๏ธ For example, performance-sensitive applications will need CPUs with PQC hardware acceleration. Security-sensitive applications will need PQC TPMs, Trusted Execution Environments (TEEs), secure enclaves, and other cryptographic co-processors. Smart card applications will require replacing the cards and the readers. And the readers come in lots of form factors: tap-for-entry door and turnstile readers, PIN pad machines, laptops with built-in smart card readers, and many others ๐Ÿ’ณ

"y" also includes more than just deployment time. It covers preparation time too: integration, testing, auditing, and recertification of cryptographic environments ๐Ÿ“‹ Consider upstream effects that add to "y" as well, like lead times for vendors to produce PQC-ready products (which may include auditing and certification delays), time for regulating bodies to adopt PQC policies, and time for auditors to get familiar with the new requirements, etc. ๐Ÿ™„ If you measure the full migration time "y" from when your vendors start implementing PQC functionality until you switch off your last non-PQC-capable device, then "y" can be quite long, likely measured in years for even most moderately sized organizations ๐Ÿข That long tail should not discourage early action though, bestie ๐Ÿ’–

Organizations responsible for protecting long-lived sensitive data or running critical infrastructure will need to start transitioning immediately, especially where data is vulnerable to HNDL attacks ๐Ÿšจ Post-quantum and traditional (PQ/T) Section 13 or PQ key exchange is relatively self-contained and typically only requires changes to the cryptographic library (e.g., OpenSSL) โœจ Migrating to post-quantum or PQ/T digital signatures is a whole different energy, though. It involves broader ecosystem changes, including updates to certificates, certification authorities (CAs), Certificate Management Protocols, HSMs, and trust anchors ๐Ÿฐ Starting early with hybrid key exchange deployments lets organizations gain operational experience, while prototyping and planning for PQ/T or PQ digital signature integration helps spot ecosystem-wide impacts early ๐Ÿ” This phased approach reduces long-term migration risks and makes sure everyone's ready for the more complex updates ๐Ÿ‘‘

8. PQC Categories ๐Ÿงฉ

The post-quantum cryptographic schemes standardized by NIST can be sorted into three main groups: lattice-based, hash-based, and code-based ๐Ÿ—‚๏ธ Other approaches, like isogeny-based, multivariate-based, and MPC-in-the-Head-based cryptography, are also being explored in research and standardization efforts ๐ŸŒˆ NIST also put out a call for additional digital signature proposals to expand the set of post-quantum signatures under evaluation [AddSig] ๐Ÿ“ฃ

8.1. Lattice-Based Public Key Cryptography ๐Ÿ’Ž

Lattice-based public key cryptography uses the simple construction of lattices (i.e., a regular collection of points in a Euclidean space that are evenly spaced) to build "trapdoor" problems ๐Ÿชž These problems are efficient to compute if you have the secret information, but challenging to compute otherwise ๐Ÿ” Examples include the shortest vector, closest vector, short integer solution, learning with errors, module learning with errors, and learning with rounding problems. All of these problems come with strong proofs for worst-to-average case reduction, which basically relates the hardness of the average case to the worst case ๐Ÿง  Iconic math, honestly ๐ŸคŒ

Lattice-based public keys and signatures are bigger than those of classical schemes like RSA or ECC ๐Ÿ“ฆ But the gap is typically less than an order of magnitude for public keys (about 6-10x) and roughly one to two orders of magnitude for signatures (about 10-100x), rather than several orders of magnitude. That's what makes them the best available candidates for general-purpose use, such as replacing RSA in PKIX certificates ๐ŸŽ€

Examples of this class of algorithms include ML-KEM, FN-DSA, ML-DSA, and FrodoKEM ๐Ÿ’…

It's noteworthy that lattice-based encryption schemes need a rounding step during decryption ๐Ÿ˜ณ That step has a non-zero probability of "rounding the wrong way" and causing a decryption failure, meaning valid encryptions get decrypted incorrectly. BUT the parameters of the NIST PQC candidates are carefully chosen so that the probability of such a failure is cryptographically negligible, far lower than the probability of random transmission errors and implementation bugs ๐Ÿ™Œ In practical terms, these rare decryption failures can be handled the same way as any fatal transport error: both sides simply perform a fresh KEM operation, generating a new ciphertext and shared secret ๐Ÿ”„

In cryptanalysis, an oracle is a system an attacker can query to learn whether decryption succeeded or failed ๐Ÿ‘€ If one exists, an attacker could significantly reduce the security of lattice-based schemes that have a relatively high failure rate. For most of the NIST PQC proposals, though, the number of oracle queries needed to force a decryption failure is above practical limits, as shown in [LattFail1] ๐Ÿ›ก๏ธ More recent works have improved on the results in [LattFail1], showing that the cost of searching for additional failing ciphertexts after one or more have already been found can be sped up dramatically [LattFail2] ๐ŸŽ๏ธ Still, at the time this document is published, the PQC candidates by NIST are considered secure under these attacks, and constant monitoring continues as cryptanalysis research goes on ๐Ÿ”ญ

8.2. Hash-Based Public Key Cryptography ๐Ÿงฑ

okay so hash-based public key cryptography (Hash-based PKC) has been around since the 1970s ๐Ÿ•ฐ๏ธ ๐Ÿ’… it was developed by Lamport and Merkle, and it's used to make digital signature algorithms. the security comes from the security of the underlying cryptographic hash function, which is honestly so iconic ๐Ÿ”ฅ

there are so many hash-based signature (HBS) variants since the 1970s, including the recent XMSS [RFC8391], HSS/LMS [RFC8554], or BPQS [BPQS] schemes ๐ŸŒธ but here's the lowkey tricky part: unlike a lot of other digital signature techniques, most hash-based signature schemes are stateful ๐Ÿ˜ญ that means signing needs you to update and carefully track the state of the secret key. if you produce multiple signatures using the same secret key state, you lose security, and it can ultimately enable signature forgery attacks against that key ๐Ÿ’€ not me having to babysit a key's state like that

stateful hash-based signatures with long service lifetimes need extra operational complexity compared to other signature types ๐Ÿงš for example, picture a 20-year root key ๐Ÿ—๏ธ you can expect that 20 years is longer than the lifetime of the hardware the key is stored on, so at some point the key will need to be migrated to new hardware. disaster-recovery scenarios, where the primary node fails without warning, can be just as tricky ๐Ÿ™ˆ this needs careful operational and compliance consideration so that no private key state can be reused across the migration or disaster-recovery event. one way to dodge all of this is to only use stateful HBSs for short-term use cases that don't need horizontal scaling, like signing a batch of firmware images and then retiring the signing key โœจ very main character energy for a key, honestly

โš ๏ธ reusing private key state across a migration or disaster-recovery event is the nightmare scenario. compliance and operations folks need to watch this one closely, bestie ๐Ÿซถ

the SLH-DSA algorithm, which NIST standardized ๐Ÿ‘‘ uses the HORST (Hash to Obtain Random Subset with Trees) technique and is still the only standardized hash-based signature scheme that's stateless, so it skips all the state-management headaches ๐Ÿฆ‹ SLH-DSA is an upgrade on SPHINCS that shrinks the signature sizes compared to SPHINCS and makes them more compact ๐Ÿ’œ


8.3. Code-Based Public Key Cryptography ๐Ÿ“

this area of cryptography kicked off in the 1970s and 1980s ๐ŸŒˆ it was built on the seminal work of McEliece and Niederreiter, and it's all about cryptosystems based on error-correcting codes. some popular error-correcting codes are Goppa codes (used in McEliece cryptosystems), the encoding and decoding syndrome codes used in HQC, and quasi-cyclic moderate density parity check (QC-MDPC) codes ๐Ÿง โœจ

the examples include all the unbroken NIST Round 4 finalists: Classic McEliece, HQC (selected by NIST for standardization), and Bit Flipping Key Encapsulation (BIKE) [BIKE] ๐Ÿ‘‘๐Ÿ’– the squad is strong


9. KEMs ๐ŸŽ€

okay this one is a big deal ๐Ÿ”ฅ a Key Encapsulation Mechanism (KEM) is a cryptographic technique for securely exchanging symmetric key material between two parties over an insecure channel ๐Ÿซถ it's commonly used in hybrid encryption schemes, where a combo of asymmetric (public key) and symmetric encryption is used ๐ŸŒธ the encapsulation operation of a KEM gives you a fixed-length symmetric key that can be used with a symmetric algorithm (typically a block cipher) in one of two ways:

  • to derive a data encryption key (DEK) to encrypt the data ๐Ÿ’Œ
  • to derive a key encryption key (KEK) used to wrap a DEK ๐ŸŽ

these techniques are often referred to as the Hybrid Public Key Encryption (HPKE) [RFC9180] mechanism ๐Ÿฆ‹

the word "encapsulation" was chosen on purpose ๐Ÿ’… to show that KEM algorithms behave differently at the API level from the key agreement, key encipherment, and key transport mechanisms we use today. with key agreement, both parties contribute a public-private key pair to the exchange ๐Ÿค with key encipherment and key transport, the symmetric key material is chosen by one party and "encrypted" or "wrapped" for the other party ๐Ÿ“ฆ KEMs are different: they behave according to the following API primitives [PQCAPI] ๐Ÿงš

  • def kemKeyGen() -> (pk, sk)
  • def kemEncaps(pk) -> (ss, ct)
  • def kemDecaps(ct, sk) -> ss

where pk is the public key, sk is the secret key, ct is the ciphertext representing an encapsulated key, and ss is the shared secret ๐Ÿ’œ here's a sample flow of a KEM-based key exchange, shown in Figure 2 โœจ

                     +---------+ +---------+
                     | Client  | | Server  |
                     +---------+ +---------+
 +----------------------+ |           |
 | pk, sk = kemKeyGen() |-|           |
 +----------------------+ |           |
                          |           |
                          | pk        |
                          |---------->|
                          |           | +-----------------------+
                          |           |-| ss, ct = kemEncaps(pk)|
                          |           | +-----------------------+
                          |           |
                          |       ct  |
                          |<----------|
 +------------------------+ |           |
 | ss = kemDecaps(ct, sk) |-|           |
 +------------------------+ |           |
                          |           |

                  Figure 2: KEM-Based Key Exchange

9.1. Authenticated Key Exchange โœจ

Okay bestie, so Authenticated Key Exchange (AKE) with KEMs, where both parties put a KEM public key into the session key, is interactive, same as in Section 9.4 of [RFC9528] ๐Ÿซถ. But a single-sided KEM is a different vibe. That's when one peer has a KEM key sitting in a certificate and the other peer just wants to encrypt for it, like in S/MIME or OpenPGP email. That one can be done with non-interactive HPKE [RFC9180] ๐Ÿ’Œ. Here's how the DH key exchange plays out:

                         +---------+ +---------+
                         | Client  | | Server  |
                         +---------+ +---------+
     +-----------------------+ |           |
     | Long-term client key: | |           |
     |         sk1, pk1      |-|           |
     +-----------------------+ |           |
                               |           |
                               | pk1       |
                               |---------->|
                               |           | +------------------------+
                               |           |-| Long-term server key:  |
                               |           | |         sk2, pk2       |
                               |           | | ss = KeyEx(pk1, sk2)   |
                               |           | +------------------------+
                               |           |
                               |        pk2|
                               |<----------|
   +-------------------------+ |           |
   | ss = KeyEx(pk2, sk1)    | |           |
   |  encryptContent(ss)     |-|           |
   +-------------------------+ |           |
                               | encrypted |
                               |   content |
                               |---------->|
                               |           | +------------------------+
                               |           | | decryptContent(ss)     |
                               |           | +------------------------+

Figure 3: DH-Based AKE

Look at that flow ๐Ÿ‘€. The shared secret ss comes from key material on both the client and the server side, so it counts as an AKE ๐Ÿค. There's also a separate property called Non-Interactive Key Exchange (NIKE). That one asks whether the sender can work out ss and encrypt content without any back-and-forth network messages with the recipient ๐Ÿ“จ. Figure 3 is a DH key exchange, so it's an AKE because both parties use long-term keys that can carry established trust (for example, via certificates) ๐ŸŽ€. But it's not a NIKE, because the client has to wait for the network exchange to get the receiver's public key pk2 before it can compute ss and start encrypting ๐Ÿ˜ญ. Still, a DH key exchange can be an AKE and a NIKE at the same time if the sender already knows the receiver's public key ahead of time (see Figure 4). Lots of Internet protocols lean on this trick with DH-based key exchanges ๐Ÿ’œ.

                         +---------+ +---------+
                         | Client  | | Server  |
                         +---------+ +---------+
     +-----------------------+ |           |
     | Long-term client key: | |           |
     |         sk1, pk1      |-|           |
     | Long-term server key: | |           |
     |         pk2           | |           |
     | ss = KeyEx(pk2, sk1)  | |           |
     |  encryptContent(ss)   |-|           |
     +-----------------------+ |           |
                               |           |
                               | pk1,      |
                               | encrypted |
                               |   content |
                               |---------->|
                               |           | +------------------------+
                               |           |-| Long-term server key:  |
                               |           | |         sk2, pk2       |
                               |           | | ss = KeyEx(pk1, sk2)   |
                               |           | |  decryptContent(ss)    |
                               |           | +------------------------+

Figure 4: Simultaneous DH-Based AKE and NIKE

Now the KEM plot twist ๐ŸŒ€. A KEM Encaps() is non-deterministic, meaning it uses randomness picked by the sender of that message. So to do an AKE, the client has to wait for the server to generate that randomness and run Encaps() against the client's key, and that always takes a full network round-trip ๐Ÿ›ซ. That means a KEM-based protocol can be an AKE or a NIKE, but it can't be both at once ๐Ÿ’€. Because of that, some Internet protocols are going to need a redesign to handle this split, either by adding extra round trips or by trading off some security properties ๐Ÿ™ˆ.

                         +---------+ +---------+
                         | Client  | | Server  |
                         +---------+ +---------+
   +------------------------+ |           |
   | pk1, sk1 = kemKeyGen() |-|           |
   +------------------------+ |           |
                              |           |
                              |pk1        |
                              |---------->|
                              |           | +--------------------------+
                              |           |-| ss1, ct1 = kemEncaps(pk1)|
                              |           | | pk2, sk2 = kemKeyGen()   |
                              |           | +--------------------------+
                              |           |
                              |    ct1,pk2|
                              |<----------|
 +--------------------------+ |           |
 | ss1 = kemDecaps(ct1, sk1)| |           |
 | ss2, ct2 = kemEncaps(pk2)|-|           |
 | ss = Combiner(ss1, ss2)  | |           |
 +--------------------------+ |           |
                              |           |
                              |ct2        |
                              |---------->|
                              |           | +--------------------------+
                              |           |-| ss2 = kemDecaps(ct2, sk2)|
                              |           | | ss = Combiner(ss1, ss2)  |
                              |           | +--------------------------+

Figure 5: KEM-Based AKE

In that figure, Combiner(ss1, ss2) (aka a KEM combiner) is a crypto construction that takes two shared secrets and spits out one combined shared secret ๐Ÿงฉ. The simplest version is plain concatenation, ss1 || ss2, but combiners can get way more complicated depending on what cryptographic properties you need ๐Ÿค“. For example, if the combined result has to keep IND-CCA2 (see Section 9.2.1) of either input, even when the other input is chosen maliciously, then you need a more complex construct ๐Ÿ”. Another thing to think about with combiner design is the so-called "binding properties" from [KEEPINGUP], which might mean the ciphertexts and recipient public keys need to be included in the combiner ๐ŸŽ€. KEM combiner security analysis gets even messier in hybrid setups, where the two KEMs are different algorithms, like ML-KEM plus ECDH ๐ŸŒˆ. If you want the deep dive on KEM combiners, check out [KEEPINGUP], [KEM-COMBINER], and [PQ-KEM] ๐Ÿ“šโœจ.

9.2. Security Properties of KEMs ๐Ÿ’…

The security properties in this section (IND-CCA2 and binding) are NOT a complete list of every possible KEM security consideration ๐Ÿ™ƒ. They were picked because they're fundamental for judging whether a KEM fits a protocol design, and they come up constantly in current PQC work ๐ŸŒธ.

9.2.1. IND-CCA2 ๐Ÿ›ก๏ธ

IND-CCA2 (INDistinguishability under adaptive Chosen-Ciphertext Attack) is an advanced security notion for encryption schemes ๐Ÿ”’. It keeps the plaintext confidential and holds up against chosen-ciphertext attacks ๐Ÿ‘‘. You can find an appropriate definition of IND-CCA2 security for KEMs in [CS01] and [BHK09]. ML-KEM [ML-KEM] and Classic McEliece both provide IND-CCA2 security ๐Ÿ’–.

Understanding IND-CCA2 is essential for anyone designing or implementing cryptographic systems and protocols ๐Ÿง . It's how you figure out how strong an algorithm is, whether it's a good fit for a particular use case, and whether data confidentiality and security requirements are actually met โœ…. That said, understanding IND-CCA2 is generally not necessary for developers who are just migrating to an IETF-vetted KEM inside a given protocol or flow ๐Ÿซถ. IND-CCA2 is a widely accepted security notion for public key encryption mechanisms, so it's suitable for a broad range of applications ๐ŸŒˆ. When an IETF specification defines a new KEM, its security considerations should fully describe the relevant cryptographic properties, including IND-CCA2 ๐Ÿ“.

9.2.2. Binding ๐Ÿฆ‹

KEMs have another set of properties to think about when you build protocols around them: binding [KEEPINGUP] ๐Ÿงต. That can be "ciphertext binding", "public key binding", "context binding", or any other property where you don't want stuff getting swapped between KEM invocations ๐Ÿ”„. In general, a KEM binds a certain value if an attacker substituting that value will necessarily result in a different shared secret being derived ๐Ÿšจ. For example, if an attacker can build two different ciphertexts that decapsulate to the same shared secret, the construction isn't ciphertext binding ๐Ÿ˜ฌ. If they can make one ciphertext decapsulate to the same shared secret under two different public keys, it isn't public key binding ๐Ÿ™ˆ. And if they can swap whole KEM exchanges from one session into another, it isn't context binding ๐Ÿซฃ. Protocol designers may also want to bind protocol state, like a transaction ID or nonce, so that replaying ciphertexts from one session inside a different session gets blocked at the cryptographic level ๐Ÿ›‘. The server derives a different shared secret in that case, so it can't decrypt the content ๐Ÿ”.

The fix for binding is mostly a protocol design thing ๐Ÿ› ๏ธ. It's recommended to avoid using the KEM output shared secret directly without integrating it into an appropriate protocol ๐Ÿ’ก. KEM algorithms give you key secrecy, but they don't inherently ensure source authenticity, protect against replay attacks, or guarantee freshness ๐Ÿ˜ค. Those properties have to come from putting the KEM into a protocol that's been analyzed for those protections ๐Ÿ“‹. Even though modern KEMs like ML-KEM produce full-entropy shared secrets, it's still advisable for binding reasons to run the shared secret through a key derivation function (KDF) and also include every value you want bound ๐ŸŽ€. Once you do that, you end up with a shared secret that's safe to use at the protocol level ๐Ÿ’œโœจ.

9.3. HPKE โœจ

okay so, hybrid encryption is an old, iconic idea ๐Ÿ’… You use an asymmetric algorithm to set up a key, then a symmetric algorithm does the heavy lifting on the bulk content ๐Ÿ” The earlier sections covered important security properties of KEMs, like IND-CCA2 security and binding, and honestly they must be supported by proper protocol design ๐Ÿซถ One widely deployed scheme that pulls this off is Hybrid Public Key Encryption (HPKE) [RFC9180] ๐Ÿ’–

HPKE [RFC9180] works with a combo of KEMs, KDFs, and Authenticated Encryption with Associated Data (AEAD) schemes ๐Ÿฆ‹ It has three authenticated variants: one authenticates possession of a pre-shared key, and two optional ones authenticate possession of a KEM private key ๐ŸŒธ HPKE can also be extended to support hybrid post-quantum KEMs [PQ-HPKE] โœจ ML-KEM doesn't support the static-ephemeral key exchange that lets HPKE work with DH-based KEMs and its optional authenticated modes, as discussed in Section 1.5 of [X-WING] ๐Ÿ’€ So that's a real plot twist, bestie ๐Ÿ˜ญ


10. PQC Signatures ๐Ÿ‘‘

Any digital signature scheme that provides a construction defining security under a post-quantum setting falls under this category of PQC signatures ๐Ÿงš

10.1. Security Properties of PQC Signatures ๐ŸŒˆ

10.1.1. EUF-CMA and SUF-CMA ๐Ÿ’œ

EUF-CMA (existential unforgeability under chosen message attack) [GMR88] is a security notion for digital signature schemes ๐ŸŽ€ It guarantees that an adversary, even with access to a signing oracle, cannot forge a valid signature for an arbitrary message ๐Ÿ™ˆ EUF-CMA gives strong protection against forgery attacks, keeping the integrity and authenticity of digital signatures intact by blocking unauthorized modifications and fraudulent signatures ๐Ÿ”ฅ ML-DSA, FN-DSA, and SLH-DSA all provide EUF-CMA security โœจ

SUF-CMA (strong unforgeability under chosen message attack) builds on EUF-CMA by requiring that an adversary cannot produce a different valid signature for a message that the signing oracle has already signed ๐Ÿฆ‹ Like EUF-CMA, it gives robust assurances for digital signature schemes and boosts their security posture even more ๐Ÿ’… ML-DSA, FN-DSA, and SLH-DSA also achieve SUF-CMA security ๐Ÿ‘‘

Understanding EUF-CMA and SUF-CMA is essential if you're designing or implementing cryptographic systems, so the security, reliability, and robustness of your signature schemes actually hold up ๐Ÿซถ These notions make informed decision-making possible, along with vulnerability analysis, compliance with standards, and designing systems with strong protection against forgery attacks ๐ŸŒธ For developers migrating to an IETF-vetted PQC signature scheme within a given protocol or flow, a deep understanding of EUF-CMA and SUF-CMA may not be necessary, because the schemes vetted by the IETF already meet these stringent security standards ๐Ÿ˜Œ

EUF-CMA and SUF-CMA are considered strong security benchmarks for public key signature algorithms, which makes them suitable for most applications ๐Ÿ’– Authors of IETF specifications should include all security concerns in the "Security Considerations" section of the relevant RFC, and they should not assume that implementers are experts in cryptographic theory ๐Ÿฅบ Please, be kind to your implementers ๐Ÿ’œ

10.2. Details of FN-DSA, ML-DSA, and SLH-DSA ๐Ÿ“

ML-DSA [ML-DSA] is a digital signature algorithm based on the hardness of lattice problems over module lattices (i.e., the Module Learning with Errors (MLWE) problem) ๐ŸŒˆ Its design follows the "Fiat-Shamir with Aborts" [Lyu09] framework introduced by Lyubashevsky, which uses rejection sampling to make lattice-based Fiat-Shamir (FS) schemes compact and secure ๐ŸŽ€ ML-DSA samples uniformly distributed random numbers over small integers to compute coefficients in error vectors, which makes it easier to implement compared to FN-DSA [FN-DSA] ๐Ÿฆ‹ FN-DSA uses Gaussian-distributed numbers, which means it needs floating-point arithmetic during signature generation ๐Ÿค“

ML-DSA offers both deterministic and randomized signing and is instantiated with three parameter sets that provide different security levels ๐ŸŒธ You can read about its security properties in Section 9 of [RFC9881] ๐Ÿ’–

FN-DSA [FN-DSA] is based on the GPV hash-and-sign lattice-based signature framework introduced by Gentry, Peikert, and Vaikuntanathan ๐Ÿงš That framework requires a certain class of lattices and a trapdoor sampler technique ๐Ÿ”ฅ

The main design principle of FN-DSA is compactness, meaning it's designed to achieve a minimal total memory bandwidth requirement (the sum of the signature size plus the public key size) โœจ This is possible thanks to the compactness of NTRU lattices ๐Ÿ’… FN-DSA also offers very efficient signing and verification procedures ๐Ÿซถ The main potential downsides are the non-triviality of its algorithms and the need for floating-point arithmetic support to do Gaussian-distributed random number sampling, where the other lattice schemes use the less efficient but easier-to-support uniformly distributed sampling ๐Ÿ˜ญ

Implementers of FN-DSA need to be aware that FN-DSA signing is highly susceptible to side-channel attacks unless constant-time 64-bit floating-point operations are used ๐Ÿ’€ This requirement is extremely platform-dependent, as noted in NIST's report [NIST] ๐Ÿ™ˆ

The performance characteristics of ML-DSA and FN-DSA may differ based on the specific implementation and hardware platform ๐ŸŒˆ Generally, ML-DSA is known for its relatively fast signature generation, while FN-DSA can provide more efficient signature verification ๐Ÿฆ‹ The choice may depend on whether your application needs more frequent signature generation or more frequent signature verification (see [LIBOQS]) ๐Ÿ’œ For more clarity on the sizes and security levels, check out the tables in Sections 11 and 12 ๐ŸŽ€

SLH-DSA [SLH-DSA] uses the concept of stateless hash-based signatures, where each signature is unique and unrelated to any previous signature (as discussed in Section 8.2) ๐ŸŒธ That property removes the need to maintain state information during signing ๐Ÿงš SLH-DSA was designed to sign up to 2^64 messages under a given key pair, and it offers three security levels โœจ The parameters for each level were chosen to provide 128 bits of security, 192 bits of security, and 256 bits of security ๐Ÿ”ฅ Compared to ML-DSA and FN-DSA, SLH-DSA has smaller public key sizes, but larger signature sizes, slower signature generation, and slower verification ๐Ÿฅน It doesn't introduce a new hardness assumption beyond those inherent to the underlying hash functions ๐Ÿ’– It builds on established foundations in cryptography, which makes it a reliable and robust digital signature scheme for a post-quantum world ๐Ÿ‘‘

All of these algorithms (ML-DSA, FN-DSA, and SLH-DSA) include two signature modes: pure mode, where the entire content is signed directly, and pre-hash mode, where a digest of the content is signed ๐Ÿฆ‹

10.3. Details of XMSS and LMS ๐ŸŒท

The eXtended Merkle Signature Scheme (XMSS) [RFC8391] and the Hierarchical Signature Scheme (HSS) / Leighton-Micali Signature (LMS) [RFC8554] are stateful hash-based signature schemes, where the secret key state changes over time ๐Ÿ” In both schemes, reusing a secret key state compromises the cryptographic security guarantees, so be careful, bestie ๐Ÿ˜ฑ

XMSS and LMS can be used to sign a potentially large but fixed number of messages, and the number of signing operations depends on the size of the tree ๐ŸŒณ They provide cryptographic digital signatures without relying on the conjectured hardness of mathematical problems, and instead they lean on the properties of cryptographic hash functions ๐Ÿ’œ Multi-tree XMSS and LMS (i.e., XMSS-MT and HSS, respectively) use a hyper-tree-based hierarchical approach, with a Merkle tree at each level of the hierarchy ๐ŸŽ€ [RFC8391] describes both single-tree and multi-tree variants of XMSS, while [RFC8554] describes the Leighton-Micali One-Time Signature (LM-OTS) system as well as the LMS and HSS N-time signature systems ๐Ÿฆ‹ The comparison of XMSS and LMS is discussed in Section 10 of [RFC8554] ๐ŸŒธ

The number of tree layers in multi-tree XMSS and HSS gives you a trade-off between signature size on one side and key generation and signing speed on the other ๐Ÿงš Increasing the number of layers reduces key generation time exponentially and signing time linearly, at the cost of increasing the signature size linearly ๐Ÿ“ˆ HSS allows for customization of each subtree, whereas XMSS-MT doesn't, and instead it uses the same structure for each subtree ๐Ÿ’…

Due to the complexities described above, XMSS and LMS aren't suitable replacements for traditional signature schemes like RSA or ECDSA ๐Ÿ™ƒ Applications that expect a long lifetime for a signature, like firmware update or secure boot, are the typical use cases where those schemes can be successfully applied ๐Ÿซถ

10.3.1. LMS Key and Signature Sizes ๐Ÿ“

The LMS scheme is characterized by four distinct parameter sets: the underlying hash function (SHA2-256 or SHAKE-256), the length of the digest (24 or 32 bytes), the LMS tree height parameter that controls the maximal number of signatures the private key can produce, and the width of the Winternitz coefficients (see [RFC8554], Section 4.1), which can be used to trade off signing time for signature size ๐ŸŒˆ Parameters can be mixed, which gives you 80 possible parameterizations of the scheme ๐Ÿคฏ

The public (PK) and private (SK) key sizes depend on the length of the digest (M) ๐ŸŽ€ The signature size depends on the digest, the Winternitz parameter (W), the LMS tree height (H), and the length of the digest again ๐Ÿฆ‹ The table below gives key and signature sizes for the parameterization with digest size M=32 ๐ŸŒธ

            +====+====+===+======+======+======+======+======+
            | PK | SK | W | H=5  | H=10 | H=15 | H=20 | H=25 |
            +====+====+===+======+======+======+======+======+
            | 56 | 52 | 1 | 8684 | 8844 | 9004 | 9164 | 9324 |
            +----+----+---+------+------+------+------+------+
            | 56 | 52 | 2 | 4460 | 4620 | 4780 | 4940 | 5100 |
            +----+----+---+------+------+------+------+------+
            | 56 | 52 | 4 | 2348 | 2508 | 2668 | 2828 | 2988 |
            +----+----+---+------+------+------+------+------+
            | 56 | 52 | 8 | 1292 | 1452 | 1612 | 1772 | 1932 |
            +----+----+---+------+------+------+------+------+

                                 Table 1

10.4. Hash-then-Sign โœจ

okay so bestie, let's talk about hash-then-sign ๐Ÿฆ‹ the idea is that you hash the message before you sign it ๐Ÿ’… which means the whole job of stopping existential forgeries now leans super hard on the collision-resistance of whatever hash function you're using ๐Ÿ˜ญ the upside is it can seriously boost application performance, because you're shrinking the signed message that has to get passed between the application and the cryptographic module ๐Ÿซถ and it makes the signature size predictable and manageable ๐ŸŽ€ the tradeoff? hashing is still required even for short messages ๐Ÿ™ˆ which piles extra computation onto the verifier ๐Ÿ’€ so the performance gets more consistent, but not necessarily faster โœจ

hashing the message down to a fixed-size digest also means the signature plays nicely with a wide range of systems and protocols, no matter how big or what shape the message is ๐ŸŒˆ and hot take: this is especially clutch for hardware security modules ๐Ÿ”ฅ it cuts down how much data has to get sent and processed by an HSM ๐Ÿ’– picture a networked HSM sitting in a totally different data center from the app calling it, or a smart card plugged in over USB ๐Ÿงš streaming a message that's megabytes or gigabytes long could mean real network lag, slow on-device signing, or even running out of on-device memory ๐Ÿ’€

also, the vast majority of Internet protocols that sign big messages already do some kind of content hashing at the protocol level ๐Ÿ“ so this is more of a concern for proprietary crypto protocols and protocols from non-IETF standards bodies ๐Ÿ‘‘ TLS 1.3 and DNSSEC both use hash-then-sign ๐ŸŒธ in TLS 1.3 [RFC8446] CertificateVerify messages, the signed content includes the transcript hash output (Section 4.4.1 of [RFC8446]) ๐Ÿฆ‹ and DNSSEC [RFC4034] uses it to provide origin authentication and integrity assurance for DNS data โœจ the Cryptographic Message Syntax (CMS) [RFC5652] is giving the same energy too, with a mandatory message digest step before the signature algorithm gets invoked ๐Ÿ’…

now for the PQC crew ๐Ÿ‘‘ ML-DSA internally bakes in the necessary hash operations as part of its signing algorithm ๐Ÿ”ฅ it takes the original message directly, applies a hash function internally, and then uses that hash value for signature generation ๐Ÿ’– SLH-DSA does its own randomized message compression using a keyed hash function that can handle arbitrary-length messages ๐Ÿงš and FN-DSA uses the SHAKE-256 hash function as part of the signature process to derive a digest of the message being signed ๐ŸŒˆ

so ML-DSA, FN-DSA, and SLH-DSA are lowkey more secure than the traditional hash-then-sign setup ๐Ÿ˜ญ because they mix dynamic key material into the message digest, a precomputed hash collision on the message no longer gives you a signature forgery ๐Ÿซถ that's the main reason it's iconic ๐Ÿ‘‘ applications that really want the performance and bandwidth perks of hash-then-sign can still pre-hash at the protocol level before calling ML-DSA, FN-DSA, or SLH-DSA ๐ŸŽ€ but protocol designers, be aware: doing that brings back the weakness where hash collisions directly yield signature forgeries ๐Ÿ™ˆ so if your app can handle it, signing the full un-digested message is recommended ๐Ÿ’œ


11. NIST Recommendations for Security and Performance Trade-offs ๐ŸŒธ

okay so this bit is a reprint of info from the NIST PQC project [NIST], as of the time this document is published ๐Ÿ“š Table 2 shows the five security levels NIST provides for PQC algorithms ๐Ÿ’… and neither NIST nor the IETF makes any specific recommendation about which level to use ๐Ÿ™ˆ protocols usually include algorithm choices at multiple levels, so users can pick whatever fits their policies and data classification ๐Ÿฆ‹ kinda like how orgs today pick which size of RSA key to use ๐Ÿ’– the levels are defined as requiring computational resources comparable to or greater than an attack on AES (128, 192, and 256) and SHA2/SHA3 algorithms, aka exhaustive key recovery for AES and optimal collision search for SHA2/SHA3 โœจ

  +=============+=====================+===========================+
  | PQ Security | AES/SHA(2/3)        | PQC Algorithm             |
  | Level       | hardness            |                           |
  +=============+=====================+===========================+
  | 1           | AES-128 (exhaustive | ML-KEM-512, FN-DSA-512,   |
  |             | key recovery)       | SLH-DSA-SHA2/SHAKE-128f/s |
  +-------------+---------------------+---------------------------+
  | 2           | SHA-256/SHA3-256    | ML-DSA-44                 |
  |             | (collision search)  |                           |
  +-------------+---------------------+---------------------------+
  | 3           | AES-192 (exhaustive | ML-KEM-768, ML-DSA-65,    |
  |             | key recovery)       | SLH-DSA-SHA2/SHAKE-192f/s |
  +-------------+---------------------+---------------------------+
  | 4           | SHA-384/SHA3-384    | No algorithm tested at    |
  |             | (collision search)  | this level                |
  +-------------+---------------------+---------------------------+
  | 5           | AES-256 (exhaustive | ML-KEM-1024, FN-DSA-1024, |
  |             | key recovery)       | ML-DSA-87, SLH-DSA-SHA2/  |
  |             |                     | SHAKE-256f/s              |
  +-------------+---------------------+---------------------------+

                                 Table 2

so the SLH-DSA-x-yf/s "f/s" bit in that table ๐Ÿงš tells you whether SLH-DSA uses SHAKE or SHA-2 as its underlying hash function "x", and whether it's the fast (f) or small (s) version for the "y" bit AES security level ๐Ÿ’– check out [RFC9814] for more deets on SLH-DSA algorithms ๐ŸŒˆ

next up, the table comparing signature sizes across SLH-DSA categories at equivalent security levels, using the "simple" version ๐Ÿซถ the categories are "f" for fast signature generation and "s" for smaller signatures and faster verification (though signature generation is slower) ๐Ÿ˜ญ SHA-256 and SHAKE-256 parameterizations produce the same signature sizes, so they're grouped together here ๐Ÿ’…

  +==========+===========================+========+=======+===========+
  | PQ       | Algorithm                 | Public |Private| Signature |
  | Security |                           | key    |key    | size (in  |
  | Level    |                           | size   |size   | bytes)    |
  |          |                           | (in    |(in    |           |
  |          |                           | bytes) |bytes) |           |
  +==========+===========================+========+=======+===========+
  | 1        | SLH-DSA-{SHA2,SHAKE}-128f | 32     |64     | 17088     |
  +----------+---------------------------+--------+-------+-----------+
  | 1        | SLH-DSA-{SHA2,SHAKE}-128s | 32     |64     | 7856      |
  +----------+---------------------------+--------+-------+-----------+
  | 3        | SLH-DSA-{SHA2,SHAKE}-192f | 48     |96     | 35664     |
  +----------+---------------------------+--------+-------+-----------+
  | 3        | SLH-DSA-{SHA2,SHAKE}-192s | 48     |96     | 16224     |
  +----------+---------------------------+--------+-------+-----------+
  | 5        | SLH-DSA-{SHA2,SHAKE}-256f | 64     |128    | 49856     |
  +----------+---------------------------+--------+-------+-----------+
  | 5        | SLH-DSA-{SHA2,SHAKE}-256s | 64     |128    | 29792     |
  +----------+---------------------------+--------+-------+-----------+

                                 Table 3

and this one ๐ŸŽ€ shows how performance hits different security levels, in terms of private key sizes, public key sizes, and ciphertext/signature sizes ๐Ÿฆ‹

  +==========+=============+============+============+================+
  | PQ       | Algorithm   | Public key | Private    | Ciphertext/    |
  | Security |             | size (in   | key size   | signature      |
  | Level    |             | bytes)     | (in bytes) | size (in       |
  |          |             |            |            | bytes)         |
  +==========+=============+============+============+================+
  | 1        | ML-KEM-512  | 800        | 1632       | 768            |
  +----------+-------------+------------+------------+----------------+
  | 1        | FN-DSA-512  | 897        | 1281       | 666            |
  +----------+-------------+------------+------------+----------------+
  | 2        | ML-DSA-44   | 1312       | 2560       | 2420           |
  +----------+-------------+------------+------------+----------------+
  | 3        | ML-KEM-768  | 1184       | 2400       | 1088           |
  +----------+-------------+------------+------------+----------------+
  | 3        | ML-DSA-65   | 1952       | 4032       | 3309           |
  +----------+-------------+------------+------------+----------------+
  | 5        | FN-DSA-1024 | 1793       | 2305       | 1280           |
  +----------+-------------+------------+------------+----------------+
  | 5        | ML-KEM-1024 | 1568       | 3168       | 1588           |
  +----------+-------------+------------+------------+----------------+
  | 5        | ML-DSA-87   | 2592       | 4896       | 4627           |
  +----------+-------------+------------+------------+----------------+

                                 Table 4

12. Comparing PQC KEMs/Signatures against Traditional KEMs, Key Exchanges, and Signatures โœจ

okay so this section is basically a glow-up face-off ๐Ÿ’… It puts PQC KEMs and signatures side by side with the traditional ones at similar security levels. The numbers that matter here are secret key sizes, public key sizes, and ciphertext/signature sizes. Bestie, the vibes are very "why is everything so thicc now" ๐Ÿ˜ญ

The first table compares traditional and PQC KEMs on security, public and private key sizes, and ciphertext sizes ๐ŸŽ€

+=============+=====================+========+=========+============+
| PQ Security | Algorithm           | Public | Private | Ciphertext |
| Level       |                     | key    | key     | size (in   |
|             |                     | size   | size    | bytes)     |
|             |                     | (in    | (in     |            |
|             |                     | bytes) | bytes)  |            |
+=============+=====================+========+=========+============+
| Traditional | P256_HKDF_SHA-256   | 65     | 32      | 65         |
+-------------+---------------------+--------+---------+------------+
| Traditional | P521_HKDF_SHA-512   | 133    | 66      | 133        |
+-------------+---------------------+--------+---------+------------+
| Traditional | X25519_HKDF_SHA-256 | 32     | 32      | 32         |
+-------------+---------------------+--------+---------+------------+
| 1           | ML-KEM-512          | 800    | 1632    | 768        |
+-------------+---------------------+--------+---------+------------+
| 3           | ML-KEM-768          | 1184   | 2400    | 1088       |
+-------------+---------------------+--------+---------+------------+
| 5           | ML-KEM-1024         | 1568   | 3168    | 1568       |
+-------------+---------------------+--------+---------+------------+

Table 5 ๐Ÿฆ‹

The next table does the same thing for signature schemes: security, public and private key sizes, and signature sizes ๐ŸŒธ

+=============+=============+============+============+===========+
| PQ Security | Algorithm   | Public key | Private    | Signature |
| Level       |             | size (in   | key size   | size (in  |
|             |             | bytes)     | (in bytes) | bytes)    |
+=============+=============+============+============+===========+
| Traditional | RSA2048     | 256        | 256        | 256       |
+-------------+-------------+------------+------------+-----------+
| Traditional | ECDSA-P256  | 64         | 32         | 64        |
+-------------+-------------+------------+------------+-----------+
| 1           | FN-DSA-512  | 897        | 1281       | 666       |
+-------------+-------------+------------+------------+-----------+
| 2           | ML-DSA-44   | 1312       | 2560       | 2420      |
+-------------+-------------+------------+------------+-----------+
| 3           | ML-DSA-65   | 1952       | 4032       | 3309      |
+-------------+-------------+------------+------------+-----------+
| 5           | FN-DSA-1024 | 1793       | 2305       | 1280      |
+-------------+-------------+------------+------------+-----------+
| 5           | ML-DSA-87   | 2592       | 4896       | 4627      |
+-------------+-------------+------------+------------+-----------+

Table 6 ๐Ÿงš

As you can see in the tables, PQC KEMs and signature schemes usually have way bigger keys and ciphertexts/signatures than their traditional counterparts ๐Ÿ’€ Those bigger sizes can cause actual problems in protocols. The example given is IKEv2, which sends its messages over UDP. The annoying part is that IKE fragmentation can't be used in the first IKE_SA_INIT exchange, so putting a PQC KEM into IKEv2 is tricky ๐Ÿ™ˆ [RFC9242] fixes this by adding a new exchange called the "Intermediate Exchange", which can be fragmented with the IKE fragmentation mechanism. Then [RFC9370] uses that Intermediate Exchange to do the PQC key exchange after the initial IKEv2 exchange and before IKE_AUTH. Literally so smart ๐Ÿ‘‘

There's another example in Section 6.3.3 of [SP-1800-38C]. Bigger keys and signatures mean the key exchange messages get spread across more network packets. More packets means a higher total loss probability per packet, so in lossy network conditions the key exchange can get slower. Not a vibe ๐Ÿ˜ญ

13. Post-Quantum and Traditional (PQ/T) Hybrid Schemes ๐ŸŒˆ

The move to PQC is kind of unprecedented in modern digital cryptography. Neither the traditional algorithms nor the post-quantum algorithms are fully trusted to protect data for the lifetimes that are required. Traditional algorithms like RSA and ECDH will fall to quantum cryptanalysis ๐Ÿ’€ Meanwhile the PQ algorithms come with their own uncertainty: the underlying mathematics, compliance issues, unknown vulnerabilities, and hardware and software implementations that haven't had enough time to mature and rule out traditional cryptanalytic attacks and implementation bugs. Both sides have baggage, bestie ๐Ÿซถ

During the transition from traditional to post-quantum algorithms, there may be a desire or a requirement for protocols that use both types of algorithm. [RFC9794] defines the terminology for PQ/T hybrid schemes ๐Ÿ“š

13.1. PQ/T Hybrid Confidentiality ๐Ÿ”

The PQ/T Hybrid Confidentiality property can help mitigate both "harvest now, decrypt now" and HNDL attacks, which are described in Section 7. If the PQ portion turns out to have a flaw, the traditional (T) algorithm is still secure against today's attackers, so it stops immediate decryption ("harvest now, decrypt now") ๐Ÿ›ก๏ธ If the T algorithm gets broken later by CRQCs, the PQ portion (assuming it's still secure) stops later decryption, which is the HNDL case. So a hybrid construction gives confidentiality as long as at least one component stays secure. It's giving redundancy, no cap โœจ Two types of hybrid key agreement schemes are discussed below.

  • Concatenated hybrid key agreement scheme: The final shared secret that goes into the key derivation function is the concatenation of the secrets established by each key agreement scheme. For example, in [TLS-HYB-KEY-EXCH], the client uses the TLS supported groups extension to advertise support for a PQ/T hybrid scheme, and the server can select that group if it supports the scheme. The hybrid-aware client and server establish a hybrid secret by concatenating the two shared secrets, and that becomes the shared secret in the existing TLS 1.3 key schedule. Iconic teamwork ๐Ÿค
  • Cascaded hybrid key agreement scheme: The final shared secret is computed by running the key derivation function as many times as there are key agreement schemes in the hybrid key agreement scheme. For example, [RFC9370] extends IKEv2 so that one or more PQC algorithms can be used alongside the traditional algorithm to derive the final IKE Security Association (SA) keys with the cascade method, as explained in Section 2.2.2 of [RFC9370] ๐Ÿฆ‹

There are lots of different ways to build these two types of hybrid key agreement, and you have to be careful about which one you pick ๐Ÿ‘€ The scheme chosen for protocols like TLS 1.3 [TLS-HYB-KEY-EXCH] has IND-CCA2 robustness. In other words, IND-CCA2 security is guaranteed for that scheme as long as at least one of the component algorithms is IND-CCA2 secure ๐Ÿ’–

13.2. PQ/T Hybrid Authentication ๐Ÿชช

The PQ/T hybrid authentication property protects against catastrophic breaks or unforeseen vulnerabilities in PQC algorithms. It gives systems extra time to stabilize before they fully migrate to pure PQ deployments ๐Ÿงš

This property makes sure authentication using a PQ/T hybrid scheme stays secure as long as at least one component algorithm remains secure. For example, a PQ/T hybrid certificate [ML-DSA-X.509] can be used to support a PQ/T hybrid authentication protocol. However, a PQ/T hybrid authentication protocol doesn't have to use a PQ/T hybrid certificate. Separate certificates can be used for the individual component algorithms [RFC9763]. When separate certificates are used, attackers may be able to take them apart or put them together in unexpected ways, and that can enable cross-protocol attacks ๐Ÿ™ˆ The exact risks depend heavily on the protocol and use case, so a full security analysis is needed. Best practices for making sure pairs of certificates are only used as intended are discussed in more detail in Sections 13.3.2 and 13.3.3 of this document.

Deciding whether and when to support the PQ/T Hybrid Authentication property means weighing how often and how long system upgrades take against when CRQCs will become widely available โณ

13.3. Hybrid Cryptographic Algorithm Combinations: Considerations and Approaches ๐Ÿ“

13.3.1. Hybrid Cryptographic Combinations ๐Ÿ’œ

You can also use more than two algorithms together in a hybrid scheme, and there are different ways to combine them. For post-quantum transition purposes, pairing a post-quantum algorithm with a traditional one is the most straightforward option, and it's the one recommended. Using multiple post-quantum algorithms with different mathematical bases has also been considered. Combining algorithms so that both have to be used together gives stronger security. Combinations that don't require both will give up some security, but they offer other perks like backwards compatibility and crypto agility ๐ŸŒŸ And including a traditional key alongside a post-quantum key often has minimal bandwidth impact. Lowkey the easiest win of the whole section ๐Ÿ’…

13.3.2. Composite Keys in Hybrid Schemes โœจ

okay so when you're combining keys in an "and" mode, it might make more sense to treat them as one composite key instead of two separate keys ๐ŸŽ€. This usually means way fewer changes across PKI ecosystems, because a lot of them aren't ready to handle two keys or dual signatures ๐Ÿ’€. To protocol and application parsers, a "composite" algorithm made of two "component" algorithms is just a new algorithm, and supporting new algorithms is already something they do ๐Ÿ’…. Treating multiple "component" keys as one "composite" key also has security advantages ๐Ÿ”ฅ. It prevents cross-protocol reuse of the individual component keys, and it guarantees that all the component keys get revoked or retired together at the same time, especially if the composite is handled as a single object all the way down into the cryptographic module ๐Ÿ”.

All that needs to be done is standardize the formats for how the two keys from the two algorithms get combined into one data structure, and how the two resulting signatures or KEMs get combined into one signature or KEM โœจ. The answer can be as simple as concatenation if the lengths are fixed or easily determined. At the time this document is published, security research is still ongoing about the security properties of concatenation-based composite signatures and KEMs, versus fancier signature and KEM combiners and protocol contexts where those simpler combiners are good enough ๐Ÿง.

One last thing is which pairs of algorithms can be combined ๐Ÿ‘€. Protocols have been trending toward only allowing a small number of "known good" configurations that make sense, often called a "ciphersuite" in cryptography, instead of letting you mix any individual configuration choices that might interact in dangerous ways ๐Ÿ™…. The current consensus is that the same approach should be followed when combining cryptographic algorithms. "Known good" pairs should be explicitly listed ("explicit composite") instead of just allowing any combination of any two cryptographic algorithms ("generic composite") ๐Ÿ’œ.

The same considerations apply when using multiple certificates to transport a pair of related keys for the same subject ๐Ÿ“œ. Exactly how two certificates should be managed to avoid some of the pitfalls above is still an active area of investigation ๐Ÿ”ฌ. Using two certificates keeps the certificate tooling simple and straightforward, but in the end it just moves problems (i.e., problems with the requirement that both certificates be used as a pair, that two signatures that must be carried separately, and that both validate) over to the certificate management layer, where addressing these concerns robustly can be hard ๐Ÿ˜ญ.

At least one scheme has been proposed that lets the pair of certificates exist as a single certificate when being issued and managed, but dynamically split into individual certificates when needed (see [ENC-PAIR-CERTS]) ๐Ÿฆ‹.

13.3.3. Key Reuse in Hybrid Schemes ๐Ÿšจ

An important security note, especially when using hybrid signature keys but also (to a lesser extent) hybrid KEM keys, is key reuse ๐Ÿ˜ฑ. In traditional cryptography, so-called "cross-protocol attacks" can happen when the same key is used for multiple protocols, like signing TLS handshakes and signing S/MIME emails. Reusing keys within the same protocol, like using the same key for multiple S/MIME certificates for the same user, isn't best practice, but it isn't generally catastrophic for security. Key reuse becomes a huge security problem within hybrid schemes though ๐Ÿ’€.

Consider an {RSA, ML-DSA} hybrid key where the RSA key also appears within a single-algorithm certificate. In this case, an attacker could perform a "stripping attack" ๐Ÿ™ˆ. They take some piece of data signed with the {RSA, ML-DSA} key, remove the ML-DSA signature, and present the data as if it was intended for the RSA-only certificate. This leads to a set of security definitions called "non-separability properties", which refers to how well the signature scheme resists various complexities of downgrade/stripping attacks [HYBRID-SIG-SPECT]. Therefore, it is recommended that implementers either reuse the entire hybrid key as a whole or perform fresh key generation of all component keys per usage, and must not take an existing key and reuse it as a component of a hybrid key ๐Ÿซถ.

13.3.4. Future Directions and Ongoing Research ๐Ÿ”ญ

Many aspects of hybrid cryptography are still under investigation ๐Ÿงช. The LAMPS Working Group at IETF is actively exploring the security properties of these combinations, and future standards will reflect the evolving consensus on these issues ๐ŸŒˆ.

14. Impact on Constrained Devices and Networks ๐Ÿงš

PQC algorithms generally have larger keys, ciphertext, and signature sizes than traditional public key algorithms ๐Ÿ“ฆ. This has a particularly big impact on constrained devices that operate with limited data rates ๐Ÿฅบ. In the IoT space, these constraints have historically driven significant optimization efforts in the IETF (e.g., in the LAKE and CoRE Working Groups) to adapt security protocols to resource-constrained environments โญ.

As the transition to PQC progresses, these environments will face similar challenges ๐Ÿ˜ฌ. Larger message sizes can increase handshake latency, raise energy consumption, and require fragmentation logic ๐Ÿ“. Work is ongoing in the IETF to study how PQC can be deployed in constrained devices (see [CONSTRAIN-DEV-PCQ]) ๐Ÿ”.

15. Security Considerations ๐Ÿ›ก๏ธ

15.1. Cryptanalysis

Traditional cryptanalysis exploits weaknesses in algorithm design, mathematical vulnerabilities, or implementation flaws that are exploitable with classical (i.e., non-quantum) hardware. Quantum cryptanalysis, on the other hand, harnesses the power of CRQCs to solve specific mathematical problems more efficiently ๐Ÿคฏ. Quantum side-channel attacks are another form of quantum cryptanalysis. In such attacks, a device under threat is directly connected to a quantum computer, which then injects entangled or superimposed data streams to exploit hardware that lacks protection against quantum side channels ๐Ÿ˜ฑ. Both pose threats to the security of cryptographic algorithms, including those used in PQC. It is crucial to develop and adopt new cryptographic algorithms that are resilient against these threats, to ensure long-term security in the face of advancing cryptanalysis techniques ๐Ÿ’–.

Recent attacks on side-channel implementations using deep learning-based power analysis have also shown that you need to be cautious while implementing the required PQC algorithms in hardware ๐Ÿ™ˆ. Two of the most recent works include one attack on ML-KEM [KyberSide] and one attack on Saber [SaberSide]. An evolving threat landscape points to the fact that lattice-based cryptography is indeed more vulnerable to side-channel attacks, as in [SideCh] and [LatticeSide]. Consequently, some mitigation techniques for side-channel attacks have been proposed; see [Mitigate1], [Mitigate2], and [Mitigate3] ๐Ÿ› ๏ธ.

15.2. Cryptographic Agility

Cryptographic agility is recommended for both traditional and quantum cryptanalysis, because it enables organizations to adapt to emerging threats, adopt stronger algorithms, comply with standards, and plan for long-term security in the face of evolving cryptanalytic techniques and the advent of CRQCs ๐Ÿฆ‹.

Several PQC schemes are available that need to be tested, cryptography experts around the world are pushing for the best possible solutions, and the first standards that will ease the introduction of PQC are being prepared ๐ŸŒ. This is of paramount importance and is a call for imminent action for organizations, bodies, and enterprises to start evaluating their cryptographic agility, assess the complexity of implementing PQC into their products, processes, and systems, and develop a migration plan that achieves their security goals to the best possible extent ๐Ÿ“ฃ.

An important and often overlooked step in achieving cryptographic agility is maintaining a cryptographic inventory ๐Ÿ“‹. Modern software stacks incorporate cryptography in numerous places, making it challenging to identify all instances. Therefore, cryptographic agility and inventory management take two major forms. First, application developers responsible for software maintenance should actively search for instances of hard-coded cryptographic algorithms within applications. When possible, they should design the choice of algorithm to be dynamic, based on application configuration. Second, administrators, policy officers, and compliance teams should take note of any instances where an application exposes cryptographic configurations. These instances should be managed through either organization-wide written cryptographic policies or automated cryptographic policy systems ๐Ÿ—‚๏ธ.

Numerous commercial solutions are available for detecting hard-coded cryptographic algorithms in source code and compiled binaries, as well as providing cryptographic policy management control planes for enterprise and production environments ๐Ÿ’ผ.

15.3. Jurisdictional Fragmentation

Another potential application of hybrid schemes bears mentioning, even though it is not directly related to PQC: using hybrids to navigate inter-jurisdictional cryptographic connections ๐Ÿ—บ๏ธ. Traditional cryptography is already fragmented by jurisdiction. Consider that while most jurisdictions support ECDH, those in the United States will prefer the NIST curves while those in Germany will prefer the Brainpool curves. China, Russia, and other jurisdictions have their own national cryptography standards. This situation of fragmented global cryptography standards is unlikely to improve with PQC. If "and" mode hybrid schemes become standardized for the reasons mentioned above, then one could imagine leveraging them to create ciphersuites in which a single cryptographic operation simultaneously satisfies the cryptographic requirements of both endpoints ๐Ÿ‘‘.

15.4. Hybrid Key Exchange and Signatures: Bridging the Gap Between PQ/T Cryptography ๐ŸŒ‰โœจ

Okay bestie, so the post-quantum algorithms that got picked for standardization are super new ๐ŸŒฑ. They haven't had anywhere near the same depth of study as the traditional algorithms, which is a lot to process ๐Ÿ˜ญ. The PQC implementations are brand new too, so they're more likely to have implementation bugs than the battle-tested crypto we rely on today ๐Ÿ’€. Some deployments also might have to keep traditional algorithms because of regulatory stuff, like FIPS [SP-800-56C] or Payment Card Industry (PCI) compliance [PCI] ๐Ÿ“‹. Hybrid key exchange is recommended to level up your security against the HNDL attack ๐Ÿ›ก๏ธ. And hybrid signatures give you time to react if somebody announces a devastating attack against any one algorithm, all without fully ditching traditional cryptosystems ๐Ÿซถ.

Hybrid key exchange runs a classical key exchange and a post-quantum key exchange side by side, at the same time โšก. That's giving redundancy ๐Ÿ‘‘, since it protects you against potential weaknesses in PQC algorithms. It also lets trust in PQC algorithms transition gradually ๐Ÿฆ‹. In backward-compatible designs, it lets things roll out gradually without breaking existing systems ๐ŸŒˆ. Like, in TLS 1.3, a hybrid key exchange can pair a widely supported classical algorithm, such as X25519, with a post-quantum algorithm like ML-KEM ๐Ÿ’–. Legacy clients keep using the classical algorithm, and upgraded clients get to proceed with the hybrid key exchange ๐Ÿงš. The main character energy here is everyone gets included ๐Ÿฅน.

Then there are the overhead-spreading hybrid designs, which focus on cutting down the PQ overhead ๐Ÿ“. Approaches like the ones in [PQ-MLS] amortize PQ costs by selectively applying PQ updates during key exchange processes ๐Ÿง . That lets systems balance security and efficiency โš–๏ธ. The result is a post-quantum secure channel that keeps the overhead manageable, which makes it especially suitable for constrained environments ๐ŸŽ€.

Now the honest part ๐Ÿ™ˆ. Some hybrid key exchange options add extra computational and bandwidth overhead. The impact of the traditional key exchange algorithms (e.g., key size) is usually small, though, so the overall jump in resource usage stays manageable for most systems ๐ŸŒธ. In highly constrained environments, those hybrid key exchange protocols might be impractical because they need more resources than pure post-quantum or traditional key exchange approaches ๐Ÿ˜ฌ. But some hybrid key exchange designs spread out the PQC overhead, which makes them better suited for constrained environments ๐Ÿ’œ. Ultimately, the right hybrid key exchange design depends on the specific system requirements and use case, so the best approach can vary ๐Ÿ’….

15.5. Caution: Ciphertext Commitment in KEM vs. DH ๐Ÿ”

Okay, so the ciphertext a KEM generates isn't necessarily directly linked to the shared secret it produces ๐Ÿคฏ. KEMs let multiple ciphertexts encapsulate the same shared secret, which gives you flexibility in key management without forcing a strict one-to-one relationship between ciphertexts and shared secrets ๐Ÿฆ‹. That means you can reuse a secret across different recipients, sessions, or operational contexts without making a new secret every single time โœจ. It simplifies key distribution and reduces computational overhead too ๐Ÿ™Œ.

Diffie-Hellman is a different vibe ๐Ÿ’€. It inherently links the public key to the derived shared secret, so any change in the public key results in a different shared secret ๐Ÿ”—. Totally different energy, and you need to know which one you're working with ๐Ÿ‘€.

16. IANA Considerations ๐Ÿ“‹

This document has no IANA actions ๐ŸŒท.

17. Further Reading and Resources ๐Ÿ“š

If you want a good book on modern cryptography, check out "Serious Cryptography, 2nd Edition" by Jean-Philippe Aumasson [Serious-Crypt] ๐Ÿ’œ.

The Open Quantum Safe (OQS) Project [OQS] is an open-source project that aims to support the transition to quantum-resistant cryptography ๐ŸŒˆ.

The IETF's PQUIP Working Group [PQUIP-WG] maintains a list of PQC-related protocol work within the IETF ๐Ÿงšโ€โ™€๏ธ.

18. References ๐ŸŽ€

18.1. Normative References ๐Ÿ’–

18.2. Informative References ๐ŸŒŸ

[SP-800-56C] ๐Ÿงš Barker, E., Chen, L., and R. Davis, "Recommendation for Key-Derivation Methods in Key-Establishment Schemes", NIST SP 800-56Cr2, DOI 10.6028/NIST.SP.800-56Cr2, August 2020, https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Cr2.pdf.

[Threat-Report] ๐Ÿ”ฅ Mosca, M. and M. Piani, "Quantum Threat Timeline Report 2020", Global Risk Institute, 27 January 2021, https://globalriskinstitute.org/publications/quantum-threat-timeline-report-2020/.

[TLS-HYB-KEY-EXCH] ๐Ÿ’œ Stebila, D., Fluhrer, S., and S. Gueron, "Hybrid key exchange in TLS 1.3", Work in Progress, Internet-Draft, draft-ietf-tls-hybrid-design-16, 7 September 2025, https://datatracker.ietf.org/doc/html/draft-ietf-tls-hybrid-design-16.

[X-WING] ๐Ÿฆ‹ Connolly, D., Schwabe, P., and B. Westerbaan, "X-Wing: general-purpose hybrid post-quantum KEM", Work in Progress, Internet-Draft, draft-connolly-cfrg-xwing-kem-10, 2 March 2026, https://datatracker.ietf.org/doc/html/draft-connolly-cfrg-xwing-kem-10.


Acknowledgements ๐Ÿซถ

okay bestie, the authors gotta give credit where it's due ๐Ÿ’– This document borrows text from an earlier Internet-Draft by Paul Hoffman โœจ Huge thanks to Dan Wing, Florence D, Thom Wiggers, Sophia Grundner-Culemann, Panos Kampanakis, Ben S, Sofia Celi, Melchior Aelmans, Falko Strenzke, Deirdre Connolly, Hani Ezzadeen, Britta Hale, Scott Rose, Hilarie Orman, Thomas Fossati, Roman Danyliw, Mike Bishop, Maliลกa Vuฤiniฤ‡, ร‰ric Vyncke, Deb Cooley, Dirk Von Hugo, and Daniel Van Geest for the discussion, review and comments ๐ŸŒธ The whole squad showed up.

In particular, the authors would like to acknowledge the contributions to this document by Kris Kwiatkowski. ๐Ÿ‘‘


Authors' Addresses ๐Ÿ’…

Here are the people who wrote it, with their homes and emails ๐ŸŽ€

Aritra Banerjee ๐ŸŒˆ

Aritra Banerjee
Nokia
London
United Kingdom
Email: aritra.banerjee@nokia.com

Tirumaleswar Reddy.K ๐Ÿฆ‹

Tirumaleswar Reddy.K
Nokia
Bangalore
Karnataka
India
Email: k.tirumaleswar_reddy@nokia.com

Dimitrios Schoinianakis โญ

Dimitrios Schoinianakis
Nokia
Athens
Greece
Email: dimitrios.schoinianakis@nokia-bell-labs.com

Timothy Hollebeek ๐Ÿ“

Timothy Hollebeek
DigiCert
Pittsburgh, PA
United States of America
Email: tim.hollebeek@digicert.com

Mike Ounsworth ๐Ÿงš

Mike Ounsworth
Entrust Limited
2500 Solandt Road, Suite 100
Ottawa, Ontario  K2K 3G5
Canada
Email: mike@ounsworth.ca

And that's a wrap on RFC 9958, bestie! ๐ŸŒˆโœจ๐Ÿ’–

๐Ÿ“ฆ where this page comes from