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

Post on 28-Jan-2021

5 views 0 download

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: