Ispettore di chiavi OpenPGP e analizzatore di pacchetti

Incolli una chiave, una firma o un messaggio OpenPGP in armatura — oppure carichi un file .gpg binario — e veda l'impronta digitale, l'ID chiave, gli ID utente, le sottochiavi, i pacchetti di firma e l'albero grezzo dei pacchetti. Interamente nel suo browser; nulla viene caricato.
Solo analisi. Questo strumento decodifica e visualizza i dati OpenPGP — non verifica mai crittograficamente le firme, non decifra mai e non chiede mai passphrase. Per verificare o decifrare davvero, usi GnuPG (gpg --verify, gpg -d) con il suo portachiavi. E come per qualsiasi strumento: le chiavi private reali appartengono al portachiavi, non a una scheda del browser.
Accetta ogni tipo di armatura: PUBLIC KEY BLOCK, PRIVATE KEY BLOCK, MESSAGE, SIGNATURE, ARMORED FILE.
esportazione di portachiavi binario / .sig / .gpg — letto localmente, mai caricato
Cosa verifica questo strumento — e cosa non fa deliberatamente
Decodifica l'armatura (etichetta, intestazioni, payload base64, la somma di controllo di trasporto CRC-24), analizza ogni pacchetto nei formati di intestazione vecchio e nuovo, legge i pacchetti di chiave v4/v5/v6 (algoritmo, dimensioni MPI, data di creazione), calcola le impronte v4 (SHA-1) e v6 (SHA-256), ricava gli ID chiave, elenca gli ID utente, le sottochiavi e i sottopacchetti di firma. Non verifica le firme (ciò richiede l'intero meccanismo di hash e verifica della RFC 9580 §5.2.4 più un portachiavi fidato), non decifra e non scarica chiavi dai server di chiavi. Confronti ogni output con GnuPG: gpg --show-keys file.asc stampa impronta e ID utente, gpg --list-packets file.asc mostra la struttura dei pacchetti.
Chiavi di esempio in questa pagina — i quattro pulsanti Esempio incollano una vera chiave OpenPGP v4 RSA-2048 generata solo per questa pagina (mai usata altrove). L'esempio di chiave privata è memorizzato non cifrato (uso S2K 0) di proposito, così l'analizzatore può mostrare il layout degli MPI segreti; una chiave privata esportata reale mostrerebbe invece il suo cifrario e la derivazione S2K.
Autotest
Riesegue l'analizzatore sulla chiave di esempio incorporata, su una firma staccata e su un messaggio firmato: etichette di armatura, verifica CRC-24 e corruzione deliberata, sequenze di tag dei pacchetti, impronta v4 e ID chiave confrontati con valori calcolati indipendentemente, ID utente, impronte delle sottochiavi, rilevamento della chiave segreta, più test negativi (input spazzatura e pacchetti troncati devono essere rifiutati). Nulla viene inviato da nessuna parte.
OpenPGP spiegato da zero
In una frase: OpenPGP è uno standard aperto (RFC 4880, aggiornato dalla RFC 9580 nel 2024) per la cifratura end-to-end e le firme digitali, usato soprattutto per proteggere la posta elettronica — e tutto viaggia in piccoli pacchetti binari etichettati, di solito racchiusi in uno strato di «armatura» compatibile con il testo.
Che cos'è OpenPGP?

PGP ("Pretty Good Privacy") è stato rilasciato da Phil Zimmermann nel 1991 come programma che chiunque poteva usare per cifrare e firmare i messaggi. Per uscire dal problema di un unico fornitore, il formato dei messaggi è stato standardizzato come OpenPGP (RFC 2440 nel 1998, RFC 4880 nel 2007, RFC 9580 nel 2024). Oggi GnuPG è l'implementazione più diffusa, e lo stesso formato di pacchetti compare anche nei commit git firmati, nella firma dei pacchetti software, nei server di chiavi e nel record DNS OPENPGPKEY.

Il modello è end-to-end: lei e il suo interlocutore generate ciascuno una coppia di chiavi personale; ciò che viene cifrato per lei può essere decifrato solo dalla sua chiave privata, che non lascia mai la sua macchina. Invece di un'autorità di certificazione centrale (come in TLS), la fiducia nelle chiavi altrui deriva dal firmarsi reciprocamente le chiavi — la «rete di fiducia». Se usare quella rete o semplicemente confrontare le impronte fuori banda (una telefonata, un biglietto da visita) è una sua scelta; il formato stesso non impone né l'una né l'altra.

Che cos'è una chiave OpenPGP?

