[TLS] Re: WG Last Call: draft-ietf-tls-mlkem-08 (Ends 20 26-07-08)
Sophie Schmieg <[email protected]> Thu, 16 Jul 2026 10:05:15 -0700
| Newsgroups | gmane.ietf.tls |
|---|---|
| Message-ID | <CAEEbLAZ0xmrEdJ4YCJN8XLxe-fZsEdaEdQ90wAfNQGqYgHgSxQ@mail.gmail.com> |
The last point is also wrong, for adversaries with access to a quantum computer. In that case, you very much leak the keygen randomness to the adversary. But again, this is not much of a problem, given that it's the output of a freaking random number generator. Which yes, you need to secure, but also, AES-CTR-DRBG is so ubiquitous that "What if my DRBG is accidentally not AES-CTR-DRBG" is more or less a moot question. On Thu, Jul 16, 2026 at 9:44 AM Christian Huitema <[email protected]> wrote: > > On 7/16/2026 3:40 AM, Nadim Kobeissi wrote: > > Jacob writes: > > > >> Fair enough. Here is a start on a minimal list I think the text needs to > >> cover: > >> > >> - cite the third-round Kyber submission; > >> - cite FIPS 203 Appendix C, where NIST documents removing `m <- H(m)`; > >> - state the FIPS 203 approved-RBG requirement; > >> - state that `m` is recovered by the decapsulating peer; > >> - recommend restoring Kyber's hashing of `m` as defense in depth against > >> hidden-structure RBG failures; > >> - cite Dual_EC_DRBG as the public standardized example. > >> - quote the relevant part(s) of FIPS 203 C.1 > >> > >> I can turn that into concrete PR text. Before doing that, I would like > >> to understand whether the WG is open to text at this level of > >> specificity, or whether the only text people are willing to consider is > >> a generic RNG sentence. If the generic sentence is the only thing on > >> offer, I would request someone else draft it and I am happy to give > >> feedback. > > This is incredibly unreasonable to the point of being disruptive. You > are basically demanding that the IETF undermine the entire point of NIST > standardization, on top of all your baseless insinuations about personal > motivations of those who disagree with you and your unreasonable threat > modeling when thinking about the entire question of `m` in ML-KEM and > sources of randomness. > > I think that the discussion has established a couple of points: > > * The MLKEM "decaps" function provides the TLS client with an exact copy > of the "m" bits chosen by the TLS server. > * These bits are the direct output of the RNG used by the server in the > MLKEM "encaps" function. > * If the RNG does not have backward and forward replay protection, these > bits can be used to predict past or future outputs of the RNG, and this > is bad. > * RNGs that are compromised by some kind of supply chain attack will not > provide backward and forward protection. > * The same RNG may or may not be used to derive TLS elements such as the > Server Random bytes (depending on how implementers understand the > public/private split discussed in annex C1 of TLS 1.3) > * Key exchanges based on Diffie-Hellman operating on number fields with > an associative multiply function do not expose the random bits used for > generating the key. > > The last point is an important difference. An RNG that is "good enough" > when using classic Diffie-Hellman for key exchange may not be adequate > for MLKEM. It is definitely worth pointing that out to implementers. The > reasonable solution is to build a resistant RNG by combining the > standard RNG with an adequate DRBG [citation-needed]. > > I would suggest both a simple mention of the problem in the security > section of both MLKEM based drafts, and a somewhat longer term work on > an RFC discussing randomness requirement for TLS and maybe other > security functions. > > -- Christian Huitema > > > > > > > > > > At what point does this become pure concern trolling? I regret even > making the effort to catch up on these discussions. > > > > Nadim Kobeissi > > Symbolic Software • https://symbolic.software > > > >> On 15 Jul 2026, at 5:25 AM, Jacob Appelbaum <[email protected]> > wrote: > >> > >> Hi Paul, > >> > >> On 7/14/26 03:17, Paul Wouters wrote: > >>> The draft does not define crypto, it normatively references some > crypto. It cannot both normatively reference it and modify it to make its > own. > >> I do not think that follows and while it does not define the code point, > >> it does define how the cryptography is used in TLS including Security > >> Considerations. A TLS draft can normatively reference FIPS > >> 203 and still explain the relevant assumptions and tradeoffs in Security > >> Considerations. > >> > >> FIPS 203 Appendix C itself documents that Kyber originally hashed `m` > >> and that NIST removed that step because ML-KEM requires approved > >> randomness generation. The TLS draft should say that plainly. > >> > >> Namely, quote the entirety of C.1: > >> ``` > >> C.1 Differences Between CRYSTALS-Kyber and FIPS 203 Initial Pub- > >> lic Draft > >> • In the third-round specification [4], the shared secret key was > >> treated as a variable-length > >> value whose length depended on how it would be used in the relevant > >> application. In this > >> specification, the length of the shared secret key is fixed to 256 bits. > >> It can be used directly > >> in applications as a symmetric key, or symmetric keys can be derived > >> from it, as specified > >> in Section 3.3. > >> • The ML-KEM.Encaps and ML-KEM.Decaps algorithms in this specification > >> use a different > >> variant of the Fujisaki-Okamoto transform (see [24, 25]) than the third- > >> round specifica- > >> tion [4]. Specifically, ML-KEM.Encaps no longer includes a hash of the > >> ciphertext in the > >> derivation of the shared secret, and ML-KEM.Decaps has been adjusted to > >> match this > >> change. > >> • In the third-round specification [4], the initial randomness 𝑚 in the > >> ML-KEM.Encaps algo- > >> rithm was first hashed before being used. Specifically, between lines 1 > >> and 2 in Algorithm > >> 20, there was an additional step that performed the operation 𝑚 ← > 𝐻(𝑚). > >> The purpose > >> of this step was to safeguard against the use of flawed randomness > >> generation processes. > >> As this standard requires the use of NIST-approved randomness > >> generation, this step is > >> unnecessary and is not performed in ML-KEM. > >> • This specification includes explicit input checking steps that were > >> not part of the third-round > >> specification [4]. For example, ML-KEM.Encaps requires that the byte > >> array containing the > >> encapsulation key correctly decodes to an array of integers modulo 𝑞 > >> without any modular > >> reductions. > >> ``` > >> > >> Alternatively highlight this part of C.1 from FIPS 203: > >> ``` > >> • In the third-round specification [4], the initial randomness 𝑚 in the > >> ML-KEM.Encaps algorithm was first hashed before being used. > >> Specifically, between lines 1 and 2 in Algorithm 20, there was an > >> additional step that performed the operation 𝑚 ← 𝐻(𝑚). > >> The purpose of this step was to safeguard against the use of flawed > >> randomness generation processes. > >> As this standard requires the use of NIST-approved randomness > >> generation, this step is unnecessary and is not performed in ML-KEM. > >> ``` > >> > >> Then I would suggest describing the total set of requirements from > >> FIPS203 or giving advice that `𝑚 ← 𝐻(𝑚)` should be used if the NIST- > >> approved randomness generation requirement is not met. I would also > >> probably want to say that this change by NIST is not robust against a > >> failure of their DRBG, nor is it robust against providing an oracle, the > >> m-oracle, I suppose which may be queries over TLS and/or used to sample > >> the DRBG outputs directly. > >> > >>> The IETF cannot modify things that are an external normative > reference. MLKEM is what NIST defined, not what you are trying to build now. > >> I am not asking the draft to pretend that NIST defined something else. I > >> am asking the draft to document the consequence of what NIST defined: > >> without the approved-RBG assumption, the rationale for removing Kyber's > >> hash over `m` no longer holds. > >> > >> If the draft does not restore `m <- H(m)`, then it should at least state > >> the FIPS 203 approved-RBG requirement and the fact that `m` is recovered > >> by the decapsulating peer. > >> > >> This matters in practice. Many implementations will use `os.urandom`, > >> `/dev/urandom`, `/dev/random`, `/dev/hwrng`, `getentropy()`, > >> `getrandom()`, or another platform or library interface. Those may be > >> excellent choices in a well-designed system, but they are not > >> automatically the same thing as a NIST-approved RBG satisfying the FIPS > >> 203 condition used to justify removing the hash. > >> > >> One way to make the dependency clear is to think of the real requirement > >> as something closer to: > >> > >> - ML-KEM-512-Hash_DRBG > >> - ML-KEM-512-HMAC_DRBG > >> - ML-KEM-512-CTR_DRBG > >> - ML-KEM-768-Hash_DRBG > >> - ML-KEM-768-HMAC_DRBG > >> - ML-KEM-768-CTR_DRBG > >> - ML-KEM-1024-Hash_DRBG > >> - ML-KEM-1024-HMAC_DRBG > >> - ML-KEM-1024-CTR_DRBG > >> > >> Listing that is a concrete suggestion for the text but I do not feel > >> strongly about where it goes in the text. > >> > >> These are shorthand examples names and I am not suggesting new algorithm > >> names. The point is that FIPS 203 relies on an approved RBG of > >> appropriate strength. If an implementation omits that part, the reason > >> NIST gave for removing Kyber's hash over `m` no longer applies. > >> > >>> This answer circles the answer by not distinguishing between the RNG > issue and any other issues. You still did not answer the question. > >> My answer is: not as-is. > >> > >> I am open to text that is applied consistently to both ML-KEM drafts. > >> But a generic sentence about "use a good RNG" does not address the > >> specific FIPS 203 requirement, nor the protocol consequence that `m` is > >> recovered by the decapsulating peer. > >> > >>> This does answer it better, it seems your answer is "no". > >> No. My answer is not "no no matter what." My answer is "not as-is" > >> because your suggestion is not even a full suggestion where I could just > >> say yes. > >> > >>> Which is the same issue as the "m concern". > >> Related, not identical. The approved-RBG dependency is the assumption > >> and a requirement. The `m` concern is the protocol consequence when that > >> assumption is not met, or when it is hidden from implementers. > >> > >>> For one, this is not different between pure and hybrid, yet you have > no issue with the hybrid Security Considerations? > >> I do have an issue with the hybrid draft on this point. The same > >> Appendix C tradeoff and the same `m` issue apply there too. Hybrid helps > >> against some failures, but it does not automatically help if the same > >> recoverable RBG lineage later feeds the classical ephemeral scalar. The > >> removal of the hash leads to some fun issues and not only with > >> Dual_EC_DRBG but also. > >> > >>> Second, it seems as people said, TLS already provides a huge amount of > options and parameters to use as a covert channel. > >> Agreed. That is why broader covert-channel work is also needed. But that > >> does not justify leaving this specific ML-KEM issue unexplained in these > >> drafts. It is a bit annoying to go back and forth between each layer > >> where a different layer is used as a reason to ignore the issues in the > >> layer under discussion. > >> > >>> What would a TLS implementer need to know when it uses a cryptographic > library to support a new cipher, whether hybrid or pure? > >> They need to know at least: > >> > >> 1. FIPS 203 requires ML-KEM randomness from a NIST-approved RBG. > >> 2. `m` is recovered by the decapsulating peer. > >> 3. Kyber originally hashed `m` to protect against flawed randomness. > >> 4. Dual_EC_DRBG is the public standardized example of a > >> hidden-structure RBG failure. > >> 5. Hybrid does not automatically help if the same recovered RBG lineage > >> later feeds the classical ephemeral scalar. > >> 6. This change was an intentional choice by NIST and the IETF does not > >> agree with this change as it cannot mandiate the use of a specific DRBG. > >> > >>> First, it seems most of the items you just listed are the same item, > and basically you want it to say "don't use pure, use hybrid instead", > >> That is not my position. The `m` issue applies to ML-KEM in both the > >> standalone and hybrid drafts. My concern is that the drafts do not > >> clearly state the FIPS 203 randomness requirement, the Appendix C > >> tradeoff, or the peer-recoverability of `m`. > >> > >>> Second, if you want this document to proceed with some newly added > text, it is up to you to propose such text to the WG. > >> Fair enough. Here is a start on a minimal list I think the text needs to > >> cover: > >> > >> - cite the third-round Kyber submission; > >> - cite FIPS 203 Appendix C, where NIST documents removing `m <- H(m)`; > >> - state the FIPS 203 approved-RBG requirement; > >> - state that `m` is recovered by the decapsulating peer; > >> - recommend restoring Kyber's hashing of `m` as defense in depth against > >> hidden-structure RBG failures; > >> - cite Dual_EC_DRBG as the public standardized example. > >> - quote the relevant part(s) of FIPS 203 C.1 > >> > >> I can turn that into concrete PR text. Before doing that, I would like > >> to understand whether the WG is open to text at this level of > >> specificity, or whether the only text people are willing to consider is > >> a generic RNG sentence. If the generic sentence is the only thing on > >> offer, I would request someone else draft it and I am happy to give > >> feedback. > >> > >>> So "pure" is what the IETF is using now for consistency. > >> Point of clarification: did you mean ML-KEM or ML-KEM-WITH-A-DRBG when > >> you said pure in that context? > >> > >>> The current text is the consensus proposal of two years of talk within > the TLS WG. > >> The WGLC for draft-ietf-tls-mlkem-08 has ended, but I have not seen a > >> declaration of consensus. We also do not yet have agreed text that > >> addresses the FIPS 203 randomness requirement or Appendix C tradeoff. > >> > >>> I am not aware of any technical concerns. > >> Then let us test that with concrete text. The concern is not merely a > >> different risk preference. It is that NIST's rationale for removing > >> Kyber's hash depends on an approved-RBG requirement that the TLS draft > >> does not clearly carry forward. > >> > >>> So to me that makes it clear that in practise, your answer will remain > "no". > >> No. If the drafts clearly document the FIPS 203 approved-RBG assumption, > >> the peer-recoverability of `m`, and the reason Kyber hashed `m`, I am > >> open to changing my view. If the text is only "use a good RNG", then no, > >> that is not enough. > >> > >>> As I explained above, you providing concrete text additions/ > modifications will help determine consensus of your suggestions > >> I take that point. I can provide concrete text. My concern is that the > >> Last Call has already closed, so I am asking how the chairs intend to > >> handle new text if there is support for it. > >> > >>> Rough consensus is achieved when all issues are addressed, but not > necessarily accommodated. > >> Agreed. My position is that the issue has not yet been addressed. It has > >> mostly been reframed as a generic RNG problem, which misses the specific > >> Appendix C tradeoff and the `m` oracle. > >> > >>> The one thing that is clear to me is that what you are asking for is > basically changing the normative reference. > >> I reject that framing. Security Considerations routinely explain > >> assumptions, risks, and implementation guidance around normative > >> references. That is what I am asking for here. > >> > >> The normative reference itself discusses Kyber and ML-KEM together in > >> Appendix C. Quoting and explaining that text is not changing the > >> normative reference. It is making the reference intelligible to TLS > >> implementers. > >> > >>> Adding a generic statement about RNG is the only compromise possible. > >> I do not agree. A meaningful compromise would state the actual FIPS 203 > >> approved-RBG requirement, state that `m` is recovered by the > >> decapsulating peer, and explain that Kyber originally hashed `m` to > >> protect against flawed randomness. > >> > >>> If that is not good enough for you, your only option is to voice that > you are against publication - > >> That is not my only option. I am currently against publication as-is, > >> but I am also trying to find text that could resolve the issue. > >> > >>> and to be consistent, I would expect you to be against publication of > both the pure and hybrid mlkem drafts, as they are identical in that part, > using the same normative reference of NIST. > >> I am against omitting the relevant FIPS 203 Appendix C details in both > >> drafts. I am against omitting advice to implementers who are not running > >> a FIPS-validated stack. I am against omitting the fact that `m` is > >> available to the decapsulating peer. And I am against omitting the > >> historical example of Dual_EC_DRBG when discussing hidden-structure RBG > >> failures. > >> > >> A suggestion of generic RNG sentence that is not a concrete suggestion > >> is not enough, no. Text that states the FIPS 203 approved-RBG > >> requirement, the peer-recoverability of `m`, and the reason Kyber hashed > >> `m` would be meaningful. > >> > >> Kind regards, > >> Jacob Appelbaum > >> > >> _______________________________________________ > >> TLS mailing list -- [email protected] > >> To unsubscribe send an email to [email protected] > > > > > > _______________________________________________ > > TLS mailing list -- [email protected] > > To unsubscribe send an email to [email protected] > > _______________________________________________ > TLS mailing list -- [email protected] > To unsubscribe send an email to [email protected] > -- Sophie Schmieg | Information Security Engineer | ISE Crypto | [email protected] _______________________________________________ TLS mailing list -- [email protected] To unsubscribe send an email to [email protected]