[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Key IDs



Jim Gillogly, <jim@xxxxxxx>, writes:
> - 5.5.2 alludes to the 0xDEADBEEF problem with respect to v3 keys.
>   Geoff Keating posted a message Monday in
>   comp.security.pgp.tech entitled "Two different DSA keys with
>   identical key IDs", but I haven't been able to confirm them:
>   pgpk -a goes haring off to the Netherlands to try to install
>   them (I didn't realize PGP had a browser built in!).  Doing the
>   fingerprinting "by hand" results in different IDs than the ones
>   shown in his message -- at least for me.  If somebody else can
>   confirm his result, the v4 key explanation might need to include
>   a similar caveat.

I have confirmed that the two keys he showed do in fact generate matching
64-bit keyids.

The 64 bit keyid of a DSA key is simply the rightmost 64 bits of the
fingerprint, which is the SHA-1 hash of the key.  Generating two keys
with matching keyids is then a matter of finding a 64 bit hash collision.
This requires approximately 2^32 keys to be generated.

You can generate multiple DSA keys quickly if they all share the same
p, q and g values.  You pick a random x and calculate the public value
from y = g^x mod p.  Then you hash p, q, g and y to form the fingerprint.

Artificially generating two keys with matching keyids is therefore
relatively easy.  It is much more difficult to generate a key which
matches the keyid of a given key, which was the original so-called
"0xDEADBEEF attack" that Jim mentions, and which the spec alludes to
in section 5.5.2.  That would require generating approximately 2^64 keys,
which would be a huge effort.

Hal