Full Explanation:An OpenPGP key is made up of several keys: a primary key, which
is used to digitally sign things, and optionally, subkeys that
can be used to sign or encrypt things. To prove that the
subkeys "belong" to the key and were not inserted by an
attacker, they are digitally signed by the primary key. Most users use their primary key for signing, and a subkey for
encryption, and this is the default key style in both GnuPG and
PGP. Some, generally more advanced users use two subkeys: one
for encryption, and another one for signing. This allows the
user more flexibility in managing their keys, as the primary key
can then be kept off of their computer altogether. There is a subtle weakness in the OpenPGP design for signing
subkeys. Recall that subkeys are signed by the primary key to
show they belong to the primary key. However, the signing
subkey does not sign the primary to show that it is owned by the
primary. This allows an attacker to take a signing subkey and
attach it to their own key. This does not mean that an attacker can issue
signatures pretending to be someone else: the attacker cannot
issue any signatures from that subkey, as all they have is the
public half. The only thing this allows an attacker to do is to
take an existing signature issued by a signing subkey, and claim
that it was issued by the attacker's own key. The end result is
that the signature can be verified by both the actual signer's
key and the attacker's key. In practice, this can be detected
by asking the attacker to issue a new signature for you on data
that you supply (a "challenge"). The attacker, as they cannot
issue signatures from the key, will not be able to do so. The OpenPGP Working Group has defined a fix so this problem is
stopped immediately, before the attacker can even try and claim
a signature as their own. Subkey cross-certification (sometimes called "back signing")
involves the subkey issuing a signature on the primary key, just
like the primary key signature on the subkey. Since only the
true owner of the subkey can issue such a signature, the
attacker's key cannot be cross-certified. GnuPG has code for adding this cross-certification to signing
subkeys that were issued before this change to the OpenPGP
design. Just run "gpg --edit-key (yourkey)" and then enter
"cross-certify". You'll need to type your passphrase, and GnuPG
will add the cross-certification. |