Linux in Viaggio Copertina Recens. Libro |
Articoli
PGP: gestiamoci le chiavi
Nello scorso numero abbiamo visto cos'è il PGP, abbiamo creato la nostra chiave e provato ad usarlo nella posta elettronica. Vediamo adesso come gestire le chiavi pubbliche e cosa significa ``firmarle''.PGP serve ad autenticare i messaggi scritti da una persona. Come fa il destinatario (o i destinatari) ad essere sicuro di avere la giusta chiave pubblica? Non sempre è possibile riceverla personalmente.
Può succedere, infatti, che una chiave pubblica venga sostituita prima di essere distribuita con quella di una persona capace di intercettare e sostituire anche i messaggi del proprietario originale, facendosi quindi a tutti gli effetti passare per lui. Un po' complicato, vediamolo in pratica.
A crea la sua chiave pubblica e la mette in rete. B riesce ad intercettarla e sostituirla subito con un'altra fatta da lui ma dichiarata appartenente ad A.
B quindi intercetta i messaggi firmati da A, eventualmente li altera e li rifirma. Il destinatario non se ne accorge, perché ha prelevato una chiave credendola di A e in effetti per lui è tale (verifica correttamente i messaggi che crede arrivino da A).
Proprio per evitare questo, PGP mette a disposizione un potente mezzo per autenticare le chiavi.
Il fingerprint è in pratica un ``riassunto'' della chiave pubblica. È composto da 16 cifre esadecimali (128 bit) e risulta quindi semplice da stampare e/o comunicare per telefono. Ovviamente non si accettano ``fingerprint dagli sconosciuti''. Cioè non si verifica una chiave accettando un foglietto o da una telefonata qualsiasi: bisogna accertarsi dell'identità di chi comunica il proprio fingerprint, quindi tramite una tessera di riconoscimento se di persona, oppure riconoscendo la voce se per telefono. Ai ``PGP party'', di solito, si autentica una chiave solo dietro presentazione della propria carta d'identità.
Per vedere il fingerprint della propria chiave o di una chiave presente
nel proprio ``portachiavi'', si usa il comando:
tizio@host:~$ pgp -kvc utente
utente
è facoltativo, e permette di limitare il
listato alle chiavi che contengono quella stringa nello userID. Un altro
parametro utile è il file contenente le chiavi: infatti è possibile gestire
più portachiavi.
I comandi per estrarre ed inserire le chiavi li ho già mostrati:
pgp -kx utente filedest Estrae la chiave di un utente in un file pgp -kxa utente filedest Estrae la chiave in formato ascii (comodo per spedirlo in un messaggio email) pgp -kxaf utente Estrae su stdout pgp -ka nomefile Inserisce la/le chiave/i presenti in un file pgp -kaf Inserisce la chiave da stdin
Detta fin qui sembra che bisogna complicarsi con moltissime autenticazioni prima di essere sicuri di una chiave pubblica, e la cosa più difficile è che non ci si può fidare di una telefonata se non si può riconoscere la voce.
PGP possiede un metodo per semplificare tutto questo: una chiave pubblica può essere firmata da altre chiavi, e garantire la sua autenticità se si verifica anche una sola delle chiavi che hanno firmato. Rivediamo un attimo come funziona.
A crea la sua chiave, e la verifica correttamente con B. B quindi firma la chiave pubblica di A, e gliela restituisce.
C ha la chiave pubblica di B correttamente verificata, e preleva dalla rete la chiave di A firmata da B. La questione adesso non è più sull'autenticità della chiave pubblica di A, ma sulla fiducia dell'operato di B (infatti C è certo di avere la chiave di B, e questa chiave conferma la validità della chiave di A, ma quest'ultima non è stata ricevuta direttamente dalle mani di A).
La questione adesso diventa: B ha firmato la vera chiave di A?
Infatti una delle domande che fa PGP quando si include una nuova chiave, è proprio ``Ci si può fidare di questa chiave per autenticare chiavi firmate da questa?''. Naturalmente la chiave di A può essere firmata da più persone, quindi quando C la recupera da rete (un canale insicuro), può avere più possibilità di riscontrarne l'autenticità.
Durante l'inserimento di una nuova chiave, PGP chiede se la si vuole autenticare. Ovviamente la si autentifica solo se si è in possesso di informazioni sufficienti, tipo un foglietto con il fingerprint consegnato a mano dal vero possessore della chiave, oppure facendosi dettare al volo il fingerprint per telefono. Una volta verificato il fingerprint, viene chiesta la propria pass phrase per aggiungere la firma alla nuova chiave.
La firma si può sempre fare successivamente se non si può verificare subito la chiave. Questa resta pur sempre valida, anche se apparirà un avviso che la chiave non è verificata tutte le volte che verrà usata. Questo per sicurezza: in fondo si è preso una chiave, ma non si è certi di chi sia.
Per firmare e togliere le firme ad una chiave, i comandi sono:
pgp -ks altroutente Firma una chiave pgp -krs utente Elimina una firma da una chiave pgp -kvc utente Mostra alcune informazioni (fingerprint) pgp -kvv utente Mostra i firmatari di una chiave pgp -kvcv utente Informazioni e firmatari di una chiave
Un comando utile è ``pgp -ke utente
'', che
permette di verificare il grado di autenticità di una chiave. Ogni chiave
infatti può essere valida perché verificata direttamente, o grazie ad
un'altra firma più o meno valida. Permette anche di modificare il ``grado di
fiducia'' che ha una certa chiave nei confronti di altre chiavi firmate da
questa. Premendo [Invio]
si mantiene inalterato lo stato della
chiave.
Lo stesso comando permette anche di cambiare la propria pass phrase o
aggiungere altri identificativi alla propria chiave (usando come userID
quello della propria chiave): quando è necessario criptare un messaggio,
viene cercata la chiave che ha l'email di destinazione come user-id. Chi ha
più di un indirizzo email deve aggiungerli alla propria chiave con questo
comando e digitare Y
alla richiesta di aggiungere un altro
userID.
Normalmente l'aggiunta di chiavi viene eseguita sul portachiavi di
default, che in Linux si trova in $HOME/.pgp/pubring.pgp
.
Però quasi tutti (ma forse tutti) i comandi di PGP permettono di specificare un file alternativo in cui cercare e/o aggiornare le chiavi. Questo file va dato come ultimo parametro, e alla fin fine la gestione è identica a quella del portachiavi di default.
La cosa interessante è che si possono tenere alcune chiavi in portachiavi
separati, e scambiarsele con facilità. Si può anche includere un intero
portachiavi nel proprio portachiavi di default con
``pgp -ka file
''. Le chiavi già presenti non vengono
duplicate, e se ci sono nuove firme vengono aggiunte in automatico.
Se volete recuperare un po' di chiavi e fare delle prove, trovate un
portachiavi con un po' di chiavi di plutini nei mirror del Pluto, nella
directory
pluto/pluto-keyring.pgp
, e le chiavi degli sviluppatori
Debian nei mirror Debian, sotto la directory doc
.
Vediamo un attimo quali sono le operazioni semplici per usare PGP per firmare un file di testo esternamente a PGP. La cosa più semplice e portabile è quella di avere un unico file di uscita, possibilmente leggibile (ovvero non in binario criptico) e verificabile al volo.
Dato quindi un file di testo, ad esempio messaggio
, si può
ottenere un altro file di testo con lo stesso messaggio e una firma allegata
tramite il comando:
tizio@host:~$ pgp +clearsig=on -ast messaggio -o messaggio.pgp
Otterrete quindi il file messaggio.pgp
contenente il testo
firmato (ovviamente chiede la pass phrase). Potete spedirlo ovunque, e solo
se non verrà modificato, tutti i possessori della chiave pubblica potranno
verificarlo ed essere certi che l'autore è tizio. Magari vi
conviene fare uno script, comunque questa riga la trovate in
/usr/lib/pinepgp/sign
(se non avete Debian, procuratevi il
pacchetto sorgente di pinepgp
).
Per verificare la firma contenuta in un file, il modo più semplice è:
tizio@host:~$ pgp nomefile
Normalmente estrae il contenuto testuale, eventualmente chiede se
sovrascrivere il file di origine, e mostra il risultato della firma (se
valida o no). Dando l'opzione ``-f
'' (uso di pipe) potete
mandare il file originale in stdin, ottenere il testo decodificato
in stdout e lo stato della decodifica in stderr. Su
quest'ultimo è scritto se la firma è valida, non valida, manca la chiave, la
chiave non è autenticata.
Con questo articolo ho finito di descrivere i passi di base di PGP,
sapendo creare le chiavi e gestendo le firme delle stesse, l'uso vero e
proprio per firmare messaggi è spesso gestito automaticamente dal programma
di posta. Con il comando ``pgp -h
'' potete vedere molte
altre opzioni di pgp
.
Linux in Viaggio Copertina Recens. Libro |