Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
LinuxBeach 2006 - Criptografia e firma digitale con GnuPG - slides
1. LINUX BEACH
San Benedetto del Tronto – 22 luglio 2006
CRIPTOGRAFIA E FIRMA DIGITALE
con
GnuPG
- USARE LA POSTA ELETTRONICA IN PIENA SICUREZZA -
Maurizio Antonelli
http://www.maury.it
Some rights reserved: http://www.maury.it#licenza
2. LA POSTA ELETTRONICA NON È UNO
STRUMENTO SICURO
● I messaggi e-mail viaggiano sulla rete in chiaro,
senza alcuna forma di codifica. Segue che sono
“sniffabili” in maniera estremamente semplice.
● Falsificare il mittente di un messaggio è una cosa a
dir poco banale. Con pochissima furbizia si può far
credere di essere qualcun altro.
3.
4. RENDIAMO SICURA LA NOSTRA POSTA: Iniziamo a
criptarla...
Di sistemi di codifica il mondo ne è pieno. Sostituzione di caratteri,
anagrammare le parole, ecc. ecc. sono tutti sistemi di codifica. In comune
hanno una cosa fondamentale: esiste una chiave di criptazione e solo chi la
possiede può criptare/decriptare.
Es.: Prendiamo un messaggio di posta elettronica. Viaggeranno in rete una
serie di byte (valori da 0 a 255). Prima di spedirli aggiungiamo 2 ad ogni
valore da 0 a 253; 254 e 255 li sostituiamo con 0 e 1. (Questa è la nostra
chiave).
Chi riceverà, conoscendo la chiave, potrà decodificare il messaggio. Gli
altri no.
5. Abbiamo visto un semplice esempio di criptazione a
chiave simmetrica.
Il sistema è utilizzabile solo dalle stesse persone. Nel
momento che A e B comunicano tra loro con una
chiave, questa non dovrà andare in possesso di terzi.
Se A usasse la stessa chiave con C le comunicazioni
con B non sarebbero più strettamente riservate.
Se A, invece, si inventasse una chiave per ogni “amico
di penna”, si ritroverebbe un'infinità di codici. Il
sistema diventerebbe ben presto poco pratico.
6. La soluzione?
CERTIFICATO A CHIAVE ASIMMETRICA
Inventiamo un sistema che utilizzerà un certificato digitale composto da
una coppia di chiavi (e non più da una chiave sola).
Coppia di chiavi:
CHIAVE PRIVATA
CHIAVE PUBBLICA
7. La CHIAVE PRIVATA andrà conservata MOOOOOOLTO gelosamente.
Permetterà al proprietario di decriptare i messaggi da lui ricevuti e
permetterà anche di apporre una firma digitale a quelli spediti.
La CHIAVE PUBBLICA sarà distribuita ai vari conoscenti. Potrà essere
utilizzata per codificare i messaggi in modo tale che solo chi possiede la
relativa CHIAVE PRIVATA ad essa collegata potrà decriptare. Verrà
utilizzata anche per verificare la firma digitale data dalla relativa chiave
privata.
La CHIAVE PUBBLICA potrà essere diffusa senza problemi. Darla a terzi
non costituirà nessun pericolo. Se nessuno entrerà in possesso della
CHIAVE PRIVATA, il sistema potrà essere dichiarato (almeno per ora)
matematicamente sicuro.
8. Facciamo un semplice esempio di “certificato a chiave asimmetrica”.
Non sarà applicabile come forma di sicurezza, ma permette di capire
come la cosa sia possibile con determinate funzioni matematiche.
Immaginiamo di avere questa serie di numeri: 4, -2, -1, 5.
Immaginiamo di criptare questi 4 byte con una chiave pubblica che
consiste nell'elevare al quadrato. Otterremo:
16, 4, 1, 25
Chi possiede solo la chiave pubblica andrà incontro a difficoltà. Infatti,
conoscendo soltanto che la chiave pubblica eleva al quadrato, io posso
tentare di invertire l'operazione con la radice quadrata, ma la radice di 4
è 2 o -2? e di 16 è 4 o -4?
La chiave pubblica non è sufficiente per risalire al messaggio originale.
9. L'esempio precedente non utilizza un modo utile per lo scopo che
vogliamo prefissarci (troppo semplice per garantire sicurezza), ma mostra
come possano esistere delle funzioni non invertibili che potranno essere
utilizzate per creare “confusione” sui dati di partenza ai quali sono state
applicate.
Con funzioni molto più avanzate, che utilizzano una coppia di chiavi
diverse, una pubblica e l'altra privata, si può raggiungere il nostro scopo:
- CRIPTARE CON LA CHIAVE PUBBLICA
- DECRIPTARE ESCLUSIVAMENTE CON LA CHIAVE PRIVATA
Il titolare diffonderà la chiave pubblica del proprio certificato digitale e
potrà quindi fare in modo che i propri amici gli scrivano criptando le e-
mail. Solo lui le potrà decodificare.
10. LA FIRMA DIGITALE
Immaginiamo di usare lo stesso certificato digitale in questo
modo:
- Uso la mia chiave privata sul messaggio di posta che sto per
inviare tramite un'operazione che mi darà un risultato univoco
(checksum).
Solo quel messaggio potrà dare quel risultato. Un solo carattere
fuori posto o sostituito modificherà la checksum.
Inoltre solo con la mia chiave privata posso ottenere quella
checksum.
11. Chi è in possesso della mia chiave pubblica non potrà ottenere la stessa
checksum sul messaggio, ma può verificarla come corretta.
Ho trovato un modo per garantire che il mittente del messaggio
possiede la chiave privata del certificato digitale. Segue che il mittente
sono io.
HO FIRMATO DIGITALMENTE IL MIO MESSAGGIO
ATTENZIONE: Bisogna essere sicuri che la chiave pubblica sia
realmente di un MIO certificato digitale. La cosa è sempre meglio
verificarla di persona, faccia a faccia (key-party, sito web, key-server).
12. DOVE TROVIAMO UN CERTIFICATO DIGITALE?
Alcune ditte (authority) di una certa visibilità rilasciano certificati digitali
(S/MIME):
Thawte: Azienda sudafricana, riconosciuta da anni come authority per il
rilascio di certificati (http://www.thawte.com).
Sistema dei notai per l'identità anagrafica.
In Italia: Poste Italiane
GlobalTrust
Vari istituti bancari...
L'authority si fa garante dell'identità della persona a cui rilascerà il
certificato.
Questo significa che bisognerà fidarsi di questa authority...
13. NON VOGLIO FIDARMI DI UN'AUTHORITY.
VOGLIO ESSERE IO A CREARMI UN
CERTIFICATO E A GARANTIRE DELLA MIA
IDENTITÀ.
GnuPG (o GPG)
Gnu Privacy Guard
http://www.gnupg.org
14. GnuPG è multipiattaforma.
Nativamente si utilizza da linea di comando (shell,
prompt). Tuttavia esistono diverse interfacce grafiche.
Enigmail (estensione per i programmi Mozilla)
GNU Privacy Assistant
Seahorse
Geheimnis
WinPT e GPGshell (per Windows)
15. Installato il programma
CREIAMO UNA COPPIA DI CHIAVI
gpg --gen-key
Nella chiave saranno inserite alcune vostre informazioni:
Nome e cognome
Indirizzo e-mail
Eventuali commenti
Utilizzare sempre la lunghezza massima disponibile: 768,
1024, 2048 bit.
16. LA PASSPHRASE
Come ulteriore sicurezza, nel momento di creazione di un certificato
digitale, verrà chiesto di dare una passphrase (password).
Questa sarà richiesta ad ogni operazione che si effettuerà con la
chiave privata.
Limita il danno tante volte la chiave privata cadesse in mani sbagliate.
Soliti consigli:
niente parole di senso compiuto, mischiare caratteri maiuscoli, minuscoli e
cifre, lunghezza di almeno 8 caratteri.
17. Importare ed esportare le chiavi
Ad esempio per utilizzarle su più PC.
gpg --export -a nome-key_o_stringa-contenuta
gpg --import nome_del_file
Massima attenzione alla chiave privata. Non dovrà andare in mano a
nessuno, fuorché al relativo proprietario.
18. REVOCARE UNA CHIAVE
Ad esempio perché ne è stata compromessa la
sicurezza: chiave privata caduta in mani altrui.
Conviene sempre e da subito creare un certificato
di revoca.
gpg --gen-revoke
19. AMMINISTRAZIONE DELLE CHIAVI
Naturalmente è possibile fare diverse operazioni di gestione del proprio
certificato digitale:
aggiungere indirizzi e-mail
togliere indirizzi e-mail
impostare un indirizzo e-mail di default
molte altre...
gpg --edit-key nome-key_o_stringa-contenuta
e quindi chiedere help per l'elenco delle funzioni disponibili.
20. FIRMARE UNA CHIAVE PUBBLICA
Importando una chiave pubblica, questa può venire utilizzata; il
client avviserà che la firma digitale è corretta, ma non ci sono
verifiche sull'identità del titolare del certificato.
Una volta verificata la reale proprietà della chiave (sempre di
persona a tu per tu) si potrà firmare la chiave e renderla
credibile al 100%.
A questo punto i client di posta visualizzeranno sulle e-mail il
messaggio che la firma digitale è completamente OK.
Con GnuPG il garante dell'identità divento io stesso.
21. E-mail da mittente con chiave pubblica non verificata
E-mail da mittente con chiave pubblica verificata
22. FIRMARE DEI FILE
Come ulteriore utilizzo di GnuPG posso firmare dei
file.
gpg --sign -b -a nome_file
Otterremo un nome_file.asc (.sig se non uso il -a).
gpg --verify nome_file.asc
Come per le e-mail, si firmerà con la chiave privata. Quindi la firma
sarà rigorosamente stata apposta dal proprietario del certificato.
23. CRIPTARE E DECRIPTARE DEI FILE
...E posso anche criptare dei file delicati che ho sul PC.
gpg -e nome_file
Otterremo un nome_file.gpg
gpg -d nome_file.gpg > nome_file
Come per le e-mail, si cripterà con la chiave pubblica. Solo chi
possiede la chiave privata potrà decriptare.
24. Bibliografia e tante tante info...
http://www.gnupg.org/(it)/howtos/it/GPGMiniHowto.html
http://thawte.ascia.net/
Pagine man di GnuPG
25. Buona cena a tutti
e a dopo con
l'osservazione stellare
TeLUG
Teramo Linux Users Group OpenInformatix
http://www.telug.it http://www.openinformatix.org
soci@telug.it organizzazione@openinformatix.org
Maurizio Antonelli - http://www.maury.it - maurizio.antonelli@oacl.net
Osservatorio Astronomico Colle Leone - http://www.oacl.net