[openpgp] Re: Problem in RFC 9580

Andrew Gallagher <andrewg@andrewg.com> Mon, 20 July 2026 12:55 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 6B7F911A5DA9D for <openpgp@mail2.ietf.org>; Mon, 20 Jul 2026 05:55:26 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1784552126; bh=viAIWxcC3m3+QeHT+B6GDcFPGWdfvtdJPTlgiAwIkc8=; h=Date:Subject:To:References:From:In-Reply-To; b=qv+vBm8krMmlKtB1jG2D/iluzA5CzaAUdI1rSLBuynyqtl7cosnuFx+oEVlQT5dgW hXUAIYNLwlOialQat1oJy/8+3eyv7OMpA6w5g7/6YWFFIk0swfmDTmK1zy2/nUhrQl HABPyJY1XmLAL88JGrs465FNWNB/9c0tXIDWhCEU=
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 sDCZN7uzd1_n for <openpgp@mail2.ietf.org>; Mon, 20 Jul 2026 05:55:25 -0700 (PDT)
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 A038411A5DA97 for <openpgp@ietf.org>; Mon, 20 Jul 2026 05:55:25 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=andrewg.com; s=andrewg-com; t=1784552118; bh=viAIWxcC3m3+QeHT+B6GDcFPGWdfvtdJPTlgiAwIkc8=; h=Date:Subject:To:References:From:In-Reply-To:From; b=Nszihv8UHIQUHw6Gide7g9vyncw2AdGLTaWlVwVHvHjyRmc8srsD61afL9+Qp5z7q jCXbQX+uQo32piNZuIRWCc4z4yletXmfgBFmq/bSSbU65+SpGzn0ypQEjFtZGAOEIY MgoL3wffIbw3OPlz9NUVzjdz295CmteFJvLooDbHJNTZANVZK+eoKe2ezvGAxWGds9 7g4hetmbRFNF2o5ZDhTUMmnRY6I22GtKU2RPRNBonsO59FhMRxQ9ThdZpfq0G/U5K0 tY4D0JUJuhMMgyODRr8iG6FT776yv0L6U7NIlRJfAwFNM+3bvwifuAotsYpmpQV5FI G4VtixnE4kjBQ==
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) (No client certificate requested) by fum.andrewg.com (Postfix) with ESMTPSA id E02355E1E7 for <openpgp@ietf.org>; Mon, 20 Jul 2026 12:55:17 +0000 (UTC)
Message-ID: <576ad203-7174-4c8b-bf9a-ced2932e2fc4@andrewg.com>
Date: Mon, 20 Jul 2026 13:55:10 +0100
MIME-Version: 1.0
User-Agent: Thunderbird Daily
To: openpgp@ietf.org
References: <RT-Ticket-1456117@icann.org> <rt-5.0.3-714853-1784233825-1032.1456117-37-0@icann.org> <rt-5.0.3-717478-1784234042-1273.1456117-37-0@icann.org> <SYBPR01MB6336409D20D02C08575DBB51EEC32@SYBPR01MB6336.ausprd01.prod.outlook.com>
Content-Language: en-US
From: Andrew Gallagher <andrewg@andrewg.com>
Autocrypt: addr=andrewg@andrewg.com; keydata= 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 DuWw/Q8=
In-Reply-To: <SYBPR01MB6336409D20D02C08575DBB51EEC32@SYBPR01MB6336.ausprd01.prod.outlook.com>
Content-Type: multipart/mixed; boundary="------------VDJwpXkqwbmdug20cUpkZBkM"
Message-ID-Hash: BKTIMVJL7CSICWIPQKATZKNQ6N74SXQD
X-Message-ID-Hash: BKTIMVJL7CSICWIPQKATZKNQ6N74SXQD
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] Re: Problem in RFC 9580
List-Id: "Ongoing discussion of OpenPGP issues." <openpgp.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/openpgp/jHWeIDBMpu9l0tfwOB_lwZZhIOA>
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>

On 20/07/2026 13:11, Peter Gutmann wrote:
> I was reading RFC 9580 and noticed this arbitrary requirement that's been
> quietly added to section 3.2 on MPIs, which I hadn't looked at before because
> MPIs haven't changed for over 30 years (40 years if you start counting from
> Phil's original design of MPIs):
> 
>    When parsing an MPI in a version 6 Key, Signature, or Public Key Encrypted
>    Session Key (PKESK) packet, the implementation MUST check that the encoded
>    length matches the length starting from the most significant non-zero bit;
>    if it doesn't match, reject the packet as malformed.

Quietly? It was discussed at IETF114:

https://mailarchive.ietf.org/arch/msg/openpgp/05E3ii19CujKjvSLGbv3_pjIdUo/

https://mailarchive.ietf.org/arch/msg/openpgp/x3jmuOynnUnkQECQ7I6dhTwULmQ/

> Why was this added, and what purpose does it serve? 

It ensures that there is only one way to encode an MPI on the wire, and 
it was introduced to prevent the further recurrence of issues where an 
MPI is parsed and reserialised, and the reserialisation breaks the 
signature. GitHub did this to multiple keys.

> Everything in existence
> stores and processes MPIs as byte strings, why is it now necessary to encode
> lengths to the individual-bit level? 

It has always been necessary to encode MPI lengths to the bit level. I 
agree that this design is ridiculous, but it is not new.
> This means that an encoded MPI that's
> been perfectly valid for over 30 (or 40) years is suddenly deemed to be
> invalid if it has a version number of 6 associated with it, which seems crazy.
Such an MPI has *never* been valid. The following text has been in the 
spec since RFC2440 (section 3.2 
https://datatracker.ietf.org/doc/html/rfc2440#section-3.2)

 > The length field of an MPI describes the length starting from its
 > most significant non-zero bit. Thus, the MPI [00 02 01] is not formed
 > correctly. It should be [00 01 01].

An MPI that's been perfectly valid for 30 years can't have a version 
number of 6 associated with it, because version 6 didn't exist 30 years 
ago. The only thing that has changed is that receiving implementations 
are now required (for new v6 artifacts only) to enforce correct MPI 
formatting. This is perfectly backwards-compatible with existing code.

A