[openpgp] Re: New Version Notification for draft-dkg-openpgp -stateless-cli-15.txt

Andrew Gallagher <[email protected]> Sun, 11 Jan 2026 17:28:14 +0000
Newsgroups gmane.ietf.openpgp
Message-ID <[email protected]>
Hi, Daniel! :-)

On 09/01/2026 22:16, Daniel Kahn Gillmor wrote:
> On Thu 2026-01-08 18:01:49 +0000, Andrew Gallagher wrote:
>> 
>> It is not safe to treat ephemerality as an optional extension of
>> existing encryption subkeys, because then it's too easy to accidentally
>> downgrade it to non-ephemeral.
> 
> This is true of all "ephemeral" keys, whether marked as such or not,
> right?
> 
> I mean, draft-green-tls-static-dh-in-tls13 offers a way to effectively
> recreate supposedly ephemeral keys in the forward-secure TLS handshake.
> 
> We can discourage it, but we can't prevent it.  Guidance that says
> "please don't extend encryption-capable subkey expiration" seems like
> good guidance generally, no?

There are use cases where extending subkey expiration is necessary, e.g. 
if the secret key is distributed across multiple devices, or if it is in 
a hardware token with limited storage for subkeys (e.g. openpgp card) 
and rolling the secret would be difficult. Such guidance can therefore 
never be universal, so applications can never remove the ability to 
extend such keys. And so long as that code path exists, it could 
potentially be triggered.

But if you have a separate mechanism for ephemeral keys, and if the 
expiry date was part of the key material packet (not the binding 
signature), and contributed to the fingerprint, it would be very 
difficult to make any such code path function at all. This would offer 
an actual guarantee that the expiry date of this kind of key cannot be 
accidentally extended, and is therefore solid enough to build a "secure 
disappearing messages" UX on top of. Without solid guarantees I think 
the attractiveness of the mechanism will be limited.

We can't prevent people from trying to work around security guarantees, 
but we can make it difficult.

> I actually don't think it's unclear how these rules would be
> consistently implemented given the data in the self-signatures.

You're suggesting we assign novel semantics to the existing E(comms) and 
E(storage) key flags. Any time we retcon semantics like this, there will 
be laggy implementations and mistakes. It's fine if we treat these new 
semantics as hints, but I don't believe we can make solid security 
guarantees based on them.

(before anyone complains, draft-signatures is not the same because the 
semantics it tries to fix are already inconsistent in the wild)

> Can you say more about how much bloat you think would cause a self-DoS?
> or even what you think the self-DoS would be?  are you saying that the
> keyholder would be unable to operate their own secret key to decrypt?
> Or that their peer would somehow be unable to encrypt to it?

I'd fear that some peers may be unable to encrypt because they see too 
many encryption subkeys attached to a certificate, or that distribution 
mechanisms may fail to serve an updated key if it goes over some limit 
(particularly when we have post-quantum self-signatures).

I already sent a message to the list about the bloating effect of ML-DSA 
self-signatures, and that was using a slow subkey refresh cycle (2 
years). With a refresh cycle on the order of years we have years to 
upgrade all the clients and distribution mechanisms, but if we encourage 
a faster one on the order of months or weeks rather than years? oof...

>> Part of the problem is that the existing wire format offers *too many*
>> knobs. In order to tighten security, you have to remove the knobs that
>> are no longer required; otherwise you're one knob-twiddle away from a
>> downgrade attack.
> 
> I think what you're calling a "downgrade attack" is the current status
> quo: a message that can't be reliably deleted.  Is that right?

Correct.

> what is the knob-twiddle that would cause it?  who has to twiddle the
> knob to get that wrong?

The user accidentally extends the expiry date on the wrong subkey. Which 
as I have argued above, will always be a risk if we reuse existing formats.

> The way i'm currently thinking about it is these certificates will work
> with modern OpenPGP implementations. As long as their implementations
> can handle RFC9580, the peers that access the certificate at least don't
> need to implement anything other than the already-known semantics about
> expiration.  In particular: don't encrypt to expired encryption-capable
> subkeys.

Right, and if we're just helping people to rotate their subkeys more 
often by giving them better tooling, there is some merit in that. But 
subkey rotation is not completely cost-free for the other correspondent.

> If we were to use a distinct new critical wireformat change (new packet
> type, critical signature subpacket, etc) to mark a component key as "not
> renewable" (for example) then we risk being unable to even distribute
> the associated certificate to a brittle RFC9580 client that might
> complain about or reject the entire certificate.  On the other hand, if
> we use some non-critical extension or signature subpacket (or other
> similar inoffensive wireformat change) to distribute it, then we face
> the same risks that i think you're describing.

If we are using a new wire format, we don't have to distribute it in a 
certificate, or at least not a traditionally-formatted one. I'm just 
thinking off the top of my head here, but we could (throws dart at a 
board) define a new UAT subpacket and put both the ephemeral key and its 
binding signature in the UAT, so that legacy code will think the UAT is 
unbound and silently ignore it. I'm sure we can think of plenty of other 
ways of doing it that are invisible to legacy code...

A

_______________________________________________
openpgp mailing list -- [email protected]
To unsubscribe send an email to [email protected]