LinuxDay 2004 - Linux - Storia e caratteristiche vincenti - slides
LinuxBeach 2006 - Criptografia e firma digitale con GnuPG - trascrizione
1. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
CRIPTOGRAFIA E FIRMA DIGITALE
con
GnuPG
- USARE LA POSTA ELETTRONICA IN PIENA
SICUREZZA -
Maurizio “maury” Antonelli
http://www.maury.it
Some rights reserved: http://www.maury.it#licenza 1
2. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
La presente conferenza l'ho tenuta per la prima volta a San Benedetto del Tronto (AP) in occasione
del Linux Beach 2006.
Oltre che come documentazione per gli interessati, spero vivamente che possa far aumentare la
consapevolezza della non sicurezza dello strumento “posta elettronica” e contribuisca a far adottare
agli utenti gli adeguati strumenti di implementazione.
Some rights reserved: http://www.maury.it#licenza 2
3. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Iniziamo con questo concetto fondamentale: “La posta elettronica non è uno strumento sicuro”.
Infatti, quasi tutte le e-mail che viaggiano in rete sono in chiaro, senza alcuna forma di codifica.
Come ben saprete, un messaggio di posta elettronica, da quando parte dal PC del suo mittente a
quando arriva al PC del suo destinatario, attraversa diverse macchine in rete, ognuna delle quali si
occupa di “instradarlo” nella giusta direzione. Chiunque si trovi ai comandi di una qualsiasi di
queste macchine può quindi visualizzare (sniffare) questi messaggi, con grande rischio per la
privacy del mittente e del destinatario.
Ancora: viaggiano in chiaro anche UserID e Password nella fase di autenticazione ai server POP3
(posta in entrata) e SMTP (posta in uscita). Per questo motivo è sempre buona norma utilizzare dei
server che forniscano il servizio di autenticazione tramite criptazione in TSL o in SSL, onde evitare
che qualcuno prenda il controllo della propria casella e-mail.
Altro problema: il mittente di un'e-mail non è mai garantito. Con pochissimi accorgimenti si può far
credere ai più sprovveduti di essere chiunque.
Some rights reserved: http://www.maury.it#licenza 3
4. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Ecco qui un esempio con Mozilla Thunderbird. Nella configurazione degli account di posta
chiunque può impostare un falso mittente. Posso far credere a chiunque di essere un'autorità, una
banca o qualsiasi altra cosa. Semplicemente così posso “imbrogliare” tranquillamente il 90%-95%
degli utenti. In pochi saranno in grado di accorgersi delle anomalie che saranno ancora presenti
comunque negli header del messaggio di posta. Ulteriori trucchetti, che non illustro qui, possono far
scomparire anche queste restanti tracce... Et voilà... Il gioco è fatto.
Some rights reserved: http://www.maury.it#licenza 4
5. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Iniziamo con il criptare la posta. In questo modo potrà leggere correttamente il nostro messaggio
solo chi vorremo noi.
Il mondo da sempre è pieno di sistemi di codifica. I più semplici: anagrammare le parole, sostituire i
caratteri e molti altri metodi, più o meno sofisticati.
Facciamo un esempio:
la nostra e-mail viaggerà in rete sotto forma di byte, sotto forma di valori X compresi tra 0 e 255.
Sostituiamo a questi valori X i valori X+2 per X compreso tra 0 e 253. Sostituiamo poi a 254 e 255
rispettivamente 0 e 1. Abbiamo appena inventato una chiave di codifica. Solo chi possiederà questa
chiave (perché l'ha avuta da me o perché l'ha scoperta) sarà in grado di capire il contenuto del
messaggio, gli altri no.
Questo è un semplicissimo esempio di codifica. Molti bambini, anche nelle più giovani età, si
divertono ad inventare sistemi così semplici per trasmettersi i propri segreti o semplicemente per
proteggerli. Personalmente trovo i sistemi di codifica anche una cosa molto divertente ed
appassionante.
Some rights reserved: http://www.maury.it#licenza 5
6. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Quello illustrato sopra è un semplice esempio di codifica a chiave simmetrica: mittente e
destinatario useranno la stessa chiave, il primo per codificare ed il secondo per decodificare.
Non è un sistema utile per quello che sarà il nostro scopo, poiché non sarà un sistema estendibile a
terzi. Se, infatti, un utente A ed un utente B utilizzano una chiave di codifica per le proprie
comunicazioni, questa non potrà essere utilizzata da A con l'utente C. Infatti, decaderebbe la
privacy tra A e B.
Se l'utente A, per superare questo problema, inventasse ed utilizzasse una chiave per ogni altro
utente, avrebbe da gestire un numero enorme di sistemi di codifica e ben presto il sistema
diventerebbe difficilmente gestibile.
Some rights reserved: http://www.maury.it#licenza 6
7. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Soluzione al problema: il certificato a chiave asimmetrica.
Verrà adottato un sistema che utilizzerà un certificato composto da due chiavi distinte, una privata
ed una pubblica.
Some rights reserved: http://www.maury.it#licenza 7
8. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
La chiave privata dovrà rimanere esclusivamente nelle mani del proprietario del certificato. Andrà
conservata con assoluta attenzione. Verrà utilizzata dall'utente possessore per decriptare i messaggi
che saranno indirizzati a lui ed in più sarà utilizzata per apporre al messaggio una firma digitale che
ne garantirà la reale identità del mittente.
La chiave pubblica potrà, invece, essere distribuita al mondo intero, senza il rischio di incorrere in
alcun pericolo. Essa verrà utilizzata per criptare i messaggi indirizzati al proprietario del relativo
certificato; solo il possessore della relativa chiave privata potrà decriptare il messaggio. Chiunque
altro vedrà una serie di byte/caratteri senza alcun significato. Inoltre, verrà utilizzata per verificare
la firma digitale che è stata apposta con la chiave privata.
La chiave pubblica potrà essere distribuita senza controllo a chiunque. Il fatto che cada in mani
estranee non costituirà alcun pericolo. La massima attenzione dovrà essere rivolta esclusivamente
alla chiave privata, che dovrà rimanere rigorosamente nelle mani del leggittimo proprietario. Se
quest'ultima non cadrà in mani estranee, il sistema sarà sicuro al 100% (anche se in molti
dipartimenti di matematica stanno continuando a verificarne la totale sicurezza).
Se i concetti esposti fin qui sono ben chiari, il resto ora sarà tutto in discesa.
Some rights reserved: http://www.maury.it#licenza 8
9. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Proviamo a capire come possa funzionare un certificato a chiave asimmetrica. L'esempio che segue
non è applicabile per quelle che saranno le nostre finalità, però dà un'idea chiara di come in
matematica esistano delle funzioni non biunivoche adatte allo scopo.
Immaginiamo di dover trasmettere questi dati: 4, -2, -1 e 5. Ora la chiave pubblica, con cui cripterò
la sequenza dei quattro numeri, consisterà nell'elevare al quadrato ognuno di essi. Avremo così: 16,
4, 1 e 25. Un altro utente che avrà in mano soltanto questa chiave pubblica sarà in grado di
decriptare i dati? La risposta è no. Infatti, partiamo dal primo dato: 16. Sappiamo, dalla chiave
pubblica, che è il risultato di un numero che è stato elevato al quadrato. Operazione inversa: la
radice quadrata; ma la radice quadrata di 16 non è univoca. Il risultato è sì 4, ma è anche -4. Come
facciamo a sapere quale dei due prendere? Con la sola chiave pubblica non possiamo.
Some rights reserved: http://www.maury.it#licenza 9
10. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Come detto sopra, l'esempio non è utilizzabile: il procedimento di criptazione è troppo semplice per
essere efficiente; però rende molto bene l'idea di come funzioni matematiche non invertibili
maggiormente complicate, possano essere utilizzate per il nostro fine.
Trovando delle funzioni molto più adatte, posso raggiungere il mio scopo: creare un certificato a
doppia chiave con cui poter criptare con la pubblica e poter decriptare solo ed esclusivamente
con la privata.
A questo punto distribuirò la chiave pubblica e chiunque potrà criptarci i messaggi a me indirizzati.
Solo ed esclusivamente io, possessore della relativa chiave privata, potrò decifrare le e-mail.
Some rights reserved: http://www.maury.it#licenza 10
11. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Ora vediamo un altro possibile utilizzo di un certificato a chiave asimmetrica. Immaginiamo di
poter effettuare un'operazione tramite la chiave privata su di un messaggio scritto da me. Questa
operazione, tenendo conto del mittente e di ogni singolo carattere che compone il messaggio, darà
un risultato univoco che potrà essere ottenuto solo ed esclusivamente se la suddetta operazione sia
stata effettuata con la mia chiave privata. Il risultato sarà una sorta di checksum, poiché tiene conto
di tutti i singoli byte che compongono la mail. Se il mittente fosse un altro o se un solo carattere
fosse differente, la checksum sarebbe diversa.
Some rights reserved: http://www.maury.it#licenza 11
12. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Chi è in possesso della chiave pubblica non potrà effettuare la stessa operazione ottenendo lo stesso
risultato, però potrà effettuare una verifica sul fatto che quel risultato può averlo prodotto solo ed
esclusivamente la chiave privata ad essa collegata.
Ho appena trovato il sistema per firmare digitalmente il mio messaggio: esso è stato inviato
sicuramente dal proprietario della chiave privata; in più, tramite la checksum, posso essere anche
sicuro che durante il suo tragitto la mail non ha subito alterazioni di alcun genere; nemmeno un
carattere è stato modificato.
Ora c'è una piccola attenzione da mantenere. Io dovrò distribuire la mia chiave pubblica. Per
questo le strade sono tre: incontro di persona “face to face”, anche attraverso i key-party, dei veri e
propri incontri organizzati per scambiarsi le chiavi pubbliche; la posso mettere sul mio sito internet
personale; oppure ci sono a disposizione dei key-server dove ognuno può inserire la propria chiave
pubblica e dove gli utenti possono fare delle ricerche, come se fossero degli elenchi on-line. La cosa
da verificare in tutti i casi è che la chiave pubblica sia realmente della persona che si pensa. Se sono
sicuro che la chiave sia di tizio, ma in realtà è di caio, il sistema dell'autenticazione è fortemente
compromesso.
L'autenticazione sarà sempre meglio farla di persona. Anche un sito web può dare garanzie; ad
esempio, chi mi conosce, sa benissimo che maury.it è il mio sito e quindi segue che la chiave che si
trova su http://www.maury.it/gpg posso averla inserita lì solo io, quindi è mia; però in tutti gli altri
casi, l'autenticazione faccia a faccia è la garanzia più sicura.
Some rights reserved: http://www.maury.it#licenza 12
13. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Io personalmente porto sempre in tasca un foglietto con su scritto il codice del mio certificato
GnuPG: 0x51F1316C. In questa maniera, chiunque mi incontri, può chiedermi il codice e verificare
così che quella che ha trovato sul mio sito web, su un key-server o sulle mie e-mail firmate (tante
volte avessi allegato la chiave pubblica) sia veramente mia; una volta che l'autenticazione la faccio
io di persona, può stare sicurissimo che quel certificato è realmente mio.
Vediamo ora come procurarci un certificato digitale.
Alcune aziende rilasciano dei certificati secondo lo standard S/MIME. Questo standard è supportato
nativamente dalla maggior parte dei client e-mail, quindi non ci sarà bisogno di installare plugin e/o
estensioni aggiuntivi.
La prima azienda che segnalo e Thawte. È sudafricana e rilascia gratuitamente certificati ad uso
personale. Thawte, con il classico sistema del “Rispondi a questa e-mail...” può verificare
l'autenticità del vostro indirizzo di posta elettronica. Per l'identità anagrafica, per poter inserire cioè
nel certificato il vostro nome ed il vostro cognome, utilizza il sistema dei notai: il Web Of Trust.
Gente autenticata e reputata affidabile dalla ditta (i notai) viene delegata a dare un punteggio da 10
a 35, in base alla propria anzianità di servizio, dopo aver verificato personalmente l'identità di un
nuovo utente. Un utente, raggiungendo 50 punti, viene dichiarato autenticato da Thawte e quindi
Some rights reserved: http://www.maury.it#licenza 13
14. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
avrà nome e cognome inseriti nel certificato. Al raggiungimento di 100 punti si diviene notai e si
può autenticare quindi altri utenti. Naturalmente il sistema dell'identità anagrafica è soggetta alla
serietà dei notai; per la veridicità dell'indirizzo e-mail bisogna, invece, fidarsi di Thawte; sarà
questa azienda a fare da garante. I notai Thawte sono ormai in tutto il mondo; alcuni autenticano in
maniera gratuita, altri chiedono delle piccole cifre; sul sito si possono trovare i notai più vicini alla
propria zona. Se qualcuno avesse bisogno, io sono notaio e, conoscendo altri notai, posso far avere
l'autenticazione praticamente al volo, in maniera totalmente gratuita, dato che mi piace fare
divulgazione di sicurezza informatica per pura passione.
Altri certificati digitali vengono rilasciati anche da ditte italiane tipo GlobalTrust, Poste Italiane e
diversi istituti bancari. GlobalTrust rilascia anch'essa certificati gratuiti per uso personale. Le altre,
invece, come servizio a pagamento: agli sportelli avverrà la procedura di autenticazione e poi verrà
rilasciato il software contenente il certificato in appositi CD-ROM.
Con questo sistema la firma digitale è valorizzata da delle authority riconosciute. Thawte è
riconosciuta a livello mondiale da diversi anni. Le altre, invece, all'estero potrebbero avere meno
fiducia: non so quanta credibilità possa avere, ad esempio, in Canada una mail certificata da
un'authority come Poste Italiane.
Questo sistema delle authority potrebbe non piacermi: voglio essere io l'unico garante della mia
identità. Quindi ho bisogno di uno strumento per crearmi da me un certificato digitale a chiave
asimmetrica. Ecco GnuPG.
Some rights reserved: http://www.maury.it#licenza 14
15. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
GnuPG è multipiattaforma ed open-source. Si utilizza nativamente da linea di comando come una
shell o il prompt di MS-DOS.
Non mancano tuttavia le intefaccine grafiche:
Enigmail è l'estensione per i programmi Mozilla. Contiene un tool grafico per la gestione delle
chiavi.
Gnu Privacy Assistant (o GPA), Seahorse e Geheimnis sono diverse interfaccine open-source.
WinPT è il pacchetto per Windows; contiene, oltre GnuPG precompilato, anche un'interfaccia
grafica ed il plugin per Outlook Express. Un'altra ottima interfaccia grafica per Windows è
GPGshell.
Some rights reserved: http://www.maury.it#licenza 15
16. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Vediamo l'utilizzo principale di GnuPG da linea di comando.
Una volta che il programma è stato installato, la prima cosa da fare è creare un certificato digitale. Il
comando sarà:
gpg --gen-key
Verranno richieste alcune informazioni personali: nome e cognome, e-mail ed eventuali commenti.
Successivamente sarà possibile inserire nel certificato altri indirizzi e-mail; in questa fase
limitiamoci a dare solo il principale.
Verrà richiesta la lunghezza della chiave desiderata; per avere la miglior sicurezza è sempre bene
chiedere la lunghezza maggiore possibile.
Some rights reserved: http://www.maury.it#licenza 16
17. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Verrà poi chiesta una passphrase, una specie di password, che verrà richiesta ad ogni utilizzo della
chiave privata. Questa è un'ulteriore sicurezza in più, tante volte la nostra chiave privata cada in
mani di terzi.
Riguardo alla scelta della passphrase è sempre meglio rispettare le solite regolette: evitiamo le
parole di senso compiuto, mischiare caratteri maiuscoli, caratteri minuscoli e cifre e dare sempre
una passphrase di almeno 8 caratteri.
Some rights reserved: http://www.maury.it#licenza 17
18. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Possiamo poi esportare od importare le chiavi pubbliche di altri o addirittura le nostre chiavi; questo
è utile ad esempio se si vuole utilizzare i certificati su più PC o su più sistemi operativi.
gpg --export -a nome_chiave-o-stringa_contenuta
Dando l'output in un file con “> nome_file.asc“ verrà scritta la chiave su di un file. L'opzione
-a permette l'esportazione in ascii a 7 bit, invece che in un file binario. GnuPG riconoscerà la
chiave richiesta anche da una semplice stringa contenuta nell'indirizzo e-mail o nel nome e
cognome.
Le chiavi esportate su di un file potranno poi essere importate con
gpg --import nome_file
Some rights reserved: http://www.maury.it#licenza 18
19. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
La revoca di una chiave è importante se la chiave privata cadesse in mani altrui e quindi la sicurezza
ad essa collegata fosse compromessa.
Conviene quindi creare un certificato di revoca da subito, conservandolo in un luogo sicuro in caso
di bisogno.
gpg --gen-revoke
anche qui si potrà riindirizzare il certificato ad un file. Se la chiave privata non sarà più utilizzabile
(perché ne è compromessa la sicurezza o per un qualsiasi altro motivo), il certificato di revoca sarà
la garanzia della validità decaduta. Ricordarsi, in caso di revoca di una chiave, di trasmettere il
certificato di revoca ai vari keyserver dove la chiave era stata registrata.
Poiché per creare un certificato di revoca è necessaria la chiave privata e poiché questa potrebbe
andare perduta, come detto sopra è buona norma creare la revoca da subito.
Some rights reserved: http://www.maury.it#licenza 19
20. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Le chiavi importate, compresa la propria, possono essere amministrate per aggiungere nuovi
indirizzi e-mail, rimuovere indirizzi e-mail e molte altre modifiche e/o correzioni.
gpg --edit-key nome_key-o-stringa_contenuta
Comparirà un prompt per i comandi; con help si avrà l'elenco di tutti i comandi disponibili per
amministrare le chiavi.
Some rights reserved: http://www.maury.it#licenza 20
21. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Quando importeremo una chiave pubblica di qualcuno, questa sarà inserita nel nostro archivio, una
sorta di portachiavi virtuale. È qui che il client di posta andrà a verificare il messaggio firmato
digitalmente. Se la chiave pubblica archiviata nel nostro portachiavi verificherà il messaggio, il
client dirà che la firma digitale è corretta.
Bisogna però far sapere al client che la chiave pubblica appartiene realmente alla persona che ha
mandato l'e-mail. Dopo esserci assicurati di persona ed in piena sicurezza di chi sia il proprietario di
quella chiave, potremo firmare la sua chiave pubblica come “verificata”. Firmando la chiave diremo
a GnuPG che quella chiave pubblica è affidabile.
Some rights reserved: http://www.maury.it#licenza 21
22. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Ecco come Mozilla Thunderbird segnala le e-mail firmate digitalmente. Nel primo caso l'e-mail è
dichiarata correttamente firmata, ma non ci sono garanzie su chi sia il reale proprietario del
certificato utilizzato. Nel secondo caso, invece, la firma è verificata da una chiave pubblica firmata.
Some rights reserved: http://www.maury.it#licenza 22
23. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Un ulteriore funzione di GnuPG dà la possibilità di apporre una firma digitale ad un file (un
documento, una foto, ecc.).
gpg --sign -b -a nome_file
Questo comando genererà una firma digitale del file con la chiave privata. Si otterrà un file con
ulteriore estensione .asc (.sig senza l'opzione -a che esporta la firma in file ASCII).
Per verificare la firma, avendo a disposizione la chiave pubblica relativa alla privata che l'ha
firmato:
gpg --verify nome_file.asc (.sig)
Some rights reserved: http://www.maury.it#licenza 23
24. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Come ultimo utilizzo di GnuPG segnalo brevemente la criptazione di file.
gpg -e nome_file
cripterà il file con la chiave pubblica che verrà specificata alla domanda successiva al lancio del
comando. Si otterrà un file con ulteriore estensione .gpg assolutamente non interpretabile se non
dopo la decriptazione.
Per decriptare il file, avendo a disposizione la chiave privata relativa alla pubblica che l'ha criptato:
gpg -d nome_file.gpg > nome_file
Abbiamo così a disposizione uno strumento per criptare ad esempio dei file delicati, tipo quelli
contenenti i nostri codici o le nostre password.
Some rights reserved: http://www.maury.it#licenza 24
25. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Come bibliografia segnalo questi due siti internet:
http://www.gnupg.org/(it)/howtos/it/GPGMiniHowto.html
HowTo ufficiale in italiano di GnuPG
http://thawte.ascia.net
Documentazione scritta da due notai Thawte di Roma. Molto chiara per il discorso del certificato a
chiavi pubblica/privata.
Ed in più, per approfondire, le pagine man di gpg.
Spero che questo documento possa servire a sensibilizzare ed a far diffondere l'utilizzo di S/MIME
e/o GnuPG. Non è bene che l'umanità continui ad affidarsi a sistemi bacati dal punto di vista della
sicurezza, ignorandone totalmente i rischi.
Some rights reserved: http://www.maury.it#licenza 25
26. Criptografia e firma digitale con GnuPG – Maurizio Antonelli (http://www.maury.it)
Io personalmente firmo digitalmente tutte le mie e-mail. Utilizzando Thawte con chi non utilizza
GnuPG e, invece, quest'ultimo con chi so che lo utilizza. Avendo a disposizione anche la chiave
pubblica del destinatario, cripto anche i messaggi.
Schermata del mio Thunderbird; si notino i due tastini per criptare/firmare con GnuPG o S/MIME
Quando questi sistemi saranno maggiormente diffusi, viaggeranno in rete messaggi di posta
elettronica in tutta sicurezza. Per ora e fino ad allora meglio rendere noto a tutti che non è così.
Some rights reserved: http://www.maury.it#licenza 26