Una «chiave» OpenPGP è in realtà un piccolo insieme di pacchetti: un pacchetto della chiave primaria (il punto di ancoraggio dell'identità, di solito abilitato a firmare), uno o più pacchetti ID utente («Alice <alice@example.com>»), auto-firme che legano quegli ID alla chiave primaria e, facoltativamente, sottochiavi con le proprie firme di associazione — di solito una sottochiave di cifratura separata, così che la preziosa chiave primaria possa restare offline. L'intero blocco in armatura che incolla in questa pagina è questo insieme.

L'impronta digitale è l'hash del pacchetto della chiave primaria — SHA-1 (20 byte) per le chiavi v4, SHA-256 (32 byte) per le chiavi v6 — calcolato solo sulla parte pubblica. L'ID chiave sono semplicemente gli ultimi 8 byte di un'impronta v4 (i primi 8 per la v5). Le impronte sono ciò che si confronta fuori banda per assicurarsi che nessuno abbia sostituito la chiave lungo il percorso; gli ID chiave sono un identificativo breve per i server di chiavi e non sono sicuri contro le collisioni per un attaccante determinato.

ID algoritmoNomeUso tipico in una chiave
1RSAClassico multiuso; 2048–4096 bit, firma e/o cifratura
19ECDSACurve NIST (P-256 ecc.), firma
18ECDHAccordo di chiave Curve25519/P-256, sottochiavi di cifratura
22EdDSAFirma Ed25519 (il default moderno in GnuPG 2.4+)
25X25519Sottochiavi di cifratura abbinate a chiavi primarie Ed25519 (chiavi v6)

Un blocco di chiave privata porta i numeri segreti dopo la parte pubblica: un byte di uso S2K che indica come sono protetti (0 = non protetti, 254/255 = chiave derivata da passphrase con un cifrario), poi gli MPI segreti e una somma di controllo. Questa pagina mostra quella modalità di protezione ma non chiede mai una passphrase e non tenta mai di decifrare il materiale segreto.

Che cos'è un pacchetto OpenPGP?

Sotto l'armatura, ogni oggetto OpenPGP è una sequenza di pacchetti. Ognuno inizia con un byte di tag: il vecchio formato racchiude in esso un tipo di pacchetto a 4 bit e un tipo di lunghezza, il nuovo formato (CTB, bit 6 impostato) usa un tipo a 6 bit e byte di lunghezza che possono perfino descrivere dati in blocchi parziali. Tag comuni: 6 = chiave pubblica, 5 = chiave segreta, 14 = sottochiave, 13 = ID utente, 2 = firma, 4 = firma one-pass, 11 = dati letterali, 8 = dati compressi, 18 = dati cifrati con protezione MDC. Questa pagina stampa tag, formato di intestazione, lunghezza e un dump esadecimale per ogni pacchetto trovato, e segnala un errore con la posizione del byte quando un'intestazione di pacchetto è malformata.

I pacchetti di firma portano i loro metadati in aree di sottopacchetti con hash e senza hash. Solo l'area con hash è coperta dalla firma stessa; l'area senza hash (storicamente usata per l'ID della chiave emittente) può essere riscritta liberamente da chiunque durante il transito, quindi i lettori devono trattarla come un indizio, mai come un fatto. È l'auto-firma su un ID utente a legare davvero il nome alla chiave; un pacchetto di chiave da solo, incollato da solo, non dimostra nulla su chi ne sia il proprietario.

L'armatura ASCII è il contenitore di testo: -----BEGIN PGP PUBLIC KEY BLOCK-----, intestazioni facoltative come Version: o Comment:, il base64 del flusso di pacchetti e una riga finale =xxxx che contiene un CRC a 24 bit. Quel CRC individua solo la corruzione di trasporto — cambi un carattere base64 e questa pagina lo segnala — ma non è una firma e non dimostra nulla sulla paternità.

Errori comuni
  • Fidarsi di una chiave senza confrontare le impronte. Chiunque può generare una chiave con qualsiasi nome. Il confronto dell'impronta su un canale di cui si fida già (di persona, al telefono) è l'intera fase di autenticazione.
  • Confondere il CRC dell'armatura con una firma. Un badge «CRC OK» significa solo che il base64 è sopravvissuto al viaggio, nient'altro. La verifica è un'operazione crittografica che questa pagina non esegue deliberatamente.
  • Usare gli ID chiave come identità. Gli ID chiave a 64 bit possono essere falsificati da un attaccante con una potenza di calcolo modesta (una «collisione di ID chiave»); citi sempre le impronte complete.
  • Incollare chiavi private reali nelle pagine web. Anche una pagina locale, senza caricamenti, come questa è un'abitudine da non prendere. Gli esempi qui sono chiavi usa-e-getta generate per la dimostrazione.
  • Presumere che «PGP MESSAGE» significhi cifrato. L'etichetta dell'armatura non dice nulla sul contenuto — il messaggio di esempio di questa pagina è firmato ma in chiaro, e il tag di pacchetto 18 contro 11 è ciò che distingue davvero i dati cifrati da quelli letterali.
  • Importare chiavi v3. Le chiavi di versione 3 (progetto anteriore al 1996, ID chiave deboli a 16 bit) sono obsolete dal 2014; questo ispettore le rifiuta deliberatamente.
FAQ

Questo verifica le firme? No. Analizza e visualizza. La verifica di una firma richiede la costruzione completa del trailer di hash della RFC 9580, la chiave pubblica del firmatario e una decisione sul fatto che si fidi di quella chiave — il lavoro di GnuPG o di una libreria OpenPGP.

In cosa è diverso da openpgp.js? openpgp.js è un'implementazione completa (cifra, decifra, firma, verifica) che si incorpora nella propria app; questa pagina è un ispettore senza dipendenze per leggere e verificare le strutture OpenPGP nel browser.

Può leggere il mio export di GnuPG? Sì — chiavi v4, v5 e v6, firme staccate e messaggi. Le chiavi di versione 3 vengono rifiutate con una nota (obsolete dal 2014).

Perché c'è una modalità di input esadecimale? I dati OpenPGP grezzi sono binari; se ha un dump esadecimale di un portachiavi o di un file .gpg, incolli l'esadecimale e l'analizzatore lo tratta esattamente come i byte decodificati.

Viene caricato qualcosa? No. Analisi, calcolo delle impronte e generazione del report avvengono tutti in questa scheda; la pagina viene eseguita interamente nel suo browser.