[CFRG] Re: RG Last Call on draft-irtf-cfrg-hybrid-kems-12 and draft-irtf-cfrg-concrete-hybrid-kems-04

Wang Guilin <Wang.Guilin@huawei.com> Tue, 14 July 2026 10:12 UTC

Return-Path: <Wang.Guilin@huawei.com>
X-Original-To: cfrg@mail2.ietf.org
Delivered-To: cfrg@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id C320411667D64 for <cfrg@mail2.ietf.org>; Tue, 14 Jul 2026 03:12:20 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1784023940; bh=Ept27D13FIZXGfBI+2GixSfg9Ly7X7tuv4Pk1EQ78hY=; h=From:To:CC:Subject:Date:References:In-Reply-To; b=JKdJifuxu1WkHM7kxyeSc2GTDyE5FUabtL+0Re1RHLNMh6AeQl4jdhvn8M/H1jdKI d0Z3/fFg7CiTM+sT0gZfVp1FfEsngc8ipCiCNFN5VaNrLz+XwdKxMAjExObIfI/giB Av/+xN51flLzZPL8YbcY944whb3T219NXj+25x3E=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -2.093
X-Spam-Level:
X-Spam-Status: No, score=-2.093 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_NONE=0.001] autolearn=unavailable autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (1024-bit key) header.d=huawei.com
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 CbKCDMqVdjQ1 for <cfrg@mail2.ietf.org>; Tue, 14 Jul 2026 03:12:19 -0700 (PDT)
Received: from sinmsgout02.his.huawei.com (sinmsgout02.his.huawei.com [119.8.177.37]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id 8C34811667CE3 for <cfrg@irtf.org>; Tue, 14 Jul 2026 03:12:18 -0700 (PDT)
dkim-signature: v=1; a=rsa-sha256; d=huawei.com; s=dkim; c=relaxed/relaxed; q=dns/txt; h=From; bh=oid8Dugyn6kXz+Zm4tBnldARyaVVsy0jyUuTZZBb9V4=; b=dS6c3TorcRAoF4tTIFB1mjDpaso/HNdwdLnffWliRDdnt2lFRRJvtjBTjBTlZ4opHaXDkJpKO Aw+Nu5nPv3YNytzxCvMEbPOLmo90Kq3djpr4u0bcOyqAGWROd979dvf7zMaL0stKjSj1HpNJsi8 DvjjoPNiv0gIr8TdUo/0Uvs=
Received: from mail.maildlp.com (unknown [172.18.94.16]) by sinmsgout02.his.huawei.com (SkyGuard) with ESMTPS id 4gzvzg3lhNz1vp5b; Tue, 14 Jul 2026 18:04:31 +0800 (CST)
Received: from sinpeml100011.china.huawei.com (unknown [7.188.194.178]) by mail.maildlp.com (Postfix) with ESMTPS id 977824055B; Tue, 14 Jul 2026 18:12:09 +0800 (CST)
Received: from sinpeml500009.china.huawei.com (7.188.194.209) by sinpeml100011.china.huawei.com (7.188.194.178) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.36; Tue, 14 Jul 2026 18:12:09 +0800
Received: from sinpeml500009.china.huawei.com ([7.188.194.209]) by sinpeml500009.china.huawei.com ([7.188.194.209]) with mapi id 15.02.1544.011; Tue, 14 Jul 2026 18:12:09 +0800
From: Wang Guilin <Wang.Guilin@huawei.com>
To: John Mattsson <john.mattsson=40ericsson.com@dmarc.ietf.org>, Neil Madden <neil.e.madden@runbox.eu>, Nick Sullivan <nicholas.sullivan@gmail.com>
Thread-Topic: [CFRG] Re: RG Last Call on draft-irtf-cfrg-hybrid-kems-12 and draft-irtf-cfrg-concrete-hybrid-kems-04
Thread-Index: AQHdESIDeJ/x99PG4EqzKNV8C9KYKbZnr7yAgAUXJ3A=
Date: Tue, 14 Jul 2026 10:12:09 +0000
Message-ID: <980239ede89a4829b4c78329f2eb5815@huawei.com>
References: <CAOjisRyRbkNif7mGD5TcoEcUsmbfeKE_wVHq+JH8VMySLcC47g@mail.gmail.com> <31D56016-A45C-4773-8091-DD8A204D428B@runbox.eu> <AS4PR07MB8825D7FF3A0C76F7F458D72089FC2@AS4PR07MB8825.eurprd07.prod.outlook.com>
In-Reply-To: <AS4PR07MB8825D7FF3A0C76F7F458D72089FC2@AS4PR07MB8825.eurprd07.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-originating-ip: [10.194.120.91]
Content-Type: multipart/alternative; boundary="_000_980239ede89a4829b4c78329f2eb5815huaweicom_"
MIME-Version: 1.0
Message-ID-Hash: PG2OQZPR32L5DEHSMMHHWYX37ATO7MRG
X-Message-ID-Hash: PG2OQZPR32L5DEHSMMHHWYX37ATO7MRG
X-MailFrom: Wang.Guilin@huawei.com
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-cfrg.irtf.org-0; header-match-cfrg.irtf.org-1; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: CFRG <cfrg@irtf.org>, "cfrg-chairs@ietf.org" <cfrg-chairs@ietf.org>, Wang Guilin <Wang.Guilin@huawei.com>
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [CFRG] Re: RG Last Call on draft-irtf-cfrg-hybrid-kems-12 and draft-irtf-cfrg-concrete-hybrid-kems-04
List-Id: Crypto Forum Research Group <cfrg.irtf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/cfrg/9eNvCY8bTXAUmcznCi43U28i-e4>
List-Archive: <https://mailarchive.ietf.org/arch/browse/cfrg>
List-Help: <mailto:cfrg-request@irtf.org?subject=help>
List-Owner: <mailto:cfrg-owner@irtf.org>
List-Post: <mailto:cfrg@irtf.org>
List-Subscribe: <mailto:cfrg-join@irtf.org>
List-Unsubscribe: <mailto:cfrg-leave@irtf.org>

Also agree on that further hybrid constructions, like PQ+PQ and EC+PQ+PQ, can be helpful.

However, broadening the scope may require to completely build up the draft and also related security proofs. By consideration of PQ migration urgency and also EC+PQ shall be able to cover the majority scenarios, it is still a good idea that the draft just chases its current target, IMHO.

Also, we have a draft in CFRG that takes another path: Not considering how different KEMs, PKEs, or DHs are executed or hybridized, just focus on how to combine/mix up the multiple input keys to obtain a secure output key, if at least one of multiple input keys is secure.

https://datatracker.ietf.org/doc/draft-wang-cfrg-key-combiners/

Hope it works. If so, such hybrid key combiners for multiple keys can be used for the cases like PQ+PQ and EC+PQ+PQ.

Cheers,

Guilin

From: John Mattsson <john.mattsson=40ericsson.com@dmarc.ietf.org>
Sent: Saturday, 11 July 2026 7:55 pm
To: Neil Madden <neil.e.madden@runbox.eu>; Nick Sullivan <nicholas.sullivan@gmail.com>
Cc: CFRG <cfrg@irtf.org>; cfrg-chairs@ietf.org
Subject: [CFRG] Re: RG Last Call on draft-irtf-cfrg-hybrid-kems-12 and draft-irtf-cfrg-concrete-hybrid-kems-04

Hi,

Neil Madden wrote:
>NIST SP 800-227 is probably the relevant standard to cite.

I agree. I also think the draft should adopt the following definition from SP 800-227: "preserve the security properties of its component KEMs." This is also the definition of a hybrid used in the EU PQC Roadmap. I do not think CFRG should specify any hybrids that weaken the security properties of one of their components.

Neil Madden wrote:
>Without wishing to open a can of worms, the arguments in the introduction for hybridising PQ and PreQ KEMs would seem to also potentially argue for hybridising two PQ KEMs instead, e.g. ML-KEM and Classic McEliece. (I think Soatok made this point recently). That would also hedge against potential breaks in either, and against implementation errors in either. Or even three-way hybrids of EC+PQ+PQ. If that is an absurd suggestion, the intro should spell out why more clearly - efficiency? Key size? Trust in already deployed code? The wording implies that the constructions in the draft only apply if one of the components is non-PQ, but I think for the KEM-based combiners they should work with any KEM, right? Either tighten up the wording to more clearly state why the draft is only applicable to traditional+PQ combinations, or else widen it to provide generic hybrid constructions regardless of the properties of the components.

I am surprised that the scope is strictly limited to PQ/T hybrids. From a theoretical perspective, PQ/PQ or PQ/PQ/T hybrids make more sense, as they can provide robustness against quantum attackers, whereas PQ/T hybrids clearly do not. I also think that, from a practical perspective, PQ/PQ hybrids such as ML-KEM + HQC-KEM are more compelling than FrodoKEM or ephemeral Classic McEliece.
https://csrc.nist.gov/csrc/media/Events/2025/workshop-on-guidance-for-kems/documents/papers/ml-kem-is-great-paper.pdf

If technically possible, I think the scope should be widened.

Cheers,
John Preuß Mattsson

From: Neil Madden <neil.e.madden@runbox.eu<mailto:neil.e.madden@runbox.eu>>
Date: Saturday, 11 July 2026 at 12:42
To: Nick Sullivan <nicholas.sullivan@gmail.com<mailto:nicholas.sullivan@gmail.com>>
Cc: CFRG <cfrg@irtf.org<mailto:cfrg@irtf.org>>; cfrg-chairs@ietf.org<mailto:cfrg-chairs@ietf.org> <cfrg-chairs@ietf.org<mailto:cfrg-chairs@ietf.org>>
Subject: [CFRG] Re: RG Last Call on draft-irtf-cfrg-hybrid-kems-12 and draft-irtf-cfrg-concrete-hybrid-kems-04
On 8 Jul 2026, at 11:24, Nick Sullivan <nicholas.sullivan@gmail.com<mailto:nicholas.sullivan@gmail.com>> wrote:

Dear CFRG,

This message starts a two-week RG Last Call on two related documents. The last
call ends on Wednesday July 22, 2026:

  Hybrid PQ/T Key Encapsulation Mechanisms (generic constructions)
  draft-irtf-cfrg-hybrid-kems-12
  https://www.ietf.org/archive/id/draft-irtf-cfrg-hybrid-kems-12.html

I've only had a chance to read through this document so far. I think it needs some work still. I haven't followed the development of these documents in much depth, so apologies if anything I raise here has been mentioned before. But perhaps coming at it with fresh eyes may be useful.

The introduction describes KEMs as "standardized", but doesn't link to any standard that defines the KEM API. NIST SP 800-227 is probably the relevant standard to cite. It uses different syntax compared to the draft, however, having explicit parameters passed to each method (which seems to invite the bug of passing inconsistent parameters to KeyGen vs Encaps vs Decaps, but here we are...). I think the equivalent to DeriveKeyPair(seed) would be:

  DeriveKeyPair(seed) = KEM.KeyGen(params; seed)

for some fixed "params". I think the syntax in the draft is clearer, but I think citing SP 800-227 and either using that syntax or showing how it maps would be a good idea.

My immediate thought on seeing the definition with both DeriveKeyPair and GenerateKeyPair was that the latter can be defined in terms of the former with a random seed, so why have both? This is partly addressed later, but it still doesn't seem clear to me. I can see that e.g. a HSM manufacturer may not publicly expose something like DeriveKeyPair in their implementation of ML-KEM, but is it a good idea to implement one of these hybrids outside of the HSM, making use of such an implementation? Or would it be better for the HSM manufacturer to implement the hybrid directly, making use of whatever internals they wish? The draft tries to accommodate both options, which makes it confusing to read IMO. Also, if a private key can either be a seed or a set of component keys depending on the implementation choice, how can a standard using this document specify the format of such a private key? Either define a fully generic black-box construction in terms of established KEM APIs, or else assume that internals are available. Trying to ride both horses is confusing.

Without wishing to open a can of worms, the arguments in the introduction for hybridising PQ and PreQ KEMs would seem to also potentially argue for hybridising two PQ KEMs instead, e.g. ML-KEM and Classic McEliece. (I think Soatok made this point recently). That would also hedge against potential breaks in either, and against implementation errors in either. Or even three-way hybrids of EC+PQ+PQ. If that is an absurd suggestion, the intro should spell out why more clearly - efficiency? Key size? Trust in already deployed code? The wording implies that the constructions in the draft only apply if one of the components is non-PQ, but I think for the KEM-based combiners they should work with any KEM, right? Either tighten up the wording to more clearly state why the draft is only applicable to traditional+PQ combinations, or else widen it to provide generic hybrid constructions regardless of the properties of the components.

Section 4.1:

"In the notation above, Decaps is written as if it always returns an output ss; this is an artifact of the Python-like psuedocode used in this document."

Python has "-> ss | None" ...

4.2:

The term "nominal group" is a new one for me, and Google seems to agree, returning nothing useful for that term. I appreciate there was a good reason for the cited reference to define them when analysing HPKE, but for this document would the much more common (if not entirely accurate) "cyclic group" suffice? Or even just saying ECDH/X25519/X448 directly as that is all anyone is ever really going to use, and the draft already explicit refers to Diffie-Hellman in the description anyway.

4.3:

If the PRG takes a seed and returns a fixed-size output, isn't it in fact a PRF instead?

4.4 - the description of KDFs also sounds more like a PRF.

Section 5:

Unlike some other commentators on this thread, I don't object to defining some generic constructions for C2PRI KEMs if there is a sufficient justification. If I was writing a library to implement this, I would use the type system to (try to) ensure constructions are used appropriately, something like:

  type KEM ...
  type C2PRIKEM extends KEM ...

  def CK(trad: KEM, pq: C2PRIKEM) -> KEM
  def UK(trad: KEM, pq: KEM) -> KEM

Thus enforcing that CK can only be used with a KEM with the additional C2PRI property. Perhaps the draft could capture something like that?

On the other hand, I really dislike having separate constructions for Nominal Groups vs KEMs for the traditional component. Couldn't the draft instead show how to wrap the nominal group into a KEM via (EC)DH-KEM and then define the constructions purely in terms of KEMs?

Section 6.1.1:

The definition of IND-CCA security for KEMs states that the ciphertext should be indistinguishable from a random string, and then states that HPKE's DH-KEM achieves this. But the ciphertext for DH-KEM is a serialized ephemeral public key on the underlying curve, so is trivial to distinguish from a random *string*. As far as I'm aware, DH-KEM doesn't require the use of Elligator or similar. Don't we rather want a left/right definition of indistinguishability, where the attacker has to distinguish between a ciphertext for a challenge key vs a ciphertext for a randomly generated encapsulation key?

6.1.2:

The notion of C2PRI seems related to key commitment in AEADs. Is that a useful comparison for readers?

6.1.3:

What is the relevance of SDH to the constructions in the document? Is this a requirement on all nominal groups? Again, can it make do with more standard CDH/DDH assumptions?

Best wishes,
Neil