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

Tanja Lange <tanja@hyperelliptic.org> Thu, 09 July 2026 06:17 UTC

Return-Path: <tanja@hyperelliptic.org>
X-Original-To: tls@mail2.ietf.org
Delivered-To: tls@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id 6AD66113AD7A8 for <tls@mail2.ietf.org>; Wed, 8 Jul 2026 23:17:39 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1783577859; bh=r2mi52wshE5p94/Wvx3+8upU+s0GIieTDCzkFqH2fyw=; h=Date:From:To:Cc:Subject:Reply-To:References:In-Reply-To; b=AsuOVInWVwDGkJDjwp/+fpzLfOMYr5Ds3qAqyA7HAh5HcQvl2lOTUEIPTpNCVIlhF Ni0IQxFAiKAaELSmMgnglO7fzsCml88E03ovcolkhNr8r/Yvb2yGnj2Alfj1q/wPIp AEBH31/oGOkSxg+2BAh6a4OH8ZnEgYQMM/CdSNYc=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -1.898
X-Spam-Level:
X-Spam-Status: No, score=-1.898 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail2.ietf.org ([166.84.6.31]) by localhost (mail2.ietf.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id NLmtRuCrvrvI for <tls@mail2.ietf.org>; Wed, 8 Jul 2026 23:17:38 -0700 (PDT)
Received: from calvin.mcs-cc.tuehosted.nl (calvin.mcs-cc.tuehosted.nl [192.87.90.60]) by mail2.ietf.org (Postfix) with SMTP id 5CAB4113AD792 for <tls@ietf.org>; Wed, 8 Jul 2026 23:17:38 -0700 (PDT)
Received: (qmail 39939 invoked from network); 9 Jul 2026 06:17:37 -0000
Received: from hyperelliptic.org (192.87.90.62) by calvin.mcs-cc.tuehosted.nl with SMTP; 9 Jul 2026 06:17:37 -0000
Received: (qmail 1302970 invoked by uid 1004); 9 Jul 2026 06:17:37 -0000
Date: Thu, 09 Jul 2026 08:17:36 +0200
From: Tanja Lange <tanja@hyperelliptic.org>
To: Benjamin Kaduk <bkaduk=40akamai.com@dmarc.ietf.org>
Message-ID: <ak89AMLg_ZVnvJ8Y@ein.win.tue.nl>
References: <178231320760.1520243.5914961961176039994@dt-datatracker-f9b87776f-8pmmg> <76f613e9-e952-40fb-a6e0-745392575b91@appelbaum.net> <9445dee2-e5e0-4770-ac51-efc901f2489f@huitema.net> <ak3ochQmnlYhKt6h@chardros.imrryr.org> <ak55dB3pb2etyFoj@ubby> <CAOjisRw2HMHbv30QGe9JkPYXbgpCj1GiwSeAQ6tO4MfewxJ-_w@mail.gmail.com> <CAOjisRyi9h3im5YuL_sXYcUZWDkRt5d24uEB5FD01HwsD45rYw@mail.gmail.com> <ak6tr7pD2B281iXG@ein.win.tue.nl> <ak6yTqUFo2WJ7Q-m@akamai.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <ak6yTqUFo2WJ7Q-m@akamai.com>
Message-ID-Hash: 3XC37HN4AASZBALJJ5K5F7BMWYLVAOW2
X-Message-ID-Hash: 3XC37HN4AASZBALJJ5K5F7BMWYLVAOW2
X-MailFrom: tanja@hyperelliptic.org
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-tls.ietf.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: tls@ietf.org
X-Mailman-Version: 3.3.9rc6
Precedence: list
Reply-To: tls@ietf.org
Subject: [TLS] Re: WG Last Call: draft-ietf-tls-mlkem-08 (Ends 2026-07-08)
List-Id: "This is the mailing list for the Transport Layer Security working group of the IETF." <tls.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/tls/DJkip-apHiVdOCol1YV2rtFe940>
List-Archive: <https://mailarchive.ietf.org/arch/browse/tls>
List-Help: <mailto:tls-request@ietf.org?subject=help>
List-Owner: <mailto:tls-owner@ietf.org>
List-Post: <mailto:tls@ietf.org>
List-Subscribe: <mailto:tls-join@ietf.org>
List-Unsubscribe: <mailto:tls-leave@ietf.org>

On Wed, Jul 08, 2026 at 01:25:50PM -0700, Benjamin Kaduk wrote:
> On Wed, Jul 08, 2026 at 10:06:07PM +0200, Tanja Lange wrote:
> > 
> > Dear Nick,
> > In ECDH when you get aG from the server and compute the shared b(aG) you don't
> > learn anything about a.
> > 
> > In ML-KEM the server encapsulates to your ephemeral public key starting from
> > some seed m. Decapsulating recovers the seed (and needs to, due to FO).
> > 
> > In the scenario that the RNG is predictable there is no difference and an
> > outside attacker gets the shared key in either scenario. Hashing the RNG output
> > before using it is at best a band aid.
> > 
> > In the Dual-EC scenario there is a big difference because ML-KEM gives you raw
> > RNG output from the server any time you open a connection to it. 
> 
> I think it may be important to highlight the distinction between the safety
> of the TLS connection and the safety of a given endpoint, especially in light
> of Dual-EC type scenarios.  It seems like the question of whether 'm' is hashed
> is really about the latter and not the former.
> 
> That is to say, the construction of the TLS handshake, with both parties
> contributing randomness that's included into the handshake transcript, gives a
> strong key for the connection as long as at least one participant is honest and
> has a strong RNG.  However, in a scenario where one endpoint has a
> Dual-EC-style compromised RNG, where seeing enough of its output would allow an
> attacker to reconstruct RNG internal state and predict subsequent output,
> exposing a lot of RNG output either in plaintext on the wire or from server to
> client (since the client initiates connections, exposure from client to server
> is a less severe vector) can lead to risk to that endpoint's security, not just
> on this connection but on future connections as well.  In the scenario under
> discussion here, an unhashed 'm' would be exposed to the client, thus potentially
> exposing server RNG state to the client but not to a passive observer.
> 
> However ... is it really plausible that the ML-KEM 'm' would use a compromised
> RNG but not the (plaintext on the wire) ServerHello.Random?  If they use the
> same RNG then it seems the incremental risk to a server with compromised RNG
> from using ML-KEM is zero, because ServerHello.Random already leads to an
> equivalent exposure (of 32 bytes of RNG output).
> 
See, e.g., Botan
	https://github.com/randombit/botan/blob/master/src/lib/tls/tls_policy.h

      /**
       * Hash the RNG output for the client/server hello random. This is a
       * pre-caution
       * to avoid writing "raw" RNG output to the wire.
       *
       * There's not normally a reason to disable this, except when
       * deterministic output
       * is required for testing.
       *
       * Default: true
       */

their ML-KEM version, true to spec, does not hash the RNG
	https://github.com/randombit/botan/blob/master/src/lib/pubkey/kyber/ml_kem/ml_kem_impl.cpp

All the best
	Tanja