Al firmar una clave OpenPGP se agrega un paquete de firma , calculado sobre la huella digital de la clave del firmante y uno de sus identificaciones de usuario. Puede observar fácilmente este gpg --export [signee's key id] | gpg --list-packets
en ejecución (la salida puede ser bastante masiva para claves con un número mayor de firmas, considere usar less
o una herramienta similar para poder buscar y desplazar la salida), que muestra detalles bastante técnicos en la llave Un ejemplo (una firma emitida por CAcert en mi propia clave OpenPGP):
:public key packet:
version 4, algo 1, created 1356475387, expires 0
pkey[0]: [8192 bits]
pkey[1]: [17 bits]
keyid: 4E1F799AA4FF2279
:user ID packet: "Jens Erat (born 1988-01-19 in Stuttgart, Germany)"
[snip, self-signatures omitted as irrelevant in this example]
:signature packet: algo 17, keyid D2BB0D0165D0FD58
version 4, created 1356531044, md5len 0, sigclass 0x10
digest algo 2, begin of digest 0b cc
hashed subpkt 2 len 4 (sig created 2012-12-26)
critical hashed subpkt 3 len 4 (sig expires after 1y1d0h0m)
hashed subpkt 26 len 29 (policy: http://www.cacert.org/cps.php)
subpkt 16 len 8 (issuer key ID D2BB0D0165D0FD58)
data: [160 bits]
data: [157 bits]
En otras palabras: la clave pública real no se modifica, pero se agrega un nuevo paquete que contiene la firma (o posiblemente varios paquetes, si firmó varias ID de usuario).
La última línea constaba de cinco a seis caracteres antes y después de firmarla, sin embargo, los caracteres se han alterado. Así que mi firma de la clave de mis amigos está obviamente contenida en esta última línea.
Los últimos caracteres contienen una suma de comprobación CRC-24. Si esto cambia, algo más debe haber cambiado. Intente inspeccionar ambas exportaciones antes y después de agregar la firma usando diff
.