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.

Documenti elettronici

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.

Funzionamento in breve del PGP

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.

Come si firma e come avviene la verifica

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.

Ma possiamo anche criptare!

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.

Passiamo al pratico

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 chiave

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.

Preleviamo la chiave pubblica

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.

Scriviamo messaggi di posta

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:

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:

Nella prossima puntata...

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 di pgp è http://www.pgp.com.

di Michele Dalla Silvestra


IPISA Copertina Perl