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

Jacob Appelbaum <[email protected]>
Newsgroups gmane.ietf.tls
Message-ID <[email protected]>
Hi Nico,

On 7/10/26 20:54, Nico Williams wrote:
> On Fri, Jul 10, 2026 at 11:07:45AM +0000, John Mattsson wrote:
>> Could you provide a detailed technical explanation of how an attacker
>> controlling the RNG could break ML-KEM but not Kyber with the m ��
>> H(m) step?
> 
> Suppose the RNG outputs 32 byte outputs where the first 40 bits are an
> index that can be used by the attacker to recover the remaining 216 bits
> when the attacker also knows part of a seed for the RNG.  In this case
> the attacker must see those 40 bits in order to recover the remaining
> 216 bits, but hashing means they will not see them and will have too-
> large a work factor to recover the original `m`.

With a lot of respect, no. Attacking the seed again confuses the issue. 
The attack works without knowledge of the Dual_EC_DRBG seed.

> 
> However, as noted, the nonces too need to be hashed RNG outputs to
> defeat such an attack.

There are two parts: ML-KEM and TLS. For ML-KEM, we only need a single 
ML-KEM.Encaps() that samples from the system RNG where the RNG is 
Dual_EC_DRBG in hardware or software, and then we can reconstruct the 
RNG's internal state by attacking `m`. If `m` is the usual truncated 
Dual_EC_DRBG output then we only have to do a small amount of work to 
recover (~2^16) the internal state.

> 
> Of course the attacker could just provide the victim with an RNG where
> the attacker just knows the seed and only needs to know the index of RNG
> outputs corresponding to `m`.  In this case the attacker would only have
> to brute-force a small index, and now hashing `m` does nothing to
> protect the victim.
> 

This is speculative and distracts from the actual attack I have 
described in painstaking detail.

> So in a way hashing `m` adds no value because if the attacker knows
> you'll be hashing `m`: since we're talking about an attacker that can
> convince you to use their RNG they can just make you use one where
> hashing `m` achieves nothing.
> 

Bouncy Castle ships Dual_EC_DRBG today and it contains the original NIST 
parameters that are understood to be an NSA backdoor.

I urge you to evaluate the attack against this example which is a 
reality and can be installed with a single package on Debian or Ubuntu. 
It even has a nice feature of allowing you to set your own parameters in 
place of NIST so you can simulate attacking Juniper's ScreenOS backdoor 
Dual_EC_DRBG fiasco in just a few lines of code.

I am happy to share code if this in doubt. Please contact me off list.

> But it might be more difficult to switch out the RNG at this late a
> stage.  On that basis one might recommend some application level
> whitening of RNG outputs: on the off chance that the attacker was in
> fact counting on the use of raw RNG outputs for `m` [and nonces].
> 
>> 3. It may be too late now, but I strongly believe RFC8446bis should
>> recommend the use of multiple independent entropy sources to mitigate
>> both accidental failures and intentional weaknesses. RFC 8937 is one
>> way to achieve this, but it is neither the only approach nor
>> necessarily the best one. Many operating systems already combine
>> multiple entropy sources, including keyboard and mouse interrupts, USB
>> events, network and storage timing, scheduler timing, CPU hardware
>> RNGs, TPM RNGs, EFI RNGs, and CPU jitter.
> 
> Indeed.  Even further, apps should do this too on top of what the OS
> does.
> 
The fast key-erasure RNG design is a nice example of how to do this safely.

Kind regards,
Jacob Appelbaum

_______________________________________________
TLS mailing list -- [email protected]
To unsubscribe send an email to [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.