¿Cómo se realiza técnicamente la firma de una clave pública OpenPGP?

1

Recientemente he firmado la clave pública OpenPGP de un amigo mío. Curioso de ver, qué efecto tendría esto en la clave real, comparé la clave antes y después de firmarla. Lo que encontré fue que todas, excepto la última línea de la clave, no cambiaron. La última línea consistía de cinco a seis caracteres antes y después de firmarla, sin embargo, los caracteres han sido alterados. Así que mi firma de la clave de mis amigos está obviamente contenida en esta última línea.

¿Cómo y con qué información se genera realmente esta última línea? Como obviamente contiene no solo mi firma, sino también las de todas las personas que han firmado esa clave antes que yo.

    
pregunta Benedikt Bauer 28.10.2015 - 12:22
fuente

1 respuesta

1

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 .

    
respondido por el Jens Erat 28.10.2015 - 13:21
fuente

Lea otras preguntas en las etiquetas