Posso ottenere una chiave pubblica dalla firma PGP?

20

Ho una firma PGP di un messaggio noto. Tuttavia, non sono sicuro di chi abbia firmato.

Posso ottenere la chiave pubblica - o, almeno, l'impronta digitale / altro modo di cercarla su un server delle chiavi pubblico - solo dal messaggio e da una firma?

Esempio: ho questo messaggio / firma da qui link

-----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-----

Posso in qualche modo trovare chi l'ha firmato, solo guardandolo?

    
posta Karel Bílek 02.07.2014 - 09:02
fonte

4 risposte

18

Sì. Il formato della firma è definito in RFC 4880 . Se decodificate la base 64 e interpretate i dati, troverete che i byte dalla posizione 19 alla 26 (inclusi) sono l'ID emittente in questo caso:

ID hex: E48184B5B05676B1

che corrisponde a "ID chiave lunga" dietro il tuo link . Se si converte l'ID in base 64, lo si può trovare nei dati della firma originale, perché i 18 byte si dividono equamente in 24 caratteri base 64:

ID b64: 5IGEtbBWdrE=
Signature: iEYEARECAAYFAlHZCvgACgkQ5IGEtbBWdrF5HgCfc4xhT29ouAWdo1PMlyDKIfaq...
    
risposta data 02.07.2014 - 09:40
fonte
16

Mentre le altre risposte sono corrette, non è necessario alcun software aggiuntivo. Puoi ottenere tutte queste informazioni da gpg se aggiungi l'opzione della riga di comando -vv . (Questo significa extra verboso.) Ad esempio, il modo più semplice per ottenere informazioni dettagliate su un messaggio in formato OpenPGP è semplicemente digitare:

gpg -vv

E poi incollare il messaggio in esso (o passare un nome di file come argomento.) Ad esempio, incollare nel messaggio sopra ti dà le seguenti informazioni dettagliate e interessanti:

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

In quell'output, puoi vedere chiaramente l'ID della chiave a 16 cifre esadecimali: E48184B5B05676B1

Questo ti permetterà di cercare il firmatario in un server delle chiavi usando qualcosa come:

gpg --search-keys E48184B5B05676B1

A proposito, ho scritto la guida GPG a cui fai riferimento, e posso assicurarti che ho firmato il messaggio sopra. :)

    
risposta data 14.07.2014 - 10:08
fonte
4

Sì, lo so davvero. Con GnuPG, ad esempio:

gpg --verify file.txt

(con il file precedente)

scrive, alla fine

Primary key fingerprint: 402C C0D3 D527 13E3 FB7C 7103 E481 84B5 B056 76B1

Anche OpenPGP.js funziona.

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"

    
risposta data 02.07.2014 - 09:41
fonte
1

Sì, puoi.

Almeno puoi facilmente recuperare il KeyID e con questo puoi recuperare la chiave pubblica da un server delle chiavi (se l'utente l'ha mai caricato).

Puoi recuperare KeyID usando pgpdump (localmente se lo installi o tramite il sito web: link )

Ad esempio, il messaggio che hai postato è firmato da:

Sub: issuer key ID(sub 16)(8 bytes) Key ID - 0xE48184B5B05676B1

e infine: link per ottenere la chiave oi dettagli della chiave (puoi usa anche l'installazione di gnupg per ottenere i dati dalla riga di comando)

    
risposta data 02.07.2014 - 09:42
fonte

Leggi altre domande sui tag