Una firma digitale certifica e appone la data ad un documento. Se il documento viene successivamente modificato in qualsiasi modo, una verifica della firma fallirà. Una firma digitale può servire allo stesso scopo per il quale si utilizza una firma fatta a mano con l'ulteriore beneficio di essere a prova di manomissione. La distribuzione dei sorgenti di GnuPG, per esempio, è firmata in modo tale da permettere agli utenti di verificare che il codice sorgente non sia stato modificato dal momento in cui è stato creato il pacchetto.
La creazione e la verifica di firme utilizzano la coppia di chiavi pubblica/privata in modo differente da quanto fanno le operazioni di cifratura e decifratura. Una firma è fatta utilizzando la chiave privata di colui che firma. La firma viene verificata utilizzando la corrispondete chiave pubblica. Per esempio Alice userebbe la propria chiave privata per firmare digitalmente il suo ultimo lavoro per la rivista di chimica inorganica. Il corrispondente editore nel pubblicare il lavoro userebbe la chiave pubblica di Alice per controllare la firma e verificare che il pezzo sia effettivamente stato mandato da Alice e che non sia stato modificato dal momento in cui Alice l'ha spedito. Una conseguenza dell'utilizzo di firme digitali consiste nel fatto che è difficile negare di aver fatto una firma digitale in quanto ciò implicherebbe che la propria chiave privata era stata compromessa.
L'opzione a linea di comando --sign viene usata per fare firme digitali. Il documento da firmare è l'ingresso, quello firmato è l'uscita.
alice% gpg --output doc.sig --sign doc Ti serve una passphrase per sbloccare la chiave segreta dell'utente: "Alice (giudice) <alice@cyb.org>" chiave DSA di 1024 bit, ID BB7576AC, creata il 1999-06-04 Inserisci la passphrase: |
Dato un documento firmato, è possibile sia controllare la firma che controllare la firma e recuperare il documento originale. Per controllare la firma si utilizza l'opzione --verify. Per verificare la firma ed estrarre un documento si usa l'opzione --decrypt. Il documento firmato da verificare e recuperare è l'ingresso, mentre il documento recuperato è l'uscita.
blake% gpg --output doc --decrypt doc.sig gpg: Firma fatta ven 04 feb 1999 12:02:38 CDT usando la chiave DSA con ID BB7576AC gpg: Firma valida da "Alice (giudice) <alice@cyb.org>" |
Un uso comune di firme digitali consiste nel firmare messaggi per Usenet o messaggi di posta elettronica. In tali situazioni non è desiderabile comprimere il documento quando lo si firma. L'opzione --clearsign avvolge il documento in una firma ASCII-armored ma non lo modifica in nessun altro modo.
alice% gpg --clearsign doc Ti serve una passphrase per sbloccare la chiave segreta dell'utente: "Alice (giudice) <alice@cyb.org>" chiave DSA di 1024 bit, ID BB7576AC, creata il 1999-06-04 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 [...] -----BEGIN PGP SIGNATURE----- Version: GnuPG v0.9.7 (GNU/Linux) Comment: For info see http://www.gnupg.org iEYEARECAAYFAjdYCQoACgkQJ9S6ULt1dqz6IwCfQ7wP6i/i8HhbcOSKF4ELyQB1 oCoAoOuqpRqEzr4kOkQqHRLE/b8/Rw2k =y6kj -----END PGP SIGNATURE----- |
Un documento firmato ha un'utilità limitata. Gli altri utenti devono recuperare il documento originale dalla versione firmata e, anche con documenti firmati in chiaro, il documento firmato deve essere editato per poter recuperare l'originale. Esiste perciò un terzo metodo per firmare un documento. Con tale metodo viene creata una firma distaccata in un file separato. Una firma distaccata viene creata utilizzando l'opzione --detach-sig.
alice% gpg --output doc.sig --detach-sig doc Ti serve una passphrase per sbloccare la chiave segreta dell'utente: "Alice (giudice) <alice@cyb.org>" chiave DSA di 1024 bit, ID BB7576AC, creata il 1999-06-04 Inserisci la passphrase: |
Sia il documento che la firma distaccata sono necessarie per verificare la firma stessa. L'opzione --verify può essere utilizzata per controllare la firma.
blake% gpg --verify doc.sig doc gpg: Firma fatta ven 04 feb 1999 12:38:46 CDT usando la chiave DSA con ID BB7576AC gpg: Firma valida da "Alice (giudice) <alice@cyb.org>" |