Elementi di Sicurezza e Privatezza Lezione 20 PGP cont d - Esercizi Chiara Braghin chiara.braghin@unimi.it
PGP (1) Software per cifrare la posta elettronica e per la protezione di file di uso personale Creato da Philip Zimmermann nel 1991 e distribuito gratuitamente su Internet Obiettivi: permette di firmare una mail lasciando il testo in chiaro permette di cifrare una mail senza firmarla permette di firmare e cifrare una mail 1
PGP (2) - Algoritmi Basato su crittografia simmetrica e asimmetrica: Cifratura simmetrica: DES, 3DES, AES, CAST, IDEA Usata per cifrare il messaggio con la chiave di sessione Cifratura assimmetrica: RSA, ElGamal, DH Usata per cifrare la chiave di sessione generata dal mittente Hashing: SHA-1, MD-5 2
PGP (3) - Algoritmi Firma digitale: RSA, DSS, ECDSA e altri Usata per firmare/cifrare con la chiave privata del mittente l hash del messaggio Compressione: Zip Compatibilità mail e segmentazione: Radix-64 Il messaggio cifrato è convertito in stringa ASCII ed eventualmente segmentato nel caso di messaggi di lunghezza eccessiva 3
PGP (4) Ogni utente dispone di: chiave privata: usata per firmare e decifrare i messaggi chiave pubblica: disponibile a tutti ed usata per cifrare i messaggi chiave di sessione: chiave che mittente e destinatario condividono varia ad ogni invio viene generata dal mittente 4
PGP (5) - Gestione chiavi Due strutture dati (key ring) per memorizzare le chiavi: Private key ring: contiene la coppia (chiave pubblica, chiave privata) dell utente Campi e attributi memorizzati: TIMESTAMP: indica l ora in cui è stata generata la chiave KEY ID: 64 bit meno significativi della chiave pubblica PUBLIC KEY: chiave pubblica PRIVATE KEY: chiave privata cifrata con la passphrase USER ID: proprietario della chiave Chiave privata: Viene generata da PGP ma permette all utente di specificare la lunghezza della chiave La passphrase viene convertita in una chiave IDEA usando MD5, tale chiave viene utilizzata per cifrare con IDEA la chiave privata 5
PGP (6) - Gestione chiavi Public key ring: contiene le chiavi pubbliche delle persone note all utente Campi e attributi memorizzati: TIMESTAMP: indica l ora in cui è stata generata o inserita la chiave KEY ID: i 64 bit meno significativi della chiave pubblica PUBLIC KEY: chiave pubblica OWNER TRUST: fiducia nel proprietario della chiave KEY LEGITIMACY: fiducia nella chiave FIRMA: firma per la chiave SIGNATURE TRUST: fiducia nella firma 6
PGP (7) - Generazione di un messaggio firma compressione cifratura 7
PGP (8) - Ricezione di un messaggio 8
PGP (9) - Formato messaggio 9
PGP (10) - Certificati Ogni chiave presente nel key-ring ha associato un certificato che contiene le seguenti informazioni: Version number: quale versione di PGP è stata usata per creare la chiave Time: l'ora in cui è stata creata la chiave Validity: il periodo di validità della chiave Key-Type: l'algoritmo usato per generare le chiavi User Id: il proprietario della chiave Self-Signature: firma ottenuta usando la chiave privata della chiave pubblica associata al certificato Message digest algorithm: algoritmo utilizzato per avere il message digest Signed message digest: firma del message digest Symmetric encryption algorithm: algoritmo di cifratura usato per cifrare le informazioni 10
PGP (11) - Certificati PGP riconosce due formati di certificato: Certificati in formato PGP Certificati in formato X.509 11
PGP (12) Come ottenere una chiave pubblica? Direttamente dalla persona a cui appartiene Usando i key-server, server presenti su Internet dedicati al deposito e prelievo delle chiavi pubbliche Per ricevere o inserire chiavi bisogna inviare una mail all indirizzo del key-server 12
PGP (13) - Web of Trust PGP si basa su una gestione decentralizzata: Ciascuno si rende responsabile certificando una chiave (o il suo certificato) in suo possesso Metodo: Assegno un valore di fiducia agli utenti (Unknown user, usually not trusted to sign, usually trusted to sign, always trusted to sign, ultimately trusted -own key, present in private key ring-) PGP assegna ad una chiave un valore di validità in base ai giudizi espressi da altri utenti su quella chiave e al valore di fiducia che io ho assegnato a quegli utenti (Valid, Marginally valid, Invalid) Quindi: Io sono Trusted :-) Assegno alle chiavi che ho potuto controllare direttamente di persona il giudizio Valid Il valore di validità di un certificato misura quanto io reputi vero quel certificato 13
PGP (14) Key Fingerprint Breve sequenza di byte utilizzata per autenticare o risalire ad una chiave pubblica più lunga Creata applicando una funzione di hash alla chiave pubblica Esempio: D5A4 F097 B6B6 3D3A D7CB 75CA 505E 261C 1EB9 B3E7 14
PGP (15) - Implementazioni PGPi project International PGP Home Page GNU Privacy Guard (GnuPG o GPG) rilasciato sotto la licenza GNU GPL, è un programma progettato per sostituire la suite crittografica PGP è completamente compatibile con gli standard OpenPGP dell'ietf Disponibile sia come stand-alone che come plug-in per i più diffusi client di posta 15
PGP (16) - Riferimenti http://www.pgpi.org www.ietf.org/html.charters/openpgp -charter.html http://www.gnupg.org 16
GPG vs PGP Creazione della coppia di chiavi gpg --gen-key Esportazione di una chiave pubblica gpg --armor --export id_chiave > file.key Importazione di una chiave pubblica gpg -i --import file.key Elenco chiavi pubbliche gpg --list-keys gpg-agent Un daemon per gestire le chiavi private usato come backend for gpg e gpgsm 17
Alternative a PGP PEM (Privacy Enhanced Mail) Standard definito in RFC 1421-1424 Gestione delle chiavi più strutturata (gerarchia di CA) S/MIME Standard definito in RFC 2632-2643 Sistema flessibile che supporta diversi algoritmi crittografici 18
Esame Prova scritta (NON A LIBRO APERTO) della durata di circa 2 ore Domande sulla teoria e sul laboratorio Esercizi Per i frequentanti: Alcuni (brevi) assignment durante i laboratori che possono dare alcuni punti di bonus da aggiungere al voto dello scritto Per i non frequentanti: Prova scritta 19
LABS
Esercizi (1) Che differenza c è tra i comandi cat, more, tail? Esplorate il vostro file system. Qual è il pathname della vostra home directory? Quali sono le sotto-directory di /? I seguenti comandi che effetto producono? Perchè? cd mkdir d1 chmod 444 d1 cd d1 Cosa succede nel caso in cui f2 sia una directory nei comandi mv f1 f2 e cp f1 f2? 21
Esercizi (2) Usando il file di configurazione principale e file.htaccess separati: 1. Creare 2 directory, imgs e docs, nella root directory di Apache. Dentro imgs mettere alcuni file jpeg e un file index.html, in docs mettere solo alcuni file html 2. Fare in modo che nella directory imgs sia possibile visualizzare solo i file jpeg 3. Aggiungere una direttiva in modo che anche il file index.html inserito nella directory imgs sia visibile (mentre tutti gli altri eventuali file.html non siano accessibili) 4. Fare in modo che i file in docs siano visibili solo a richieste che provengono dal vostro indirizzo IP (ottenuto usando il comando ifconfig) 22
Esercizi (3) 1. Nella direttiva <Directory> si deve usare il path assoluto o quello relativo? Giustificare la risposta. 2. Cercare nello user manual a cosa serve la parola chiave Indexes. Provare ad utilizzarla. 3. Quali sono i permessi minimi che si devono dare ad un file e ad una directory nel Web tree per fare in modo che vengano letti tramite richiesta HTTP? 23
Esercizi (4) 1. Creare un file delle password che contenga almeno gli utenti alice e bob 2. Creare una cartella cartella_segreta che contenga un file index.html 3. Fare in modo che solo alice possa leggere il file index.html 4. Fare in modo che sia alice che bob, oppure un utente che fa la richiesta con IP 192.168.13.1 possano leggere il file index.html 5. Fare in modo che bob possa leggere il file index.html solo se fa la richiesta con IP 192.168.13.2 6. Fare in modo che l utente trudy non possa leggere il file 24
Esercizi (5) 1. Provare a richiedere da shell la pagina index.html al Web server www.dti.unimi.it. Analizzare la risposta ottenuta (header, status, ecc.). Provare a fare la stessa richiesta tramite browser e fare un confronto. 2. Si faccia la richiesta del punto 1 chiedendo che la versione del protocollo HTTP da utilizzare sia la 1.1. Come finisce la negoziazione con il server? Quale versione viene utilizzata? 3. Si mandi una richiesta HTTP al server del punto 1, senza chiedere un file particolare. Ora che tipo di risposta si ottiene? 4. Provare a richiedere tramite telnet delle pagine Web ad almeno altri 7 server diversi. Vedere in genere quale versione del protocollo HTTP utilizzano. 25