[openpgp] PQC requires urgent semantic cleanup
Andrew Gallagher <andrewg@andrewg.com> Sun, 16 November 2025 11:45 UTC
Return-Path: <andrewg@andrewg.com>
X-Original-To: openpgp@mail2.ietf.org
Delivered-To: openpgp@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id AACE38A6D44C for <openpgp@mail2.ietf.org>; Sun, 16 Nov 2025 03:45:52 -0800 (PST)
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -2.101
X-Spam-Level:
X-Spam-Status: No, score=-2.101 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, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=andrewg.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 QX1cBNmKbUSk for <openpgp@mail2.ietf.org>; Sun, 16 Nov 2025 03:45:51 -0800 (PST)
Received: from fum.andrewg.com (fum.andrewg.com [IPv6:2a01:4f9:c011:23ad::1]) (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 552E28A6D447 for <openpgp@ietf.org>; Sun, 16 Nov 2025 03:45:51 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=andrewg.com; s=andrewg-com; t=1763293543; bh=ytBXPpOc+Yp8CaapofBXSkGxA1L+PUzp7IWV84bG9kU=; h=Date:To:From:Subject:From; b=Cyo+QtRC9OLUp+nDik2v2c1XKgQohgv/aKiLi4ZgvtKeQUe8z7olfxeLYGCux5EoF QoEQ7U5RNpESLGcLfahoCCl5GvbJu+R5aiUWkB4CrLeiG8ehbY5NZQ7+G1YHSBUWcz +q49eg2x9sX32MvjMrg2sFIa0bCuWokYBFVWFDcZ1BxV9kghiSNpbNCc+aUhI69tGW uzxBFh1vvRY0Mc88ggmoVY9xdwkK+iSQyk48Gh1VtPd7F4OgMl/utoaQp53NxVxYG4 5oArMA1AJ/7rMVDvq2qyu8ZWikWIeT50g3+mR0fxBB8wQrampzhuEUWspmGLn7/YVF 5yg2ehzoUrSnQ==
Received: from [192.168.1.140] (unknown [176.61.115.103]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) by fum.andrewg.com (Postfix) with ESMTPSA id BD2DB5EE06 for <openpgp@ietf.org>; Sun, 16 Nov 2025 11:45:43 +0000 (UTC)
Message-ID: <d6f1e9b6-aed9-481a-88d2-23b1a6a3bdac@andrewg.com>
Date: Sun, 16 Nov 2025 11:45:42 +0000
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird Beta
Content-Language: en-US
To: IETF OpenPGP WG <openpgp@ietf.org>
From: Andrew Gallagher <andrewg@andrewg.com>
Autocrypt: addr=andrewg@andrewg.com; keydata= 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 DuWw/Q8=
Content-Type: text/plain; charset="UTF-8"; format="flowed"
Content-Transfer-Encoding: 7bit
Message-ID-Hash: URUS6D2BQTMX37QIGIBODL6JYR5VJB4E
X-Message-ID-Hash: URUS6D2BQTMX37QIGIBODL6JYR5VJB4E
X-MailFrom: andrewg@andrewg.com
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-openpgp.ietf.org-0; 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: [openpgp] PQC requires urgent semantic cleanup
List-Id: "Ongoing discussion of OpenPGP issues." <openpgp.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/openpgp/kA4YtiP3j8LJUift1_D0mWIHVV0>
List-Archive: <https://mailarchive.ietf.org/arch/browse/openpgp>
List-Help: <mailto:openpgp-request@ietf.org?subject=help>
List-Owner: <mailto:openpgp-owner@ietf.org>
List-Post: <mailto:openpgp@ietf.org>
List-Subscribe: <mailto:openpgp-join@ietf.org>
List-Unsubscribe: <mailto:openpgp-leave@ietf.org>
Hi, all.
Hockeypuck currently imposes a default packet size limit of 8kiB, and a
total certificate size limit of 1MiB. These numbers are arbitrary, but
they have been effective at limiting the impact of third-party signature
flooding.
PQC keys call for an adjustment to these defaults, however SLH
self-signatures are particularly problematic and IMO will also require
an ecosystem-wide realignment of temporal evolution semantics.
The largest SLH key specified in draft-pqc is 256s, which has a
signature size of 29,792B. Let us consider some typical scenarios:
1. A "basic" SLH certificate consisting of:
* a primary key (+direct-sig)
* one userID (+self-cert)
* an encryption subkey (+sbind)
will have a minimum of three signatures, for ~90kiB.
2. A "code signing" SLH certificate consisting of:
* a primary key (+direct-sig)
* one userID (+self-cert)
* an SLH-256s CA certification
* one SLH-256s signing subkey (+sbind +back-sig)
will have a minimum of five signatures, for ~150kiB.
3. A "kitchen sink" v6 certificate consisting of:
* a primary key (+direct-sig)
* two userIDs (+2 self-certs), each with
* two SLH third-party signatures
* a 1pa3pc signature
* encryption, ECC auth and SLH signing subkeys (+3 sbinds +1 backsig)
will have a minimum of ten signatures, for ~300kiB.
Now consider a common scenario where each self-signature is only valid
for 2 years, and therefore requires regular renewal. After six years,
the kitchen sink certificate will have accumulated a further 24
additional self-signatures, for a grand total of ~1.02MiB. And that's
before we consider revocations, key replacement, or any number of other
likely scenarios.
I believe such certificate sizes are untenable. I am therefore proposing
that keyservers SHOULD automatically strip historical self-signatures
made by SLH primary keys, to keep the total size of the certificates
manageable.
This however only works if the historical self-signatures are no longer
required, and implementations are not consistent here.
Currently, the interop test suite requires that if a new self-signature
is made after the expiry of the previous self-signature, the certificate
is temporarily invalid between the expiry of one signature and the
creation of the next, even if both signatures are available to the
receiving implementation.[1] This also means that if the previous
self-signature were not available to the receiving implementation, the
certificate was never valid before the date of the newer self-signature,
*even if the creation date of the primary key indicates otherwise*.
This flows from an assumption that a self-signature over a certificate
component only validates that component after the signature creation
date, meaning that the most recent self-signature cannot be relied on to
validate a signing key for the purposes of verifying earlier data
signatures. This assumption is deeply problematic for many reasons IMO:
1. It has no explicit basis in the RFCs
2. It contradicts historical behaviour (GnuPG "fails" this test)
3. It assumes that key creation dates are meaningless
4. It adds no reasonable utility
5. It causes subtle, tricky validity errors
6. It prevents cleanup of outdated signatures
The last issue is the most relevant to the above discussion, but IMO the
other issues are already sufficient to motivate a change in the
"expected" behaviour.
I have specified an alternative, simpler interpretation in section 9 of
draft-signatures [2], which defines the start of the validity period as
the creation date of the primary key (or the subkey, in the case of
subkey binding sigs). This has several advantages:
1. It more closely matches the historical behaviour of GnuPG
2. It is significantly more reliable
3. It allows older self-signatures to be cleaned up
I strongly believe this interpretation should be encoded in the interop
suite, and that implementations should update their temporal logic to
match, *before* we start distributing SLH certs on the keyservers.
I also strongly believe we should reject the interop suite's invention
of "un-revocation" and "expiring revocations", for the exact same
reasons that we should reject "temporary invalidity". This clarification
is also specified in draft-signatures.
Thanks,
A
[1]
https://sequoia-pgp.gitlab.io/openpgp-interoperability-test-suite/results.html?impls=171157#Temporary_validity
[2]
https://datatracker.ietf.org/doc/html/draft-gallagher-openpgp-signatures#name-time-evolution-of-signature
- [openpgp] PQC requires urgent semantic cleanup Andrew Gallagher
- [openpgp] Re: PQC requires urgent semantic cleanup Heiko Schäfer
- [openpgp] Re: PQC requires urgent semantic cleanup Andrew Gallagher
- [openpgp] Re: PQC requires urgent semantic cleanup Heiko Schäfer
- [openpgp] Re: PQC requires urgent semantic cleanup Daniel Huigens
- [openpgp] Re: PQC requires urgent semantic cleanup Daniel Huigens
- [openpgp] Re: PQC requires urgent semantic cleanup Daniel Huigens
- [openpgp] Re: PQC requires urgent semantic cleanup Andrew Gallagher
- [openpgp] Re: PQC requires urgent semantic cleanup Daniel Huigens
- [openpgp] Re: PQC requires urgent semantic cleanup Andrew Gallagher
- [openpgp] Re: PQC requires urgent semantic cleanup Daniel Huigens
- [openpgp] Component key validity should never hav… Heiko Schäfer
- [openpgp] Re: Component key validity should never… Preston Maness
- [openpgp] Re: PQC requires urgent semantic cleanup Andrew Gallagher