IPISA Copertina Perl |
PGP: questo sconosciuto
Spesso si vedono vari messaggi di annunci ufficiali che iniziano con
``BEGIN PGP MESSAGE
'' o firme email
contenenti la parola ``PGP fingerprint'' e una sequenza strana
di numeri e lettere. Vediamo cos'è, a cosa serve e perché vale la pena
usarlo.
Con l'avvento dell'informatica e lo scambio di informazioni in forma elettronica, i testi hanno assunto tutti lo stesso carattere tipografico, e non è più possibile riconoscere l'autore dalla grafia usata. Diventa quindi semplice scrivere un testo a nome di altri oppure apportare modifiche e farle passare come testo scritto dall'autore originale.
Ci serve quindi un sistema per inserire una ``firma'' che convalidi il messaggio, ovvero qualcosa per cui l'autore possa dichiarare che ``è proprio lui a scrivere il messaggio'' senza ombra di dubbio. Inoltre questa ``firma'' deve essere verificabile in qualsiasi momento col massimo della garanzia.
Proprio ad autenticare l'autore del messaggio e il messaggio stesso viene
in aiuto PGP (Pretty Good Privacy). In pratica al messaggio originale
vengono aggiunte alcune righe generate dall'autore tramite il programma
pgp
. Solo il vero autore e il messaggio esatto possono generare
una certa firma, una piccolissima modifica del messaggio o un'altra persona
non possono generare una firma ugualmente valida.
Questa ``firma'' poi è facilmente verificabile, e può confermare chi è l'autore della firma stessa e se il messaggio verifica la firma allegata.
PGP si basa su una coppia di ``chiavi''. Queste chiavi elettroniche sono univoche e intercambiabili, e non è possibile da una chiave risalire all'altra direttamente: bisogna andare a tentativi, e in media il tempo necessario è talmente elevato (dell'ordine delle migliaia di anni, usando batterie di calcolatori) da rendere proibitivo un simile tentativo.
Una di queste chiavi rimane sicura e protetta dal possessore. Normalmente viene codificata con una ``pass-phrase'', in modo tale da essere inutilizzabile se per un malaugurato caso finisse in mano a terzi.
L'altra chiave, invece, deve essere più diffusa possibile, in base agli interessi del proprietario. Più è diffusa, meno probabile è che qualcuno la possa sostituire e possa intromettersi nelle comunicazioni intercettando messaggi e sostituendo opportunamente la firma facendo credere di essere l'autore originale.
Questo è il punto debole del PGP: la diffusione della chiave pubblica. Chi riceve la chiave via internet, o un altro canale ugualmente insicuro, deve verificare che appartenga effettivamente al proprietario. Vedremo come in seguito, intanto sappiate che PGP dispone già di un sistema per ricordarsi se la chiave è verificata. Questo perché normalmente le chiavi pubbliche vengono trasmesse tramite canali insicuri (tipo Internet) e raramente consegnate a mano su dischetto. Nella maggior parte dei casi infatti si consegna a mano solo un foglio contenente il fingerprint, o si comunica quest'ultimo tramite telefono.
L'utente A ha creato la sua coppia di chiavi, ed ha consegnato un foglietto con la chiave pubblica a B in modo che questi possa prelevare da rete la chiave di A ed accertarsi che sia esattamente la chiave di A.
A questo punto, A può scrivere i propri messaggi tranquillamente col suo programma di posta. Al momento della spedizione gli viene chiesto di firmare il messaggio. A quindi digita la propria ``pass-frase'' e il messaggio viene firmato e spedito.
Appena il messaggio arriva a B, il suo programma di posta si accorge della presenza di una firma PGP, quindi analizza la firma, cerca la chiave di A, verifica il messaggio e se la chiave è sicura, poi alla fine del messaggio mostra ``Good signature from A''. A questo punto B ha la certezza che l'autore del messaggio è proprio A.
B possono essere anche più persone, come gli iscritti ad una mailing list, l'importante è che tutti abbiano ricevuto in modo sicuro la chiave pubblica di A.
Con la chiave privata quindi si può applicare una firma al messaggio e tutti quelli che hanno la chiave pubblica possono verificare l'autenticità del messaggio.
PGP permette anche di criptare i messaggi, in modo che possano essere letti solo da una persona. Nel nostro esempio, B ha la chiave pubblica di A. Quando scrive il suo messaggio, dice al programma di posta di criptare il messaggio con la chiave pubblica di A.
Quando A apre il messaggio, il programma di posta si accorge del messaggio criptato, chiede la ``pass-frase'' della chiave privata, e tramite questa decodifica il messaggio. Quindi tramite la chiave pubblica è possibile criptare un messaggio e fare in modo che solo il possessore della corrispondente chiave privata possa leggerlo.
Firma e criptatura possono essere anche combinate insieme: se A e B si sono scambiati in modo sicuro le rispettive chiavi pubbliche, A può firmare il messaggio con la propria chiave privata e criptarlo con la chiave pubblica di B. A sua volta, solo B può leggere il messaggio (è il possessore della chiave privata) ed avere la certezza che l'autore è A, visto che la firma viene verificata dalla chiave pubblica di A.
Facciamo alcune ipotesi di partenza: gli utenti di questo esempio hanno
un sistema Linux funzionante, pgp
installato e usano un
programma di posta già interfacciato a PGP.
Io uso Debian 1.3.1 come distribuzione. Il pacchetto
pgp
si trova nei mirror non-us di Debian (trovate la
lista nell'apposito README
dei mirror Debian) come anche nel
CDROM del Pluto. Come programma di posta uso pine
con
l'aggiunta del pacchetto pinepgp
. Quest'ultimo pacchetto
contiene 4 script per la codifica/decodifica automatica dei messaggi con
pgp
. L'inserimento di questi script in pine
è
descritto in /usr/doc/pinepgp/README.debian
.
La versione di pgp
che vi consiglio è la 2.6.3, o comunque
assicuratevi che la chiave e/o le firme generate siano compatibili con
questa versione di pgp
. Il pacchetto Debian che ho installato
io si chiama pgp-i_2.6.3a-1.deb
. Dovrebbe esserci un pacchetto
di pgp
anche per RedHat, provate a vedere in
ftp://ftp.replay.com
. Per altre distribuzioni, se non hanno già
il pacchetto binario pronto, non vi resta altro che ricompilarlo.
Creiamo la directory .pgp
nella home:
tizio@host:~$ mkdir .pgp
tizio@host:~$ chmod 0700 .pgp
E adesso la chiave:
tizio@host:~$ pgp -kg
La prima domanda riguarda la dimensione della chiave. Oggi tutti usano chiavi da 1024 bit. Sono più lente da gestire delle chiavi da 512 e 768 bit, ma ormai con i computer di oggi questi tempi sono accettabilissimi. Selezionate quindi ``3''.
Serve poi un ``user ID''. Questo serve ad identificare il
proprietario della chiave. Appare sempre come conferma della chiave nella
verifica dei messaggi e viene usato dai programmi di posta quando deve
cercare la chiave del destinatario del messaggio da criptare. Generalmente
contiene il nome e cognome del possessore, più l'email principale. Nel
nostro esempio, un buon user ID può essere:
Tizio Rossi <tizio@host.domain.com>
La domanda successiva è la ``pass phrase''. Questa serve a tenere protetta ulteriormente la chiave privata. È una bruttissima idea (e tutti lo sconsigliano) di tenere la chiave privata in computer accessibili da più utenti. La pass phrase evita che se questa capitasse in mani altrui, possa essere usata per firmare messaggi o intercettare messaggi criptati.
Servono poi dei tasti casuali. pgp
usa il tempo che
intercorre tra un tasto e l'altro per generare sequenze casuali ed ottenere
una coppia di chiavi migliore. Divertitevi :-)
Fatto questo basta lasciar macinare pgp
per pochi secondi, e
le chiavi sono pronte.
Adesso basta solo prendere la chiave pubblica e renderla disponibile in
qualche modo. Intanto estraiamola su un file. Un buon posto è generalmente
il proprio .plan
. Oltre alla chiave in formato ascii, estraiamo
anche il ``fingerprint''. Il fingerprint è in pratica un
``riassunto'' della chiave pubblica. Serve per poterselo comunicare più
agevolmente tramite telefono o a voce, e verificare l'autenticità della
chiave ottenuta da rete (ottenuta quindi in modo insicuro).
tizio@host:~$ pgp -kvc tizio >> .plan
tizio@host:~$ pgp -kxaf tizio >> .plan
Se adesso guardate il file .plan
(che poi dovete ricopiare
su un server in rete, al momento lavoriamo sul PC di casa o di ufficio ben
protetto), troverete il vostro user ID con altre informazioni,
tipo la data di creazione e il numero della chiave, e nella riga sottostante
il fingerprint della chiave stessa.
Questo file vi conviene metterlo in un posto facilmente accessibile dal resto del mondo. Inoltre è buona cosa stamparlo e consegnarlo a mano a quanta più gente possibile.
Immaginiamo adesso che anche Caio abbia creato la propria coppia
di chiavi. E abbia prelevato dalla rete (per il momento) la chiave pubblica
di Tizio nel file tiziopgp
. Quindi la inserisce nel
suo portachiavi (keyring).
caio@host2:~$ pgp -ka tiziopgp
Si può anche scaricare la chiave direttamente da rete, con il
comando:
caio@host2:~$ finger tizio@host.domain.com | pgp -kaf
Usando il secondo comando, non sarà chiesto niente, ma con il primo,
pgp
chiede di certificare la chiave. Niente di preoccupante. Se
non ci sono elementi di controllo (come stiamo supponendo adesso), si
risponde ``n'' (o direttamente ``Invio'').
Se invece si digita ``y'', viene mostrato il fingerprint della chiave, che si deve verificare o da una stampa consegnata direttamente dalle mani di Tizio, oppure comunicandosela tramite telefono (riconoscendo ovviamente la voce o altri elementi). Vengono mostrati anche altri elementi, tipo altri firmatari della chiave con il loro grado di autenticazione.
Solo se Caio è sicuro che la chiave è valida, digita ``y''. Viene chiesta la pass phrase (della chiave privata di Caio), e viene aggiunta una ``firma'' alla chiave pubblica di Tizio. In questo modo la chiave pubblica di Tizio è pienamente verificata da Caio. Vedremo cosa significa verificare le chiavi e come funziona il metodo nel prossimo numero del Pluto Journal.
Se Caio non autentica la chiave di Tizio, non ci sono problemi: la chiave pubblica di Tizio continuerà a funzionare, ma ogni volta che viene usata apparirà un messaggio che avvisa del fatto che la chiave non è stata verificata. In particolare viene chiesta un'ulteriore conferma al momento di criptare messaggi.
Adesso Tizio prende il suo programma di posta. Scrive il messaggio
normalmente e dà il comando di spedizione. Usando pine
, dopo il
comando di spedizione, appare la solita richiesta di conferma.
Insieme alla domanda di conferma, viene chiesto un eventuale filtro
(assumendo che usiate pine
configurato per usare gli script di
pinepgp
). I filtri si possono scegliere mediante i tasti
[^P]
e [^N]
, e dalla configurazione di
pine
potete anche definire se usare di default uno dei
filtri.
I filtri a disposizione di pine
per spedire messaggi firmati
sono 3:
sign
: aggiunge la firma PGP;
crypt
: firma e cripta con la chiave del destinatario;
auto
: in base al contenuto di alcuni file della propria
home e del destinatario, decide automaticamente se firmare il messaggio ed
eventualmente criptarlo.
Dopo aver confermato la spedizione tramite un filtro di pgp
,
viene chiesta la pass phrase della chiave privata, e inserita questa
il messaggio viene firmato e spedito.
Appena Caio riceve il messaggio, pine
si accorge che il
messaggio è firmato, e tenta di decodificare la firma. Possono succedere
questi casi:
In questo articolo ho affrontato le tematiche di base sul PGP. Ci sono molte altre fonti di informazione su questo.
In particolare, per scoprire le varie opzioni di pgp
,
digitate pgp -h
.
Nel prossimo numero del Pluto Journal parlerò del complesso sistema di gestione delle chiavi pubbliche con la firma reciproca delle stesse e autenticazioni varie.
Il sito web dipgp
è http://www.pgp.com
.
IPISA Copertina Perl |