[TLS] Re: WG Last Call: draft-ietf-tls-mlkem-08 (Ends 20 26-07-08) (was Re: Re: Response to CoI Complaints)

Jacob Appelbaum <[email protected]> Sat, 18 Jul 2026 16:48:36 +0200
Newsgroups gmane.ietf.tls
Message-ID <[email protected]>
Hi Nico,

On 7/17/26 07:35, Nico Williams wrote:
 > On Fri, Jul 17, 2026 at 12:52:05AM +0200, Jacob Appelbaum wrote:
>> On 7/16/26 21:57, Nico Williams wrote:
>> 
>>> The objective answer is that the horse left the barn two decades
>>> ago when the IETF decided to get out of fighting about national
>>> cryptographic standards, therefore Deb's 37 years at the NSA are
>>> irrelevant in this case, and you're fighting the wrong battle if
>>> you want to change that two-decade-old decision.
>> 
>> That is not correct and the ISE could easily publish the drafts 
>> under discussion without consensus as Rob suggested more than a 
>> week ago.
> 
> Has that not been opposed too? / The relevant decision-makers would 
> be the authors and the Independent Submission Editor. I have not 
> seen a definitive objection from either, and I understood Eliot to 
> be open to considering the idea.
>
> Would that not be opposed too? It could certainly be opposed. What 
> kind of opposition do you mean?

Rob's (it was Rob, right?) suggestion appears to be a viable fallback.
The Independent Stream does not require IETF rough consensus, although
it is not an automatic bypass: the authors and ISE would have to pursue
it, and the IESG would still conduct the RFC 5742 conflict review
[0][1]. I note that the authors have largely not engaged in discussion.

> I swear I've seen arguments that users of RFCs don't really 
> understand these subtle differences in track and editor queues,
> that they take any RFC as a 'standard'.

Yes. Many readers treat any RFC number as a standard despite the stream
boilerplate. That is a real drawback, but it is also why the distinction
matters for _us_: Independent Stream publication would not assert IETF
consensus. In practice, I suspect very few outside of the IETF would
care about the distinction. It would allow us to provide clarity when
the matter is raised.

I still prefer resolving the issues in the working group. I am not
opposed to publication; I am trying to identify text that makes
publication responsible.

>>> What you're really litigating is a social death penalty for the 
>>> NSA -- something we *could* do, but shouldn't.  We really, 
>>> really shouldn't do that for at least several reasons, such as:
>> 
>> You may be surprised but I very strongly agree with you. We should
>> not litigate a social death penalty. I do not advocate for 
>> removing Deb from the IETF. No one should be harassing her. No one
>> should be making threats. No one should be giving her a hard time.
>> No one should be mocking her on social media. No one should be
>> sending threatening or slanderous or libelous emails.
> 
> It's not just the invectives against Deb.  It's also the invectives 
> against the I-D authors and those who have voiced support for the I-
> D.

I extend that to everyone: Deb, the authors, supporters, opponents,
and other participants. We need more technical communication, not
threats, harassment, ostracism, or censorship.

I have received several reports of troubling off-list conduct. That
should be handled through the appropriate conduct process rather than
mixed into the technical disposition of the drafts. It is unclear to me
if those reports will by sent by those persons to the IETF out of
(expressed to me) fear of retaliation.

> The incessant urging to not publish anything that might be tainted 
> by the NSA *is* very much akin to a social death penalty for the 
> NSA.

I do not oppose publication because NSA personnel were involved.

The immediate concern is a documented NIST design decision: FIPS 203
removed Kyber's `m <- H(m)` step, whose stated purpose was protection
against flawed randomness, because FIPS 203 requires approved randomness
generation [2][3]. The question is whether IETF documents should repeat
that assumption silently or not, describe and explain the peer-
recoverable value, and preserve a cheap local safeguard for deployments
that do not satisfy the full FIPS model.

It is indisputable that NIST removed the hash over `m`, ignored all
pushback, ignored official comments on the matter, and unrelated to much
of the discussion they then also declared that non FIPS-certified
settings are expected to simply fail catastrophically if the RNG has an
issue. So you see, removing the hash and qualatatively weakening the
design of Kyber, they assert is fine. That they accept this outcome and
state that they are correct was explictly stated by NIST on this very
list. They additionally also push this without a hybrid construction,
also over the express concerns of the authors of Kyber. Those two things
together and my ability to exploit ML-KEM in the Dual_EC_DRBG setting
correctly raise eyebrows.

NSA involvement is relevant historical context, but it is not a social
veto. NIST is not the final technical authority for the IETF, any more
than BSI, CSE, ETSI, ISO, IEEE, or a corporation would be. Former NIST
people dropping by to argue that the world should adopt their public
security posture is unreasonable. They have a traditionally had the
Suite A and Suite B security postures and we're being offered the B
option by another name, again. The IETF should have a stronger security
posture and wihtout being in a FIPS-certified setting. The same
scrutiny should apply to every source: examine the design, assumptions,
evidence, and consequences for the end user.

The still-incomplete public record concerning NIST/NSA coordination and
the answers given in this discussion make careful review more, not less,
appropriate. I would also welcome explicit clarification of the IPR
position, although the current drafts do not resolve it.

Comments that are not made by NIST have not brought clarity because any
such analysis carries no weight about NIST's actual position. If NIST
makes clear that we are free to hash `m` and retain the IPR waiver, we
would be able to resolve the issue of excess authority preventing a
stronger security posture, if it is desired. Do you see that they are
unwilling to bring this clarity? If they were gagged as John Kelsey was,
I would expect that bringing this clarity would be out of bounds. NIST
is free to say otherwise and what they did say on the matter is
contridicted by the public record. It could be credibly explained but
NIST did not deem it worthy of their time.

