[PATCH] Make update_keysig_packet honour cert-digest-algo

David Shaw dshaw at jabberwocky.com
Tue May 12 17:45:23 CEST 2009

On May 12, 2009, at 11:13 AM, Daniel Kahn Gillmor wrote:

> On 05/12/2009 09:42 AM, David Shaw wrote:
>> This patch would mean that when updating these signatures, the  
>> signature
>> hash may also be changed, as a secondary item.  So if the user  
>> changes
>> the primary UID flag, they'll get a new cert hash at the same time.
>> This is fine if someone intended to do that, but less fine if it  
>> happens
>> as an unexpected side-effect of doing something as simple as  
>> setting the
>> primary UID flag.
> So what if the update process produced a warning prompt to query if  
> the
> user really wants the digest algorithm to change?
> If people don't like the idea of adding an additional warning in some
> cases, (e.g. it might interrupt automated workflow for some users),  
> why
> not instead at least warn that --cert-digest-algo is not being  
> honored?
>> We still live in a world where a good percentage of the installed  
>> code
>> base cannot understand things like SHA256 (and fewer can understand
>> SHA512 or 384), so I think this violates the principle of least  
>> surprise
> I understand what you're saying.  However, i also think it violates  
> the
> principle of least-surprise to do something that you *know* updates  
> your
> self-sig (e.g. setpref) and see gpg not honor the explicitly-specified
> --cert-digest-algo).

You know that.  I'd be shocked to my core to find out that more than  
5-10% of randomly chosen OpenPGP users have any understanding at all  
that preferences are stored on the self-sig, that a valid self-sig is  
required to have a usable key, and that remaking the self-sig using a  
hash that doesn't exist on the recipient side will cause that  
recipient to not be able to use the key at all.

>> So all that said, if the goal is a new self sig, just sign your own  
>> UID
>> like you'd sign any other UID.  GPG will recognize that it needs to  
>> make
>> a self-signature, and will properly add the various self-sig things  
>> like
>> preferences and such.
>> gpg --cert-digest-algo the-new-algo -u mykey --edit-key mykey
>> delsig (the old sig)
>> sign (make the new sig)
>> save
> For users with several UIDs where each UID has dozens of signatures,  
> the
> delsig step at least is a serious pain in the neck.  Why should the  
> user
> need to go through such a rigamarole just to be able to publish a
> stronger self-sig for those clients capable of consuming it?

Because there are vastly more users who don't want to do this.

> Here's an idea that might answer both concerns:
> Making a self-signature when cert-digest-algo is set to something  
> other
> than SHA1 could generate *two* self-signatures per UID:
> * an SHA-1-based self-sig (timestamped X) for consumption by clients
> who cannot handle other digests, and
> * a self-sig using cert-digest-algo (timestamped X+1) for consumption
> by clients who *can* handle the newer digests (and who may wish at  
> some
> point to deprecate SHA-1 sigs).
> Both self-sigs would contain identical subpackets other than the  
> digest
> algo and the timestamp.

It's always possible to come up with a complex solution, but then that  
complexity may have other side effects down the road, and will also  
have to be maintained as a feature in GPG for the indefinite future.

>  Since
> self-sigs are made over data entirely under the control of the
> keyholder, there is no risk that the act of making a self-signature  
> over
> SHA-1 could be abused by someone exploiting the digest's weakened
> collision resistance.

So then why is any of this necessary?


More information about the Gnupg-devel mailing list