Post on 28-Jan-2021
1
Gnu Privacy Guard (GnuPG)
a cura di Ruocco Salvatore, Sessa Marco, Vassallo Sergio e Verlotta Angelo
Indice
• Introduzione• PGP• GnuPG• Web of Trust• Cifratura, Decifratura e Firma• GnuPG vs PGP• Installazione ed Uso
Introduzione (1)
• Le comunicazioni hanno sempre rivestito un ruolo molto importante nella storia dell' uomo
• Oggi giorno la maggior parte dei documenti, scritti, messaggi, corrispondenza vengono realizzati, gestiti e scambiati mediante strumenti informatici
Introduzione (2)
• Problema: un malintenzionato ha la possibilità di intercettare, ascoltare e modificare le informazioni
• E’ necessario avere dei canali sicuri per le comunicazioni
Canale Insicuro
• Soluzione: Crittografia
Evoluzione della Crittografia• La crittografia è questione antica:
2
Crittografia
• Utilizzata spesso in contesti di guerra per permettere comunicazioni sicure tra le truppe
• La sua importanza in ambito militare e strategico ha portato, nel corso degli anni, allo sviluppo di tecniche sempre più complesse
Caratteristica di un Sistema Crittografico
• Principio di Kerckhoff :“la robustezza del sistema non deve dipendere
dalla segretezza dell'algoritmo”
• Nel settembre del 1995 due studenti riuscirono a rompere lo schema del generatore dei numeri casuali di Netscapeeffettuando reverse-engineering
Crittografia a Chiave Simmetrica
• Utilizza un unica chiave per codificare e per decodificare i messaggi
• Concordata precedentemente mediante un canale sicuro
Crittografia a Chiave Asimmetrica• Utilizza una coppia di chiavi: una chiave pubblica e una chiave privata
• Non è più necessario un canale sicuro per scambiarsi la chiave simmetrica
Indice
• Introduzione• PGP• GnuPG• Web of Trust• Cifratura, Decifratura e Firma• GnuPG vs PGP• Installazione ed Uso
Pretty Good Privacy (PGP)
• Sviluppato da Phil Zimmermannnel 1991
• Software di crittografia per la posta elettronica e la protezione dei file di uso personale
• Nel 1993 il governo statunitense pose Zimmermann sotto inchiesta perché era proibita l’esportazione di sistemi di cifratura
3
Indice
• Introduzione• PGP• GnuPG• Web of Trust• Cifratura, Decifratura e Firma• GnuPG vs PGP• Installazione ed Uso
Gnu (GNU's Not Unix) Privacy Guard
• Nato in Germania nel 1997 per opera di Werner Koch
• Sostituto completo e gratuito di PGP che non usa l'algoritmo di crittografia IDEA protetto da copyright
• Strumento crittografico open source basato sulla Licenza Pubblica Generica GNU
• Disponibile per molti sistemi operativi: Linux, Windows 95/98/NT/2000/ME/XP, MacOS X, FreeBSD…
• Può essere usato tramite linea di comando ma esistono anche front-end grafici come GPA Privacy Assistant, WinPT
GnuPG (1)
• Utilizza un sistema ibrido che sfrutta algoritmi simmetrici, algoritmi a chiave pubblica, e hashing Oneway
• Vantaggi degli algoritmi simmetrici:operazioni di cifratura e decifratura meno costose
• Vantaggi degli algoritmi asimmetrici:distribuzione delle chiavi di cifratura più facile ed efficiente
• Nota: la sicurezza di un algoritmo ibrido non è mai più forte del più debole algoritmo utilizzato
GnuPG (2)
• Non preclude l’utilizzo di soli algoritmi simmetrici
• L'autenticazione di documenti o dei messaggi avviene attraverso l'utilizzo delle firme digitali
• Esistono plug-in per l’integrazione con i più conosciuti client di posta elettronica: Eudora, Outlook, Mutt, Pine…
GnuPG (3)
• Consente ad un utente di possedere una coppia di chiavi primaria e zero o più coppie di sottochiavi addizionali utilizzabili per firma e/o cifratura
• Gestisce un mazzo di chiavi dove vengono memorizzate le proprie chiavi e le chiavi pubbliche di tutti gli utenti con cui si vogliono mantenere dei contatti
Indice
• Introduzione• PGP• GnuPG• Web of Trust• Cifratura, Decifratura e Firma• GnuPG vs PGP• Installazione ed Uso
4
GnuPG: Diffusione delle Chiavi
• Punto debole degli algoritmi a chiave pubblica è la diffusione delle chiavi
• Attacco man-in-the-middle
GnuPG: Diffusione delle Chiavi
• Utilizza la nozione di firma di chiavi adoperata in uno schema noto come Web of Trust (rete della fiducia)
GnuPG: Web of Trust (1)
• Potente e flessibile modello basato sulla fiducia
• Utilizzato per evitare di dover convalidare personalmente un gran numero di chiavi
• Una chiave viene convalidata verificando l’hash della chiave e successivamente firmando la chiave per certificarla come chiave valida
GnuPG: Web of Trust (2)
• La responsabilità di convalidare le chiavi pubbliche è delegata a persone di cui ci si fida
• Un possessore di chiavi può essere collocato in uno dei seguenti livelli di fiducia:
SconosciutoNessunaMarginalePiena
• Analoghi livelli sono associati alle chiavi per indicarne la validità
GnuPG: Web of Trust (3)
• Una chiave K è valida se:
1) è firmata da un numero sufficiente di chiavi valide, ossia:
a) è stata firmata di personab) è stata firmata da una persona di cui ci si fida
pienamente con una chiave pienamente validac) è stata firmata da tre persone con fiducia marginale
con chiavi pienamente valide
2) il percorso delle chiavi firmate che risale dalla chiave K alla propria chiave è al massimo di cinque passi
GnuPG: Web of Trust (4)
• Esempio (caso 1.b):- Annarella ha piena fiducia in Biagio- Biagio ha convalidato la chiave di Carla
5
GnuPG: Web of Trust (5)
• Esempio (caso 1.c):- Annarella non ha fiducia in Biagio- Annarella ha fiducia marginale in Luana, Roberta e Vittoria- Luana, Roberta e Vittoria hanno convalidato la chiave di Carla
GnuPG: Web of Trust (6)
• Esempio (caso 2):- Annarella ha fiducia piena in Biagio, Carla, Salvatore, Marco e
Sergio - Sergio ha convalidato la chiave di Angelo
Indice
• Introduzione• PGP• GnuPG• Web of Trust• Cifratura, Decifratura e Firma• GnuPG vs PGP• Installazione ed Uso
GnuPG: Modalità Ibrida (1)
• Messaggio cifrato con una chiave di sessione• Chiave di sessione cifrata con la chiave pubblica del destinatario• Unico pacchetto spedito
• Cifratura:
GnuPG: Modalità Ibrida (2)
• Chiave di sessione decifrata con la chiave privata• Messaggio decifrato con la chiave di sessione
• Decifratura:
GnuPG: Modalità Simmetrica
• E’ possibile cifrare un messaggio in maniera simmetrica utilizzando:
una chiave simmetrica derivata dal passphrase, oppure
un meccanismo a due fasi in cui anche la chiave di sessione è cifrata con un algoritmo di cifratura simmetrico
6
GnuPG: Generazione di Chiavi Simmetriche
• Chiavi di sessionegenerate come numeri random e differenti per ogni messaggio
• Chiavi simmetriche derivanti da passphraseottenute applicando alla passphrase una funzione chiamata string-to-key (s2k) che effettua varie operazioni:
- aggiunta di dati random- applicazione di una funzione hash su più iterazioni- etc…
GnuPG: Modalità CifraturaSimmetrica (1)
• Variante del Cypher Feedback Mode (modalità CFB)
• Fa uso di un CFB shift pari a 8 ottetti (64 bit) che rappresentaanche la lunghezza del blocco usato dall' algoritmo di cifratura
GnuPG: Modalità CifraturaSimmetrica (2)
• IV vettore di inizializzazione (avvalorato con tutti zero)• R1 primi 8 ottetti• R2 ultimi 2 ottetti• P1,P2,...,Pk blocchi di 64 bit del testo in chiaro• εk(.) applicazione dell'algoritmo di cifratura scelto con chiave k• B[i,i+1] i-esimo e (i+1)-esimo byte di un blocco B• B[i-j] intervallo dal byte i al byte j di un blocco B (i ≤ j)• ‘ ° ’ operatore di concatenazione• ‘ ⊕ ’ operatore logico or esclusivo (XOR)• Ci i-esimo blocco di dati cifrati
GnuPG: Modalità Cifratura Simmetrica (3)
• IV vettore di inizializzazione (avvalorato con tutti zero)• R1 primi 8 ottetti• R2 ultimi 2 ottetti• P1,P2,...,Pk blocchi di 64 bit del testo in chiaro• εk(.) applicazione dell'algoritmo di cifratura scelto con chiave k• B[i,i+1] i-esimo e (i+1)-esimo byte di un blocco B• B[i-j] intervallo dal byte i al byte j di un blocco B (i ≤ j)• ‘ ° ’ operatore di concatenazione• ‘ ⊕ ’ operatore logico or esclusivo (XOR)• Ci i-esimo blocco di dati cifrati
GnuPG: Firma Digitale (1)
• Caratteristiche:
facile da produrre
facile da verificare
difficile da falsificare
non ripudiabile
GnuPG: Firma Digitale (2)
1) è difficile trovare due documenti che possiedono la stessa firmadigitale
2) data una firma è difficile recuperare il documento che l' ha prodotta
• Tale sistema rispetta due importanti proprietà:
• Firma:
7
GnuPG: Firma Digitale (3)
• Verifica:
GnuPG: Algoritmi Supportati
• Cifratura Simmetrica
• Algoritmi a chiave pubblica
• Funzioni Hash
RIJNDAEL256RIJNDAEL192RIJNDAELTWOFISHBLOWFISHCAST53DES
RSA-SRSA-ERSAELGDSAELG-E
RIDEMP160SHA-1MD5
ElGamal: Generazione ChiavePubblica e Privata
• Scegliere un numero primo p molto grande e un
generatore g ∈ Zp* con 1 < g < p-1
• Scegliere come chiave privata un intero Kprv tale che 1 < Kprv < p-1 e MCD(Kprv , p-1)=1
• Calcolare Kpub= gKprv mod p
• Rendere pubblica la terna (p , g , Kpub)
ElGamal: Generazione del Numero Primo
1. Genera un numero primo q di 160, 200 o 240 bits
2. Calcola il numero n di fattori primi necessari e ne sceglie la lunghezza
3. Crea un pool di m numeri primi della lunghezza determinata al passo 2
4. Ottiene una nuova permutazione dal pool (p1 ... pn)
5. Calcola p = 2 * q * p1* ... * pn+1
6. Controlla che p sia della lunghezza desiderata
7. Controlla se p è effettivamente un primo
8. Se è un primo vai al passo 9, altrimenti vai al passo 4
9. Ricerca un generatore g per il gruppo ciclico Zp*
• Primo sicuro: p=2*q*p1*...*pn+1• q scelto opportunamente per migliorare
l’efficienza della generazione del primo
ElGamal: Ricerca del Generatore di Zp*
• Input dell’algoritmo: gruppo ciclico Zp
* di ordine p-1scomposizione in fattori primi di p-1
• Algoritmo:
1. scegliere un elemento a caso g ∈ Zp*
2. for i from 1 to k do
3. calcola b ← g(p-1)/pi
4. if b=1 then vai al passo 1
5. return (g)
ElGamal: Cifratura
• (p,g,Kpub) chiave pubblica
• Cifratura:1. rappresentare il messaggio m come un intero 1 ≤ M ≤ p-1
2. scegliere un intero casuale δ tale che 1 < δ < p-1
3. calcolare d ≡ gδ mod p dove 1 ≤ d ≤ p-1
4. calcolare e ≡ M * (gKpub)δ mod p dove 1 ≤ e ≤ p-1
• Il messaggio cifrato è C=(d,e)
8
ElGamal: Decifratura
Osservazione: per il teorema di Eulero (X ∈ Zn* ⇒ Xφ(n) ≡ 1 mod n)si ha dp-1-Kprv ≡ ((gKprv)δ)-1 mod p
2. calcolare (dp-1-Kprv * e) mod p = (((g Kprv)δ)-1 * M * (gKprv)δ) mod p = M
• Kprv chiave privata destinatario
• Decifratura:
1. calcolare dp-1-Kprv mod p
ElGamal: Sicurezza
• Complessità del calcolo del logaritmo discreto
• Pur conoscendo la tripla di valori pubblici (p, g, gKprv mod p) ricavare da essa la chiave privata Kprv significherebbe risolvere:
Kprv = logg,p (gKprv mod p)
• Inoltre, anche conoscendo i valori p, g e d = gδ mod p non è facile calcolare δ poichè bisognerebbe risolvere:
logg,p (gδ mod p)
ElGamal: Firma
• D documento da firmare
• Firma:
1. scegliere un intero casuale δ tale che 1 < δ < p-12. calcolare u = gδ mod p
3. calcolare v = (D - (k * u) * δ-1) mod (p-1)
• La firma è rappresentata dalla coppia (u,v)
ElGamal: Verifica
• (p, g, Kpub) chiave pubblica
• (u,v) firma del documento D
• Verificare che la seguente congruenza sia valida:
gD ≡ (Kpubu * uv) mod p
Indice
• Introduzione• PGP• GnuPG• Web of Trust• Cifratura, Decifratura e Firma• GnuPG vs PGP• Installazione ed Uso
GnuPG vs PGP (1)
• PGP è un prodotto commerciale• Esiste una versione freeware con notevoli restrizioni:
1) può essere usato soltanto da:– Privati (senza scopo di lucro)– Istituzioni educative e studenti (senza scopo di lucro)– Istituzioni o organizzazioni caritatevoli NoProfit
2) con le seguenti limitazioni:– Non include PGP Disk– Non include la cifratura automatica degli allegati e-mail– Non fornisce plug-in per l'integrazione con i programmi e-mail– Non opera con PGP Admin o altri PGP deployment tools
• Immagazzina nel portachiavi le informazioni relative alla fiducia
9
GnuPG vs PGP (2)
• GnuPG è un’applicazione GNU• Realizzata e distribuita in accordo con la licenza GPL
• Basata sulle quattro libertà:
1) Libertà di eseguire il programma per qualsiasi scopo
2) Libertà di accedere al codice sorgente e adattarlo alle proprie necessità
3) Libertà di ridistribuire copie in modo da aiutare il prossimo
4) Libertà di migliorare il programma e distribuirne pubblicamente i miglioramenti
• Immagazzina i valori di fiducia in un file separato (trustdb.gpg)
Indice
• Introduzione• PGP• GnuPG• Web of Trust• Cifratura, Decifratura e Firma• GnuPG vs PGP• Installazione ed Uso
GnuPG: Installazione (1)• Scaricare i sorgenti dalla homepage:
http://www.gnupg.org/download/
• Verificare l’integrità dei file scaricati:calcolare il message digest MD5 del file scaricato (gnupg-x.y.z.tar.gz):
verificare che l’output sia uguale a quello pubblicato nell’announcement list:
GnuPG: Installazione (2)
• Lanciare il comando ./configure:
• Compilare il programma con il comando make, ed eseguire il comando make install per copiare il programma e le pagine di manuale nella directory di installazione :
GnuPG: Generare una Chiave (1)
• Digitare il comando gpg --gen-key e scegliere:
quali algoritmi utilizzare:
la lunghezza delle chiavi da generare:
GnuPG: Generare una Chiave (2)
• Si possono inserire valori maggiori di 2048 ma la generazione potrebbe richiedere molto tempo:
• Bisogna tener conto del trade-off prestazioni/sicurezza
10
GnuPG: Generare una Chiave (3)
• Inserire nome, commenti e indirizzo e-mail per definire la UserID :
GnuPG: Generare una Chiave (4)• Scegliere una passphrase :
La dimensione di un fattore primo viene incrementata>La dimensione di un fattore primo viene decrementata<Controlla un nuovo valore per il generatore^Ricarica il pool dei numeri primi con nuovi valori!Il test di Miller-Rabin ha avuto successo+Gli ultimi 10 test di Miller-Rabin sono falliti.
GnuPG: Generare una Chiave (5)
• Una buona passphrase ha le seguenti caratteristiche:
è lunga
contiene caratteri speciali (*, $, %, & ...)
è molto difficile da indovinare (niente nomi, data di nascita …)
contiene sostituzioni sistematiche (o → 0 oppure l → 1)
GnuPG: Generare un Certificato di Revoca (Opzionale)
• È possibile generare un Certificato di Revoca che potrà essere utile in diversi casi:
la chiave privata è stata smarrita
è caduta nelle mani sbagliate
non si vuole più usare lo stesso UID
la lunghezza della chiave non è più sufficiente
etc...
• Utilizzare il comando gpg --gen-revoke:
• Sarà richiesta la passphrase altrimenti chiunque potrebbe revocare la chiave(nota: se si dimentica la passphrase, la chiave diventa inutilizzabile e
non è neanche possibile revocarla)
GnuPG: Generare un Certificato di Revoca (Opzionale) GnuPG: Esportare una Chiave (1)
• Utilizzare il comando --export:
• La chiave viene esportata in un formato binario nel file indicato dall' opzione --output
11
GnuPG: Esportare una Chiave (2)• Il formato binario può risultare sconveniente quando la chiave viene
spedita per posta elettronica o pubblicata in una pagina web
• L'opzione --armor genera un output protetto da un’armatura ASCII:
GnuPG: Importare una Chiave (1)
• Per aggiungere una chiave pubblica al proprio “mazzo di chiavi” usare il comando --import :
• Una volta che la chiave è stata importata deve essere convalidata. E’ possibile:
farlo personalmenteaffidarsi al modello Web of Trust
GnuPG: Importare una Chiave (2)
• E’ possibile modificare il livello di fiducia che si ha nel possessore della chiave importata mediante il comando trustnella schermata di edit (accessibile digitando gpg --edit-keyuserID):
GnuPG: Campo “trust”
• Alla destra del campo trust compaiono due simboli indicanti:
la fiducia nella persona
la validità della chiave
definitivaupienafmarginalemnessunannon conosciutaqnon definita-
pienafmarginale mnessunan
informazioni insufficienti per il calcolo
qnon definita-
livello di fiducia nella persona
livello di validitàdella chiave
GnuPG: Convalidare una Chiave (1)
• Utilizzare il comando sign nella schermata di edit:
• Attenzione: accertarsi che la chiave appartenga effettivamente alla persona identificata dallo userID
• Ciò può essere fatto:
verificando il fingerprint della chiave
incontrando l'utente
controllando un documento di identità
etc…
GnuPG: Convalidare una Chiave (2)
12
• Il fingerprint può essere visualizzato con il comando --fingerprintoppure con il comando fpr nella schermata di edit:
GnuPG: Convalidare una Chiave (3)
• Come risultato dell’ operazione di sign si può notare che la chiave è firmata:
GnuPG: Convalidare una Chiave (4)
GnuPG: Cifrare un Messaggio
• Il comando per cifrare è --encrypt:
• --output serve per redirigere l'output su un file• --recipient indica il destinatario del messaggio (--default-recipient
per specificare un destinatario di default)
GnuPG: Decifrare un Messaggio
• Il comando per decifrare è --decrypt:
• Questa operazione necessità della passphrase• L'opzione --output serve per redirigere l'output su un file
(se non specificato l'output predefinito è lo stdout)
• Per firmare un messaggio digitare il comando:gpg --sign [Messaggio]
effettua una compressione dei dati
• Per un risultato leggibile usare il comando:gpg --clearsign [Messaggio]
• Per verificare le firme utilizzare il comando:
gpg --verify [dati]
GnuPG: Firmare un Messaggio
• http://www.gnupg.org/Sito ufficiale di riferimento per GnuPG
• http://www.cacr.math.uwaterloo.ca/hac/Handbook of Applied Cryptography
• http://www.pgp.com/Sito ufficiale PGP
• http://webber.dewinter.com/gnupg_howto/GnuPg Mini Howto
• ftp://ftp.rfc-editor.org/in-notes/rfc1208.txtRFC 1208: A Glossary of Networking Terms
• ftp://ftp.rfc-editor.org/in-notes/rfc2828.txtRFC 2828: Internet Security Glossary
• http://www.faqs.org/rfcs/rfc2440.htmlRFC 2440: OpenPGP Message Format
Link Utili: