[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 04:28 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 DC598114ED821 for <cfrg@mail2.ietf.org>; Fri, 10 Jul 2026 21:28:06 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1783744086; bh=/8YOg/k8QAYb6gE3WTd2iU+267/6DbH9XnVYITm8TTE=; h=Date:From:To:Subject:In-Reply-To; b=PAY9LLxqTipsfcOoMsMhVSkkg2t5E3fvHSN/cSuxb4U5klV/ufYGqSYfo/7/4+Dzs j23veVFDErlral83B6mdpm0TkomOZB3k+15X5A9stMznqgP6ahkAWBx5eBHoQ4NGvH 1k5ZLoDCGlrFf/IB89UeYqjirzfU0bzGqqv4aYHQ=
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 ASnm1CszEwnm for <cfrg@mail2.ietf.org>; Fri, 10 Jul 2026 21:28:06 -0700 (PDT)
Received: from salsa.cs.uic.edu (salsa.cs.uic.edu [131.193.32.108]) by mail2.ietf.org (Postfix) with SMTP id 37E75114ED81C for <cfrg@irtf.org>; Fri, 10 Jul 2026 21:28:06 -0700 (PDT)
Received: (qmail 2360836 invoked by uid 1010); 11 Jul 2026 04:28:05 -0000
Received: from unknown (unknown) by unknown with QMTP; 11 Jul 2026 04:28:05 -0000
Received: (qmail 544344 invoked by uid 1000); 11 Jul 2026 04:27:51 -0000
Date: Sat, 11 Jul 2026 04:27:51 -0000
Message-ID: <20260711042751.544342.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: <CAOvwWh227S=RPmX0xYsFV9SNwYhFrjrg42vx0WkhXHx6qGzj8g@mail.gmail.com>
Message-ID-Hash: QVGEXDDOUJPU4BBUK3444SH3IEACTRM5
X-Message-ID-Hash: QVGEXDDOUJPU4BBUK3444SH3IEACTRM5
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/je0m6hPwOq6Wt2rfAvuKPUsszqs>
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>

Soatok Dreamseeker writes:
> I was referring to your SafeCurves website.
> https://safecurves.cr.yp.to/complete.html still says P-256 doesn't satisfy
> completeness,

Neither of the criteria defined on the page is met by any known formulas
for NIST P-256.

First criterion: "SafeCurves requires curves to support simple, fast,
_complete_, constant-time single-coordinate single-scalar multiplication.
This includes the SafeCurves ladder requirement but goes further by
requiring completeness."

The word "ladder" links to the ladder page, which provides underlying
definitions: "'Fast' means that implementations of scalar multiplication
for the same curve cannot be much faster, and 'simple' means that
reasonably fast implementations of scalar multiplication for the same
curve cannot be much more concise. At this time there are no examples
close enough to the edge to warrant quantification of 'much'."

Second criterion: "SafeCurves also requires curves to support simple,
fast, _complete_, constant-time multi-scalar multiplication."

More broadly, the SafeCurves introduction explains the point of the
SafeCurves criteria: "Most of these attacks would have been ruled out by
better choices of curves that allow _simple_ implementations to be
_secure_ implementations. This is the primary motivation for SafeCurves.
The SafeCurves criteria are designed to ensure ECC security, not just
ECDLP security."

As an analogy, C++ has an unsafe "s[i] = c" and a safe (aside from
threading issues etc.) "s.at(i) = c". The safe version is endlessly
advertised; it's only _slightly_ less concise; and the slowdown usually
doesn't matter. But, hmmm, somehow I keep seeing new C++ code that's
using "s[i] = c" (not just in the occasional hot spots), and security
problems resulting from this.

> and https://safecurves.cr.yp.to/ind.html claims it doesn't
> satisfy indistinguishability.

The criterion defined on that page is not met by any known formulas for
NIST P-256.

> Maybe consider updating these pages to incorporate research that's as
> fresh as 11-12 years old.

Maybe learn to read. The completeness page has always explained why the
line of research that you're referring to isn't relevant: "Subsequent
research has introduced other complete scalar-multiplication formulas.
However, many of these formulas are considerably slower and more
complicated than standard incomplete scalar-multiplication formulas,
creating major conflicts between simplicity, efficiency, and security."

Probably some alert people reading this message are thinking: wait a
minute, how can the SafeCurves web pages from 2013---

    https://web.archive.org/web/20131019003140/http://safecurves.cr.yp.to/complete.html

---be talking about other complete formulas if those formulas were
introduced in a 2015 paper? Was this time travel?

Answer: After introducing complete addition formulas for Edwards curves
in 2007, Lange and I started looking more broadly at completeness, and
by 2009 we had presented complete addition laws for all elliptic curves
over finite fields:

    https://web.archive.org/web/20130816082425/http://cr.yp.to/talks/2009.07.17/slides.pdf

But the Edwards formulas were simple and fast while the formulas we gave
for, e.g., NIST P-256 weren't---and this matters for figuring out which
formulas have a realistic chance of taking over the software ecosystem,
addressing the real-world problems caused by incomplete formulas.

Similarly, the newer paper https://eprint.iacr.org/2015/1060 managed to
attract a few implementations (e.g., https://eprint.iacr.org/2019/1166)
but never had a real chance of becoming dominant, because it still
flunks the "simple" and "fast" criteria.

The same type of tension is evident for more issues than completeness,
and played an explicit and central role in the SafeCurves pages that we
posted in 2013. See the 2024 paper for much more about all this (for
completeness, for indistinguishability, and in general), along with a
review of how newer vulnerability announcements tracked the SafeCurves
predictions of what would happen, in particular with various security
failures in NIST P-256 software, such as CVE-2023-6135.

Of course, having this all spelled out doesn't stop some people from
skipping the SafeCurves introduction, skipping the definitions of the
criteria, missing the words "simple" and "fast", generally missing the
whole point of the SafeCurves security analysis, and, as a result of
this spectacular failure of reading comprehension, falsely accusing us
of missing something. (If readers can miss such basic words as "fast" in
a security analysis, do we seriously believe it's safe to assume that
readers will see and understand the importance of, say, "C2PRI"?)

Apparently some people even think that P-256 is now safe (at least from
a completeness perspective). I guess these people also think that, since
C++ _allows_ "s.at(i) = c", that's what everybody is using. Sorry, no,
the simpler "s[i] = c" option naturally attracts usage.

---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.