¿Puedo obtener una clave pública de la firma PGP?

19

Tengo una firma PGP de un mensaje conocido. Sin embargo, no estoy seguro de quién lo firmó.

¿Puedo obtener la clave pública, o, al menos, la huella digital u otra forma de buscarla en un servidor de claves públicas, solo desde el mensaje y una firma?

Ejemplo: tengo este mensaje / firma desde aquí enlace

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


I vote YES on this important measure.

Alan Eliasen
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.13 (GNU/Linux)

iEYEARECAAYFAlHZCvgACgkQ5IGEtbBWdrF5HgCfc4xhT29ouAWdo1PMlyDKIfaq
pGoAoKig5sCXukrPPoKC1ZYB5CW7BzNL
=WPPL
-----END PGP SIGNATURE-----

¿Puedo encontrar de alguna manera a quién lo firmó con solo mirarlo?

    
pregunta Karel Bílek 02.07.2014 - 09:02
fuente

4 respuestas

18

Sí. El formato de la firma se define en RFC 4880 . Si decodifica la base-64 e interpreta los datos, encontrará que los bytes desde la posición 19 a 26 (inclusive) son el ID del emisor en este caso:

ID hex: E48184B5B05676B1

que coincide con la "ID de clave larga" detrás de su enlace . Si convierte el ID a la base 64, puede encontrarlo en los datos de la firma original, ya que los 18 bytes se dividen uniformemente en 24 caracteres base 64:

ID b64: 5IGEtbBWdrE=
Signature: iEYEARECAAYFAlHZCvgACgkQ5IGEtbBWdrF5HgCfc4xhT29ouAWdo1PMlyDKIfaq...
    
respondido por el otus 02.07.2014 - 09:40
fuente
16

Mientras que las otras respuestas son correctas, no necesita software adicional. Puede obtener toda esta información de gpg si agrega el interruptor de línea de comando -vv . (Esto significa información detallada adicional). Por ejemplo, la forma más fácil de obtener información detallada sobre un mensaje con formato OpenPGP es simplemente escribir:

gpg -vv

Y luego pegue el mensaje en él (o pase un nombre de archivo como argumento). Por ejemplo, pegar en el mensaje anterior le brinda la siguiente información detallada e interesante:

gpg: armor: BEGIN PGP SIGNED MESSAGE
gpg: armor header: Hash: SHA1
:packet 63: length 19 - gpg control packet
gpg: armor: BEGIN PGP SIGNATURE
gpg: armor header: Version: GnuPG v1.4.13 (GNU/Linux)
:literal data packet:
    mode t (74), created 0, name="",
    raw data: unknown length
gpg: original file name=''

I vote YES on this important measure.

Alan Eliasen
:signature packet: algo 17, keyid E48184B5B05676B1
    version 4, created 1373178616, md5len 0, sigclass 0x01
    digest algo 2, begin of digest 79 1e
    hashed subpkt 2 len 4 (sig created 2013-07-07)
    subpkt 16 len 8 (issuer key ID E48184B5B05676B1)
    data: [159 bits]
    data: [160 bits]
gpg: Signature made Sun 07 Jul 2013 12:30:16 AM MDT using DSA key ID B05676B1
gpg: using PGP trust model
gpg: key 92F88CF9: accepted as trusted key
gpg: key 6C77A726: accepted as trusted key
gpg: Good signature from "Alan Eliasen (http://futureboy.homeip.net/) <[email protected]>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 402C C0D3 D527 13E3 FB7C  7103 E481 84B5 B056 76B1
gpg: textmode signature, digest algorithm SHA1

En esa salida, puede ver claramente la identificación de la clave de 16 dígitos hex: E48184B5B05676B1

Eso le permitirá buscar al firmante en un servidor de claves usando algo como:

gpg --search-keys E48184B5B05676B1

Por cierto, escribí la guía GPG a la que hace referencia, y puedo asegurarle que firmé el mensaje anterior. :)

    
respondido por el Alan Eliasen 14.07.2014 - 10:08
fuente
4

Sí, en realidad puedo. Con GnuPG, por ejemplo:

gpg --verify file.txt

(con el archivo anterior)

escribe, al final

  

Huella digital de la llave principal: 402C C0D3 D527 13E3 FB7C 7103 E481 84B5 B056   76B1

OpenPGP.js también funciona.

openpgp.cleartext.readArmored(

['-----BEGIN PGP SIGNED MESSAGE-----',
'Hash: SHA1',
'',
'',
'I vote YES on this important measure.',
'',
'Alan Eliasen',
'-----BEGIN PGP SIGNATURE-----',
'Version: GnuPG v1.4.13 (GNU/Linux)',
'',
'iEYEARECAAYFAlHZCvgACgkQ5IGEtbBWdrF5HgCfc4xhT29ouAWdo1PMlyDKIfaq',
'pGoAoKig5sCXukrPPoKC1ZYB5CW7BzNL',
'=WPPL',
'-----END PGP SIGNATURE-----']. join('\n')

).getSigningKeyIds()[0].toHex();

= >

  

"e48184b5b05676b1"

    
respondido por el Karel Bílek 02.07.2014 - 09:41
fuente
1

Sí, puedes.

Al menos puede recuperar fácilmente el KeyID y con eso puede recuperar la clave pública de un servidor de claves (si el usuario lo ha subido alguna vez).

Puede recuperar el KeyID usando pgpdump (localmente si lo instala o mediante el sitio web: enlace )

Por ejemplo, el mensaje que publicaste está firmado por:

  

Sub: ID de clave de emisor (sub 16) (8 bytes) ID de clave - 0xE48184B5B05676B1

y finalmente: enlace para obtener la clave o los detalles clave (puede también use la instalación de gnupg para obtener los datos de la línea de comandos)

    
respondido por el ddddavidee 02.07.2014 - 09:42
fuente

Lea otras preguntas en las etiquetas