The American cliché "good enough for government" is the phrase that 
comes to mind here. Is that good enough for the IETF? No, it is not.

>> People should *especially* not be punished for the worst thing 
>> they are suspected of doing, and especially if they did not do it.
>> 
>> Even if they are guilty, they deserve a chance at redemption.
>> 
>> Everyone deserves a fair shot at re-integration.
> 
> For those who say TL;DR, the summary is that: IMO the ML-KEM I-D - 
> and all I-Ds specifying KEMs- should normatively state which DRBGs 
> are acceptable, and they should include informative text about the 
> unfortunate risk of RNG-based kleptography when using KEMs outside 
> DH hybrids.

I broadly agree, with the qualification if 'acceptable' is stated as a
'MUST' or a 'requirement imposed by NIST to achieve security' and that a
hybrid does not help if both components depend on the same recovered RBG
lineage.

> Ok then, here's my take:
> 
> * Ideally we should have a practical, strong PQ Diffie-Hellman.  We 
> do not. I agree in the strongest terms. Practical post-quantum 
> constructions with genuine Diffie-Hellman-like contributory
> behavior remain an important research goal.

MIKE seems interesting but I have not analyzed it, evaluated it, used an
implementation in a deployment.

CTIDH is somewhat more familar to me and while there is literature that
is relevant for the security in the quantum setting, I find it to be
extremely promising.

CTIDH and related commutative group-action work are interesting in that
respect. I help maintain an implementation released by an academic
group, but I did not design CTIDH and make no claim that it is ready to
replace standardized KEMs. In my own experimental use I combine it with
X25519.

More generally, I would not deploy a comparatively young post-quantum
construction without an independently generated classical component
today. On balance I have decided that in at least two protocol withs no
other PQC option available, a hybrid X25519 and CTIDH-512 or CTIDH-1024
were better than X25519 alone. This protects against CTIDH failures
today, and hedges against a future with quantum computers.

> * All KEMs are going to have this `m` problem in some fashion.  Is 
> that a correct statement?  That makes all of them suitable for RNG- 
> based kleptography. I do not think that all KEMs necessarily have 
> the same problem. We need a precise property: can an adversarial 
> recipient recover an unchanged, sufficiently large, ordered sample 
> of the sender's RBG output?

ML-KEM clearly exposes that shape in the most risky way possible and it
is unnecessary risk. To recap before we en-and-de-cap: `ML-KEM.Encaps`
samples a 32-byte `m`, and a decapsulating peer that controls its
implementation can retain the reconstructed `m'`. Third-round Kyber
instead hashed `m` before using it [2][3]. Other KEMs and their uses
have to be analyzed construction by construction; a ciphertext carrying
a recoverable secret is not necessarily carrying raw generator bytes.

In addition to Kyber where everything is essentially equal except the
hash in our discussion, sntrup761 is a useful contrast. It uses a
structured fixed-weight ternary polynomial `r`, not a raw 32-byte `m`.
In the reference sampler, many 32-bit random words are masked, sorted,
and mapped into the ternary polynomial before `r` is used, and the
shared key is derived by hashing its encoding [4]. The recipient can
recover `r`, but `r` is not an unchanged contiguous generator block. The
difference is extremely stark.

That does not prove immunity to every malicious or specially shaped
RBG. It means only that the direct ML-KEM argument does not transfer
unchanged. I made a preliminary attempt to recover a Dual_EC_DRBG block
through this sampler and did not succeed. I would welcome a better
analysis, especially from the sntrup761 authors: do you see a practical
method for reconstructing a full Dual_EC output block from the existing
fixed-weight sampler? The sntrup761 authors and implementations could
also hash the RNG as Kyber did to make the comparison even easier.
Regardless, NIST and a couple of other people may discuss the
construction of `m` and KEMs in a way that would lead a reasonable
person to believe a KEM always has this issue. However, it is simply not
true. A KEM does not imply an `m`  must be composed of contiguous sample
of the system RNG without transformation, otherwise. It is misleading
and it is dangerous as I have shown with Dual_EC_DRBG as an example. In
TLS this can lead to decryption of the connection, and future sessions.
This is acceptable to NIST, and it should not be to the IETF.

This difference is one reason I remain comfortable with sntrup761x25519
as a conservative OpenSSH option. The ML-KEM SSH exchange, like TLS,
gives an unauthenticated client an opportunity to supply the
encapsulation key and recover the server-generated `m` pre-auth; the
actual risk still depends on the implementation's RBG, state separation,
and generation order. This is a kind of landmine where it increases
analysis work and where implementations may get it wrong. It is not the
conservative choice that I would expect from the professionally prudent
securtiy minds that brought us OpenBSD and OpenSSH.

It however entirely makes sense if OpenSSH needs to provide ML-KEM. I
hope that they will ensure that `m` is hashed in practice but if not, it
only further underscores why the NIST's decision process and their
conclusion is unreasonable. OpenSSH is not only used in a FIPS-certified
setting, and I highly doubt that NIST will promote the various DRBGs
used by GNU/Linux, FreeBSD, NetBSD, and OpenBSD as qualified designs. I
would welcome it as long as they did not impose unreasonable changes as
they did with Kyber for `m` since those designs are what the world uses.

> For this reason I think we should have no RECOMMENDED=Y non-hybrid 
> KEMs.  But I don't see why not have RECOMMENDED=N KEMs.
> Interesting. I support hybrids as the conservative default, but the
> hybrid label alone is not sufficient for this issue.

If the ML-KEM interaction permits recovery of an RBG state before the
same state lineage generates the X25519 scalar, both components may be
predictable. If the X25519 scalar was generated first and the RBG
resists backtracking, that component may remain independent. Reseeding,
per-connection state, buffering, and call order all matter.

