Gnu Privacy Guard (GnuPG) - UNISA · 2005. 7. 20. · 4 GnuPG: Diffusione delle Chiavi • Punto...

12
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:

Transcript of Gnu Privacy Guard (GnuPG) - UNISA · 2005. 7. 20. · 4 GnuPG: Diffusione delle Chiavi • Punto...

  • 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: