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

"D. J. Bernstein" <djb@cr.yp.to> Sat, 11 July 2026 16:51 UTC

Return-Path: <djb-dsn2-1406711340.7506@cr.yp.to>
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 B20D711521CA9 for <cfrg@mail2.ietf.org>; Sat, 11 Jul 2026 09:51:13 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1783788673; bh=fQ6+Ms1aZCecl+cSgTujrTW4p4Hdgi7u5RAbQhWsJa0=; h=Date:From:To:Subject:In-Reply-To; b=EvHeohzZfPkJBmvcglPS9QZFjpf5UDe64Qgl3Erji2xX57CSWG0szRvFXe7UEi0hN 5Pw2R9ggc/7tFiyYEOlnAjH4T76xslYX88faM0MFM6F6mBStJB8YjePsoccUz/n1pI GvlWa3oinJnEnuInGt0Umyga44d6i5y81/WBLuj8=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -4.197
X-Spam-Level:
X-Spam-Status: No, score=-4.197 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=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 46VvJ53nmaQ8 for <cfrg@mail2.ietf.org>; Sat, 11 Jul 2026 09:51:13 -0700 (PDT)
Received: from salsa.cs.uic.edu (salsa.cs.uic.edu [131.193.32.108]) by mail2.ietf.org (Postfix) with SMTP id 2899911521C9C for <cfrg@irtf.org>; Sat, 11 Jul 2026 09:51:13 -0700 (PDT)
Received: (qmail 2374133 invoked by uid 1010); 11 Jul 2026 16:51:12 -0000
Received: from unknown (unknown) by unknown with QMTP; 11 Jul 2026 16:51:12 -0000
Received: (qmail 581243 invoked by uid 1000); 11 Jul 2026 16:50:58 -0000
Date: Sat, 11 Jul 2026 16:50:58 -0000
Message-ID: <20260711165058.581241.qmail@cr.yp.to>
From: "D. J. Bernstein" <djb@cr.yp.to>
To: cfrg@irtf.org
Mail-Followup-To: cfrg@irtf.org
In-Reply-To: <31D56016-A45C-4773-8091-DD8A204D428B@runbox.eu>
Message-ID-Hash: SA5UI45XCKVMIVA6XRA6DHUWZ7LWVHNZ
X-Message-ID-Hash: SA5UI45XCKVMIVA6XRA6DHUWZ7LWVHNZ
X-MailFrom: djb-dsn2-1406711340.7506@cr.yp.to
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
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/69MtWW4RRMZtGvr9UwvSPXo0L9A>
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>

Neil Madden writes:
> 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

The above is an example of what I meant by "simple (but again nowhere
near universal) type discipline"; and type-checking tools for it are an
example of what I meant by "test mechanisms that enforce these security
requirements"---where I also noted that we're "nowhere near universal
deployment" of such test mechanisms.

For me, the real-world mess of different software-engineering practices
feeds into the analysis of the security consequences of protocol-level
designs. For example, some programmers leap at every opportunity to put
information into types while other programmers are allergic to this and
many more are somewhere in the middle. Many libraries will end up with
just a "KEM" concept (or maybe lump that further into a "group" concept)
without any tests that stop programmers from plugging a non-"C2PRI" KEM
into "CK". The main way for such tests to happen would be for the
library-architecture designers to notice and act upon the "C2PRI"
warnings in the spec; this certainly isn't a reliable mechanism. The
plugging mechanism will then be exposed to more programmers than the
architecture designers, and many of those programmers also won't notice
the "C2PRI" warnings in the spec.

Let me also point out that most type efforts simply give up when they
have to cross library boundaries. Look at how rustls calls aws-lc, for
example, and how aws-lc in turn calls s2n-bignum; there are quite a few
languages involved there, and very little type information is passed
between those languages. The most convincing correctness verification by
far is in s2n-bignum, which already has a full X25519 implementation and
is accumulating more and more components of ML-KEM; maybe s2n-bignum
will add not just full ML-KEM but also a "C2PRI" proof, if that proof
holds up; the proof system, HOL Light, can trivially promote this
property to a type; but it's not as if the interfaces are set up to pass
this information through to rustls. Realistically, if the information
gets into rustls then it would instead be with rustls manually tracking
properties of each primitive that it's importing.

---D. J. Bernstein


===== NOTICES =====

IETF BCP 78, "Rights Contributors Provide to the IETF Trust", Section 5
(normative), "Rights in Contributions", provides a modification right
"unless explicitly disallowed in the notices contained in a Contribution
(in the form specified by the Legend Instructions)".

The official language from IETF's "Legend Instructions" for the
situation that "the Contributor does not wish to allow modifications nor
to allow publication as an RFC" is as follows: "This document may not be
modified, and derivative works of it may not be created, and it may not
be published except as an Internet-Draft."
<https://trustee.ietf.org/wp-content/uploads/Corrected-TLP-5.0-legal-provsions.pdf>

The same language is used in, e.g., RFC 5831. The same language hereby
applies to this document. This is not disclaiming or limiting the
applicability of IETF policies; it is strictly following IETF policies.

IESG claims that the "explicitly disallowed" provision in BCP 78 is
limited to the examples in Section 3 in BCP 78. That is incorrect. BCP
78 states that Section 5, "Rights in Contributions", is normative, while
Section 3, "Exposition of Why These Procedures Are the Way They Are", is
informative. The opt-out provision in the normative text is clear, and
cannot be limited by an informative section. BCP 78 does not give IESG
any authority to issue changes or purported clarifications of the rules.

Rationale for exercising the BCP 78 opt-out provision: I'm fine with
redistribution of copies of this document. The issue is instead with
modification, such as (1) IESG's May 2025 posting of an IESG-mangled
version of an appeal that I had filed and (2) IETF management selling
IETF mailing-list text to AI companies. This goes far beyond what
copyright law allows as fair use (such as giving quotes for purposes of
commentary). When I complained about the mangled document, the IETF
Executive Director responded not by apologizing but instead by asserting
that IETF management had the power to do whatever it wanted.