A compact version of my current classification is therefore:

scheme       recoverable value            raw RBG block?
ML-KEM       32-byte `m`                   yes
Kyber r3     `H(m)`                        no
sntrup761    fixed-weight ternary `r`      no

That table is deliberately narrow. I would not label every randomized
signature, OAEP seed, DH exponent, or structured KEM secret as a "raw
leak" merely because it depends on randomness; the transformation and
recoverability must be analyzed. I have done most of that analysis on
other IETF primitives but that is for a different email.

> * TLS 1.3 has insanely large nonces ('random'), and that's enough 
> for RNG-based kleptography.

Agreed. TLS `Random` fields already create a broader public-output
problem, and I regret not addressing it while TLS 1.3 was being written.
I am preparing separate work on public and peer-recoverable RBG outputs
across TLS, QUIC, MLS, SSH, IKE, and other protocols. That broader work
should not prevent fixing an additional clean oracle now.

> therefore ML-KEM adds nothing much new *except* that when using a 
> FIPS-140-3 validated module then ML-KEM can sneak a Dual_EC-style 
> DRBG in through the back door even when the TLS 1.3 implementation 
> would not otherwise use such a DRBG.

The word "except" is doing substantial work in your sentence. ML-KEM can
expose an additional sample of the randomness used for secret generation
even when an implementation separates or conditions other TLS-visible
fields.

A successful sabotage mechanism should be reliable, economical, and
plausibly deniable. The protocol should not make that job easier when a
wire-compatible hash removes the direct structured sample.

> * We can insist that the choice of DRBG to use MUST be one of a set 
> we approve of, and, impliedly, none of the ones we don't approve of.
> Agreed in principle. We should state the actual requirement rather
> than invent combined algorithm names. FIPS 203 requires fresh
> randomness from an approved RBG, with the required security 
> strength, under the SP 800-90 framework [2]. Hash_DRBG, HMAC_DRBG, 
> and CTR_DRBG are the SP 800-90A mechanisms, but the requirement
> also includes the entropy source and construction requirements in
> SP 800-90B and SP 800-90C.

I would then state the separate `m` issue. The approved-RBG requirement
is the primary layer; hashing `m` is a local layer that prevents this
consumer from returning algebraically structured output to a peer when
the primary assumption fails.

NIST and some of the IETF, such as myself, appear to have different risk
tolerances on that point. NIST has publicly acknowledged the limited
claim: hashing protected the KEM, while a broken RBG could still
compromise the wider system. That is not an argument that the KEM-level
protection has zero value but NIST agreeing that it has value, and that
it is not valuable to _them_. Okay! I am glad that they did not present
an attack as their original motivation to remove the hash. It is not a
security issue to have the hash. It is good that we do not disagree on
that point. The performance was also not a relevant concern. Their
expressed concern is how they logically separate things in a FIPS-
certified setting, and outside of that setting, they qualatiatively
weakened the design and accept the consequences. This tells us their
security posture, and it is less than the IETF should accept. These
kinds of "logical" separations are how we had IPsec failures with
Dual_EC_DRBG on the internet that allowed for full passive decryption
through nonce leakage. This was reportedly exploited by the NSA and it
is not in dispute. Juniper engineers probably deeply regret being
tricked by that kind of mistaken protocol and implementation design.

The public record concerning NIST/NSA coordination is, and remains,
incomplete. Materials produced through litigation appear relevant to
statements made during this discussion. My understanding is that the
litagion is ongoing and that production of documented related to NIST/
NSA collaboration remains unfinished. I do not need to resolve that
institutional history in this email. I do think NIST should answer
concrete questions and publish enough of the record for independent
evaluation. We could also wait for the lawsuit to finish but that is 
likely to take a long time, so NIST could really help speed things up by 
either stating their intention to 1) immediately and proactively produce 
the documents in question and/or 2) directly engage here with the 
understanding that if the documents later contridict them, they will be 
on the hook. Both of those seem incredibly unlikely and that is why an 
independent court has been involved to _force_ NIST to produce the facts.

Does it not concern you that the facts _already_ produced in that 
lawsuit do not match the claims made by NIST on this very list?

If not, what would be the line for you? I ask so that when the lawsuit 
is finished, we may do a proper retrospective analysis.

> The AES counter DRBG is plenty good enough. Which implementation?

CTR_DRBG can be a sound construction, but naming it does not guarantee a
side-channel-resistant implementation. Cohney et al. demonstrated cache-
based recovery against vulnerable table-based AES CTR_DRBG code in SGX,
including state recovery, loss of forward security, and an end-to-end 
TLS compromise [5]. This was an implementation attack, not a universal 
break of CTR_DRBG. These kinds of failures are possible because NIST's 
standards are below the security and the quality of the IETF's 
standards. There are examples worth considering such as the constraints 
described in NIST SP 800-90a.

The distinction matters. FIPS 197 specifies AES, but does not by itself
require a constant-time implementation or test for secret-indexed table
lookups. SP 800-90A specifies the DRBG construction, but cannot make a
leaky AES implementation safe. Hardware instructions can reduce this
particular risk, while introducing their own hardware and microcode
assumptions. Would you believe that one of the findings in [5] as 
presented in 2020 ( https://rwc.iacr.org/2020/slides/Cohney.pdf ) 
included an OpenSSL FIPS module, the NetBSD kernel systemwide PRG (!), 
mbedTLS _inside_ SGX, and also the nist_rng library. That includes a 
FIPS-certified setting. Perhaps the FIPS-certified setting is not as 
strong as the NIST advertising would have us believe?

NIST has not updated the corresponding standards in response to the 
publication [5] as far as I am aware. I am happy to be corrected on this 
point but if even NIST is able to get it right, maybe we should consider 
this as a factor in their security posture?

I want to note as a matter of honesty that here, hashing `m` does not 
save a system after the attacker has extracted the CTR_DRBG key; the 
attacker can reproduce the hash. It does, however, address a different 
failure class: algebraic structure in output that is otherwise handed 
directly to the peer. Therefore the correct guidance is not "CTR_DRBG is 
broken" or "the hash fixes everything." It is:

* exclude Dual_EC_DRBG and analogous structured generators;
* require a securely implemented, prediction-resistant RBG;
* require side-channel-resistant primitives and sound reseeding/state
   management;
* retain the local hash to avoid exporting raw structure;
* even NIST's standards and certified FIPS modules get this wrong;
* NIST updated their threat model in 2019;
* NIST did not update the actual standards to require safe defaults!

The longer document should review Hash_DRBG, HMAC_DRBG, and CTR_DRBG,
including side channels, fault attacks, entropy failure, reseeding, and
state compromise, rather than treating an approved algorithm name as an
implementation proof. The authors of [5] note that CTR_DRBG is not 
provably secure, they note that Woodage and Shumow found problems with 
HMAC_DRBG, and they encourage the use of Hash_DRBG.

Note that the authors in addition to the "Dual_EC Backdoor" they raise 
the "Juniper Dual_EC Incident" they also raise the DUHK Attack on ANSI 
X9.31.

So - lets recap that into some conclusions:
- No: Dual_EC_DRBG (withdrawn (!))
- No: CTR_DRBG (FIPS certifiable (!!) does not mean not exploitable)
- No: HMAC_DRBG (see Woodage and Shumow's related work, and others)

Meanwhile, NIST says they are working on an updated SP 800-90A where 
they announced a comment period ( 
https://csrc.nist.gov/pubs/sp/800/90/a/r2/iprd ) which closed in late 2025:

   Date Published: September 4, 2025
   Comments Due: November 4, 2025 (public comment period is CLOSED)

Aside from the absurdly short comment period, NIST says that public 
comments will be posted after the closing date. Nearly a year later, 
that statement remains true as someday they may be posted. As of today, 
the public comments have not been posted as far as I am aware.

Do you want to make a prediction about Hash_DRBG?

> This, however, may run into a problem where FIPS-140-3 validated 
> cryptographic modules might not be configurable as to DRBG choice. 
> However, it is enough to state this requirement.  We do not have a 
> Protocol Police function.

Agreed. Accurately summarizing the NIST requirement and adding the
right cross-references is sufficient for that part of the issue.

> * As long as there is one acceptable DRBG that can be selected, we 
> can state a normative requirement and give useful advice regarding 
> the dangers of RNG-based kleptography.

Agreed. I would list the approved constructions as examples, state
the required properties, and explain the kleptographic failure mode.

> * I do suspect that all KEMs enable Dual_EC-style kleptography. And 
> yet ML-KEM should be published.  Not because that's a good thing, 
> but because -once more- the horse left the barn when the nonces 
> (`Random`) were made more than large enough and when the codepoint 
> registries were made Specification Required. I do not think the 
> general conclusion about all KEMs follows, but I also do not think 
> this is a reason to withhold ML-KEM indefinitely. My request 
> concerns an avoidable, wire-compatible footgun and accurate
> Security Considerations, not ML-KEM's lattice hardness assumptions.

> But also I'd have to see how recovering *one* `m` value would allow 
> a kleptographer to steal *many* other clients' `m` values.

For Dual_EC_DRBG, the result depends on truncation and state
management. With an untruncated 32-byte output, one `m` may be enough 
for the trapdoor holder to recover the next state. With the standardized
P-256 truncation, the attacker normally enumerates the missing bits and
uses another output or other state information to identify the correct
candidate [8]. Once a long-lived shared state is recovered, later
outputs may be predicted until reseeding or separation defeats
synchronization.

Or put simply: you draw 32 bytes from the sabotaged RNG, you transmit 
it, you then draw 32 more bytes.

An adversary with the Dual_EC_DRBG trapdoor/secretkey(s) that receives 
your first 32 bytes is able to predict the 32 bytes of the second draw, 
even if you do not send them.

Would you like me to send you an implementation of this where you 
control the trapdoor/secretkey(s)?

> * The large size of `Random` is still problematic.

Agreed. I call these public or peer-recoverable wire oracles. TLS 1.1,
1.2, and 1.3 all expose large `Random` fields, and other protocols can 
inherit related risks through TLS or their own public randomness.

My broader survey remains preliminary because implementation choices,
state sharing, sequencing, and authentication phase change the answer.
If this attack class is deployed, however, the strategic value for mass
collection and real-time decryption could be substantial.

> [Heavy trimming follows.]

Thank you for tolerating my verbosity. I will try to return the favor.

>>> * If the NSA wants to get burned again by playing the Dual_EC 
>>> game again, let them!
>> 
>> This is frankly, reckless. We should not be used unwittingly or be
>> party to such folly.
> 
> My personal advice: sometimes that is the smart play -- if you never
> engage in tactical retreats thus badly losing some battles, you'll
> exhaust yourself and lose the war.

I take the advice. My claim here is bounded: we should learn from
Dual_EC_DRBG and treat it as the canonical public example of strategic
cryptographic sabotage. The tactical compromise I can support is to
publish after adding accurate RBG requirements and the `m` guidance,
while moving the larger analysis to separate work.

I am exhausted, but that is another reason to turn the dispute into
specific text rather than continue repeating it.

>>> * The NSA is not likely the monolith a social death penalty for 
>>> it would have to presume.
>> 
>> I do not understand this point but I agree that the NSA is not a 
>> monolith. Part of asking the questions that I asked is that there 
>> are NSA people I have directly spoken to who answered almost all 
>> of those questions without a problem. I am not only talking about 
>> whistleblowers but people whose job never involved cryptographic 
>> sabotage.
> 
> But you and/or others in these threads are treating all involved 
> with NSA in regards to ML-KEM as monolithically motivated by the 
> same interest in kleptography.  That amounts to treating the NSA as 
> a monolith.  "It's supported by NSA pEoPlE!!" is basically the 
> backup singers' line.

Thank you for clarifying. I do not infer a common motive from NSA
affiliation, nor do I want an institutional blacklist. I would apply the
same skepticism to Edward Snowden, Bill Binney, Thomas Drake, an NSA
engineer, a NIST employee, a defense contractor, or an independent
academic: examine what they propose, what assumptions they bring, how
they answer questions, and what outcomes their position produces. Most 
of all, I would want to examine their security posture.

Institutional background can still be relevant without making the
institution a monolith. People with access to classified systems may
know constraints or attacks that they cannot describe publicly. That can
create blind spots even without malicious intent. Suite A is the obvious
example: public reviewers cannot reason from secret knowledge they do 
not possess, and a person who possesses it may be unable to explain why 
or even _that_ a public design is unsafe.

Furthermore, they may feel that even if they _could_ do so, they do not 
agree with thwarting large-scale adversaries if it would thwart their 
favorite, civil-liberties respecting, honest, law-abiding, large-scale 
adversary... who they consider more as a friend in any case.

The solution is not personal exclusion. It is transparent threat models,
conflict disclosure where applicable, independent review, explicit
assumptions, and technical mitigations that do not depend on trusting a
person's institutional role. It is also important to look at the 
results. NIST's modified Kyber grants a cryptographic oracle in over a 
dozen protocols where the protocols are layered.

Example: your Signal client uses ML-KEM in TLS, and again in the Signal 
e2ee ratchet. Neither are required to be FIPS-certified, to put it mildly.

My own principle is simple: I will not support cryptographic sabotage or
an accommodation designed to preserve it or that allows for it as an 
acceptable consequence of an imposed change against the express wishes 
of the cryptographic primitive's designer(s). I will support technically
sound protections even when they protect people or institutions hostile
to me. RFC 7258 says pervasive monitoring is an attack; the relevant 
IETF value is to reduce harm to the end user [12].

>>> * There is no technical content regarding ML-KEM to back this 
>>> up.
>> 
>> I could easily believe that you were aware of these issues before 
>> the discussions on this list. Were you?
> 
> Some of them.

Agreed. As exhausting as it has been, the discussion has produced a
clearer technical record and some real convergence.
>> For example, were you aware that you could do this kind of thing, 
>> including recovering `m`?
> 
> I believe my earlier response (and the above) should make it clear 
> that I am.  Above is a fuller treatment of this issue.


Yes, now it is clearer. I was asking about before the discussion
because the point is subtle and was absent from the drafts' Security
Considerations and from several early responses. That suggests a gap in
our protocol-analysis process worth fixing.
>> Do you think that the removal of a hash function to enable it is 
>> not "technical content" when that single design choice was made 
>> exactly to counter this kind of thing?
> 
> Not sufficient to stop publication.  Instead it is sufficient to 
> argue that the choice of DRBG must be limited.


Then we agree that it is technical content. I am not asking for 
nonpublication as an end in itself. If the DRBG restriction includes the 
reason for it, the recoverability of `m`, and the Appendix C.1 tradeoff, 
we are close to agreement.
>> Are you really buying the argument from NIST where they made it 
>> worse and accept that as a fact, over what, ~300-1500 cycles?
> 
> With a non-kleptographic DRBG it seems fine. 

Does that still hold with the cited research showing that the current 
(not even including Dual_EC_DRBG!) NIST DRBG have non-trivial security 
failures?

Does it concern you at all that a practical full state recovery over the 
network against TLS was shown for CTR_DRBG in a FIPS-certified setting 
and NIST has so far only updated their _threat model_? If the authors 
did not catch that two month call for comments _five years later_, will 
NIST even address these issues?

Regardless, as of now, it does not seem fine to me. Updating the threat 
model is absolutely hilarious, I am sure that is very reassuring to 
impacted parties.

> I agree that the risk 
> of inserting a kleptographic DRBG is real, but not publishing is not
> really a good answer.


We agree that the kleptographic-RBG risk is real, and I agree that
nonpublication is not the only answer.

I still would not call the unhashed design equally safe. It is
qualitatively weaker than the same construction with one additional
hash because it relies entirely on the RBG and its implementation. The
hash was present specifically to tolerate one class of upstream failure.

CTR_DRBG illustrates the distinction between an algorithm and a deployed
system. The Cohney et al. work used cache leakage in a vulnerable AES
implementation to recover DRBG state and compromise TLS [5]. That does
not show that CTR_DRBG is kleptographic, but it does show that "use an
approved DRBG" is incomplete implementation guidance. Similar questions
exist for Hash_DRBG and HMAC_DRBG. What the relevant research literature
says about side channels, fault injection, entropy failure, reseeding, 
(RNG) state compromise, and malicious implementation all deserve
systematic analysis.

We should define the attack classes carefully. Young and Yung's SETUP
model is a natural starting point for deliberate kleptography, while
side-channel and fault attacks may belong in adjacent categories. The
engineering response can still be systematic:

* write down each attack strategy and the required capabilities;
* distinguish design, implementation, supply-chain, and compulsion
   failures;
* test whether each construction and implementation resists it;
* record mitigations and residual risk; and
* set a minimum profile for protocol use.

Hardware acceleration is not a magic boundary. AES instructions, RDRAND,
and SHA extensions reduce some software-side channels but add
assumptions about hardware, microcode, firmware signing, and update 
channels. Those assumptions can fail through ordinary bugs or 
sophisticated compromise.

The point is not that every extreme scenario is occurring; it is that
protocol guidance should not confuse a standardized algorithm with an
immutable, side-channel-free implementation. Also, IETF should not push 
a standard that requires FIPS-certified setting as a general matter when 
the general case was made weaker and imposed a new dependency to acheive 
security: the FIPS-certified setting!

I have preliminary experiments in which an ML-KEM interaction supplies a
useful observation point against a deliberately vulnerable table-based
CTR_DRBG implementation. I do not present that as a general break or a
finished result. The research from 2019/2020 still generally applies.

The immediate conclusion remains modest: require a defensible RBG,
require secure implementation and state management, and hash `m` so this
particular peer interface does not export raw structure. The longer-term
work can determine what additional requirements are needed for each
SP 800-90 construction.

Also just to restate the obvious: we are really discussing some text in 
a text file that is _advice_ to implemnters who are not building in a 
NIST-certified setting. Those implementers better understand the 
situation and are required to diligently follow NIST's standards. Yes, 
that still leads to certified implementations being broken in some cases 
and that is _also_ NIST's problem, not the core concern that we face.

>>> There is only the 1DES key weakening and the Dual_EC adventure,
>> 
>> This is not a fair or accurate accounting of the history. Even if 
>> you skip the Clipper Chip, export cryptography and all related 
>> attacks in SSL/TLS, and many other related matters, the issue of 
>> Dual_EC_DRBG amazingly *still* ships today in one of the most 
>> popular Java libraries in the world. It also ships ML-KEM. We 
>> agree about 1DES, of course.
> 
> Clipper was an overt attack on the public. There are at least two 
> distinct issues.

Clipper was an overt policy attack, but policy opposition was not the
whole story.

 From memory, Prof. Dr. Matt Blaze had to find a novel technical failure 
in the Escrowed Encryption Standard: the 16-bit LEAF authentication 
check could be searched so that a device retained strong Skipjack 
encryption while bypassing the escrow mechanism [9]. This was not a 
cryptanalytic break of Skipjack itself; it was a break of the key-escrow 
protocol surrounding it. That distinction strengthens, rather than 
weakens, the lesson that expert technical review can defeat a 
government-mandated access design. Skipjack itself followed the 1DES 
pattern with the 80-bit key and 64 bit block choices by the way.

> The 512-bit modular DH group precomputation thing was not a covert 
> attack on the standards process.

It is not only about 512-bit DH, of course.

I understand the perspective that export controls and weak 512-bit 
groups were not, by themselves, covert manipulation of the standards 
process.

Noteworthy however is that "covert" depends on a lot of assumptions 
about people's understanding of what certain technical framing means in 
a given context. The GSM cryptographic weaknesses may well have been 
understood by some telecom technician but most non-technical users of 
the phones most certainly did not always understand.

They were nevertheless policy-created weaknesses whose practical 
consequences were not understood by most users of products marketed as 
secure. We should classify the history precisely without minimizing the 
harm.

> Perhaps only Dual_EC was a covert attack on the standards process.

I do not think Dual_EC_DRBG exhausts the documented history of
SIGINT enabling or weakened communications standards.

GSM is one example. TETRA is another important case: the secret TEA1 
algorithm,  used in critical-communications systems, reduced an 
advertised 80- bit key to 32 effective bits and was only publicly 
understood after reverse engineering [10]. The researchers did not 
establish who inserted the weakening or whether it was exploited, but 
the result is directly relevant to how we evaluate secret or nationally
constrained cryptographic designs. TETRA is highly relevant to European 
security.
> ML-KEM might be a covert attack, but not on the standards process 
> because the codepoints were always going to be assigned, and of 
> course we're discussing the possibility that ML-KEM is kleptography 
> so much that everyone who needs to know that it could be, does.

The public, undeniable fact is that FIPS 203 removed the hash that
Kyber said protected against flawed randomness [2][3]. I am not claiming
that ML-KEM is itself a covert attack. I am saying that the change opens
a direct hidden-structure failure mode and that an approved algorithm
name does not eliminate implementation or side-channel risk and that is 
when we are speaking about the FIPS-certified setting. Outside of that 
NIST's change makes our lives harder which is not something that we are 
required to accept and to pass on to others. The NetBSD kernel wide DRBG 
CTR_DRBG example from [5] was impressive.

> Clipper being an overt attack, and ML-KEM maybe a covert attack, you
> can see that Clipper would be easier to defeat -- the whole public
> could see it.

Agreed: the removal is not covert. Appendix C.1 records it. The
technical effect is also public: relative to third-round Kyber, ML-KEM
no longer has that local safeguard against flawed randomness. Experts
therefore have a responsibility to explain the tradeoff and the
assumption that replaced it.

>>> And again, if your fears turn out to be true, then you win a big
>>> prize: more egg on the NSA's face.
>> 
>> This does not follow. It took over a decade for John Kelsey to 
>> come out with his public apology tour. It only happened because 
>> one person blew the whistle and essentially killed himself for us 
>> to know about it.
> 
> But the egg landed on their face much earlier.  Apologies and non- 
> apologies are merely the acknowledgement

Agreed that the reputational damage began earlier but it was also
paid in disrespect to people who raised the findings as a concern.
That pattern repeats here as a variation on the theme but this time,
the attack may be a fact to some but now instead of being in doubt,
it is dismissed as old news or as irrelevent or unexploitable, and so on.

The important point is not whether an institution eventually apologizes; 
it is how long users remain exposed before the technical problem is 
acknowledged and fixed. Shumow and Ferguson's 2007 rump-session 
observation, and Blaze's Clipper work, are reminders that early warnings 
deserve serious technical treatment.
>>> Thus I don't think there is anything we can do regarding `m` 
>>> other than give advice for non-FIPS implementations -- perhaps 
>>> we should do that much,
>> 
>> That sounds like the discussions have moved you!
> 
> Then you might like the above.  Except you might not because it 
> doesn't move the needle as much as you seem to want.

I will take the movement and thank you for several intense but useful
days of discussion.

>>> but that seems like something TLS and IETF should say much more 
>>> generally in a BCP rather than in each Internet protocol RFC 
>>> that somehow needs RNGs.
>> 
>> Or maybe, not? I guess I also agree with you that we need a draft 
>> about the overall issue. Would you be interested in co-authoring 
>> such a draft?
> 
> I cannot easily co-author I-Ds [for reasons], not with celerity.  I 
> can comment and suggest text.

Thank you. Comments and suggested text would be genuinely useful; I
could take responsibility for an updated draft but I think the draft 
authors should resolve the outstanding technical issues that they see as 
valid. That tells us about the security posture that they wish to 
advance in the IETF. That applies _equally_ to the hybrid and the pure 
ML-KEM drafts.

>>> * You and others are destroying your credibility and good will 
>>> towards yourselves and towards the IETF by really reaching in 
>>> your arguments against ML-KEM.
>> 
>> That is a fair point. [...]
> 
> That sounds like the discussions have moved you as well :)

Yes. The discussion has moved me toward a narrower, more actionable
position where now I see that NIST's current DRBG offerings are 
_exceeding dangerous_ in the TLS context. Simply presenting them
without qualification seriously misrepresents the risks as a general
solution. I remain concerned that credibility and tone sometimes
displace technical disposition, but I should also make my own arguments 
easier to assess and harder to dismiss.

>> I observed an intense desire for conformity and harmonization in 
>> the form of a popularity contest. There are a few people in the 
>> discussion who broke through that wall. Quite a few people 
>> demonstrated that when it came down to a factual point that they 
>> have a duty to the truth. I personally respect that a lot more 
>> than the parasocial shaming behavior and the foot dragging.
> 
> Last October I was on DJB's side.  His pounding the table got me to 
> abandon that side -- there were no real arguments other than 
> "they've done it before" and "of course they'd do it again".  Now 
> there's the `m` matter, and regarding that see the above.

The cases for and against pure PQC and hybrids are broader than those
two slogans. I also understand why perceptions of repetitive or abrasive 
presentation can cause readers to disengage. This is in part a big
structural failing of the NIST process and it is a problem in the IETF
as well.

At the same time, process cannot substitute reaction to style for a
technical disposition. NIST's participation raised factual questions
about the history and rationale of the change, and the answers did not
resolve all of them. My earlier comments also waited years for a partial
response. That history helps explain the frustration, although it does
not excuse unnecessary heat from any participant.

I will focus this reply on the concrete convergence: define the RBG
requirements, explain `m`, record the Kyber/FIPS change, and state the
mitigation.

> I really want to emphasize that DJB's manner of argument is a 
> tremendous turn-off.


I hear you. It should not determine whether a reproducible technical
claim is true. The working group needs both professional communication 
and a process that tracks substantive objections to a clear disposition.
>> We should still try to do good things for the betterment of all 
>> people, even if they're unappreciative.
> 
> Some people, when faced with a difficult war, choose a hill to die 
> on, then die on it.  Others fight until it's time to retreat to live
> to fight another day.  Martyrs don't win wars.
I understand. The useful response is not martyrdom but converting the
issue into durable text and reproducible work. While it remains in our
power, we should endeavor to create that centered around the End User's 
security. The End User that is not in the FIPS-certified setting 
especially as NIST has the FIPS-certified setting covered. It does not 
exactly inspire confidence that in the FIPS-certified setting the 
certified CTR_DRBG could be exploited to remotely extract the CTR_DRBG 
AES keys over a network through TLS. They have it covered alright! That 
security posture is their choice.

>> This mistake by NIST should be undone in so much as we should not 
>> go along with something when the research data shows that it is 
>> dangerous.
> 
> Look at it from NIST's point of view: that hash merely extends the 
> DRBG, and via FIPS they mandate DRBGs, so if the hash is important 
> then it should be included in the DRBG or the DRBG should be 
> designed so it's not needed because the DRBG is not necessary.

I understand that position. But a protocol-level hash is not merely
"more DRBG." It enforces a property at a separate boundary: the peer
receives `H(x)` rather than the DRBG output `x`. That matters precisely
when the upstream RBG assumption fails, and not every TLS deployment is
inside the FIPS validation model.

> Thus my [new] position is that we should limit the set of acceptable
> DRBGs. 

We may agree on limiting acceptable RBGs if phrased as NIST's 
requirements that must be imposed to acheive their notion of security.
Because approved construction names do not by themselves guarantee a
safe implementation, I would add implementation guidance here and
develop the broader requirements in a separate document. I was shocked
when I realized that the literature piles up but the FIPS standards do 
not keep pace, rather the _threat model_ is updated! TLS should become 
stronger and stronger as we learn new things, and the threat model 
should become _stronger_ as adversary capabilities improve. The purpose 
of TLS is to provide _security_ not a false sense of security, after all.
>> Yes, I understand the criticism that this appears to be contrived 
>> because you do not use /dev/hwrng or similar interfaces but I 
>> wonder what would change your mind?
> 
> The `m` issue did change my mind, as you noted.  Just not to the 
> point of opposing publication.  Rather, I propose normatively 
> limiting the choice of DRBGs to ones we believe are not 
> kleptographic.

I do not oppose publication once the immediate issues are written down
or referenced accurately.

>> For example, the Cavium SIGINT enabling - Cavium has a kernel 
>> driver for their hwrng and it presents as /dev/hwrng which does 
>> not transform the output. This kind of CPU is used in "security" 
>> devices.
>> 
>> Please consider that NSA claims it as a SIGINT Enabling Success.
> 
> If you have a TLA-in-the-box attack, you have bigger problems.  And 
> by you I mean we, naturally.

My question is whether "if" is the right prior and what evidence would
change it.

The Cavium reporting shows a knowledge-and-choice problem: users may 
rely on hardware and firmware they cannot meaningfully audit, and 
hardware RNG interfaces can feed operating-system entropy pools or be 
consumed directly. A compromised source is a system-wide problem, but 
that is not a reason to remove cheap local barriers at protocol 
boundaries. The reason for the removal is not required for security and
it re-introduces an entire class of security failures. Some large-scale 
deployments could easily remove that hash and no one will know, so in my 
view those kinds of deployments should not impose their extreme 
privilege on the rest of us. Most people, unlike the large defense 
contractors who mentioned hashing was going to impact their bottom line 
or the environment, do not have thousands of engineers working from the 
top to the bottom on their systems. Most people do not have absolute 
confidence in their full computing systems, they must make assumptions 
about trust which will change in a big way with this PQC transition.

>> Would you believe that someone does the wrong thing with that kind
>> of stack and does so in a way that harms security?
> 
> Certainly possible, even likely.

I am glad we agree.

>>> * We know they will go to IEEE if we don't publish.  IETF is 
>>> much more open, so if we abdicate our remit to more closed SDOs,
>>> what will you have achieved with this social death penalty?
>> 
>> I do not understand this part - the draft can go to the ISE if 
>> consensus can't be reached. Deb should not be pushed out of the 
>> IETF, and no one should be ostracizing her. This holds for anyone 
>> in these discussions, even convicted felons.
> 
> See above (at the very top).

Understood.

>> That said - if the authors of the draft want to take it elsewhere 
>> and publish it, especially because the WG won't rubberstamp 
>> something and want to add some basic security considerations, I 
>> would say that is their right. I note that they are welcome to 
>> integrate the text and then I think most objections would be 
>> handled. Most of us can't edit the draft by merging a pull 
>> request. I have the sneaking suspicion that that if I open the 
>> pull request that it would not be merged. If I am wrong, I would 
>> do the work.
> 
> Would you settle for publishing with a normative requirement that 
> the DRBG used to generate `m` be one we approve of?

Almost. I would settle on publication with a normative RBG requirement
plus text that explains why `m` matters and recommends restoring the
hash. The RBG restriction and the hash address different layers. The
same is true of CTR_DRBG: choosing the construction does not excuse a
leaky table-based AES implementation. That leaky table-based AES 
situation is catastrophic and that is for a current NIST DRBG. At the 
very least we should also normatively cite the (ever weaker?) NIST 
threat model!

>>> Really, pick your fights carefully!
>> 
>> I take your point(s) and I respectfully submit that I observe what
>> appear to be some oversight in a few of your priors. I appreciate
>> many of your points though.
> 
> Have I covered all points now?

Probably, yes. Remaining is some discussion above as well as the task to 
produce the exact text.

>> We all have a duty to resist and none of us have a duty to obey. 
>> We
> 
> I agree with this.

Good to know, I am glad.

>> have no requirement to simply go along with such things, 
>> especially if we think will lead to harm to the End User. With 
>> deep respect to the actual Indigenous people of the world: we the 
>> Indigenous Cryptographers of the Internet SHOULD help the End User
>> to resist targeted and mass surveillance and indeed, we MUST treat
>> pervasive monitoring as an attack [0].
>> 
>> To paraphrase Bill Hicks: there is a war on your privacy and each 
>> time that you protect your privacy with strong encryption, you're 
>> winning it.
> 
> On so many fronts.  The whole age verification stuff is clearly 
> aimed at ending anonymous and pseudonymous posting so as to force 
> self-censorship on people.

Agreed. The claimed benefit of broad age-verification mandates does
not justify the resulting surveillance, identity linkage, and chilling
of anonymous or pseudonymous expression.

>> [0] A term the NSA has given *us* and we should claim it, and wear
>> it with pride to stand in solidarity with other Indigenous peoples
>> of the world.  Note: "the fact that NSA/CSS makes cryptographic
>> modifications to commercial or indigenous cryptographic
>> information security devices or systems in order to make them
>> exploitable" is "Top Secret" - https://www.spiegel.de/ 
>> international/germany/inside-the-nsa-s-war-on-internet-security- 
>> a-1010361.html
> 
> But also public.  And something we basically knew to expect.

Yes. The history is public enough that surprise is no longer a
reasonable response. The standards question is which concrete
engineering lessons we apply now.

Kind regards,
Jacob Appelbaum

[0] https://datatracker.ietf.org/doc/html/rfc8730

[1] https://datatracker.ietf.org/doc/html/rfc5742

[2] https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.203.pdf

[3] https://pq-crystals.org/kyber/data/kyber-specification-
round3-20210804.pdf

[4] https://ntruprime.cr.yp.to/nist/ntruprime-20201007.pdf

[5] https://eprint.iacr.org/2019/996

[6] https://datatracker.ietf.org/doc/html/rfc4086

[7] https://datatracker.ietf.org/doc/html/rfc8937

[8] https://hovav.net/ucsd/dist/juniper.pdf

[9] https://www.mattblaze.org/papers/eesproto.pdf

[10] https://www.midnightblue.nl/research/tetraburst

[11] https://cr.yp.to/antiforgery/cachetiming-20050414.pdf

[12] https://datatracker.ietf.org/doc/html/rfc7258

_______________________________________________
TLS mailing list -- [email protected]
To unsubscribe send an email to [email protected]