#GNU PRIVACY GUARD
Marta Feriani
marta.celeste.feriani@gmail.com
Corsi GNU/Linux Avanzati 2016
#COSA FACCIAMO OGGI
--
- introduzione alla cifratura:
- simmetrica
- asimmetrica
- Web of Trust
- GPG the hard way
- daily GPG
##PERCHÈ CIFRARE?
- tenere al sicuro dati sensibili
- miei
- degli altri (aziendali etc.)
- privacy nelle conversazioni
--
-
implementazione di OpenPGP
- __P__retty __G__ood __P__rivacy
-
cosa fa? tante cose
##LA STORIA DI ALICE & BOB
Alice e Bob vogliono scambiarsi messaggi
senza che nessun altro (all'infuori di loro)
possa leggerli
--
##CIFRATURA
--
##1° TENTATIVO PER ALICE & BOB ###CIFRATURA SIMMETRICA
- A sceglie una chiave k
- A cifra il messaggio m per B con k
- A invia m a B
- B riceve m cifrato
- B decifra m con k
- B legge m
--
--
###PROBLEMI CIFRATURA SIMMETRICA
- Sia Alice che Bob devono conoscere k a priori
- k va scambiata di persona
- k ha duplice funzione: cifra/decifra
- per sua natura non deve essere divulgata
--
##ALICE & BOB CI RIPROVANO ###CIFRATURA ASIMMETRICA
- ogni utente (Alice e Bob) dispone di due chiavi
- chiave pubblica: cifra
- chiave privata: decifra
Le due chiavi sono indipendenti tra loro,
dall'una non è possibile ricavare l'altra
--
--
##ALICE & BOB... ###LO SCAMBIO DELLE CHIAVI
- A e B si scambiano le rispettive chiavi pubbliche
ognuno custodisce (gelosamente) la propria chiave privata
--
###MESSAGGIO SOLO PER BOB
- Alice cifra m con chiave pubblica di Bob
$k_{B,pub}$
Solo Bob con la sua privata
può decifrare il messaggio
- A invia m cifrato a B
- B riceve m
- B decifra m con
$k_{B,pri}$ - B legge
--
###THERE'S STILL WORK TO DO
Quando Bob riceve m ha la certezza che il messaggio sia per lui.
Non ha invece garanzie su chi abbia mandato effettivamente m
(
--
###MESSAGGIO SOLO DA ALICE
Oltre a cifrare , Alice firma m con
- Bob riceve m
- B "decifra" la firma di A con
$k_{A,pub}$
Certezza che m sia scritto da A
--
###CIFRATURE A CONFRONTO Simmetrica:
- leggera
- veloce
- scambio delle chiavi di persona
- tante chiavi da memorizzare
Asimmetrica:
- lenta
- 2 chiavi per 2 diversi scopi
- scambio comodo
- facile fingersi qualcun altro
##WEB OF TRUST
--
###TRUST MODEL
gli utenti si comportano da notai
certificano il legame utente, chiave
--
###HOW TO
-
ciascuno si autocertifica
$SIG_{priv,A}(Pub_A, ID_A)$ -
si possono avere altre certificazioni, da altri utenti
$SIG_{priv,B}(Pub_A, ID_A)$
--
###GESTIONE CHIAVI
- distribuzione: servers
- gestione locale: keyrings, trust_db
--
###LIVELLO PUBBLICO: SERVERS
- chiavi memorizzate su servers
- servers connessi tra loro (protocollo di sincronizzazione) interazione con client via HTTP[S] (HKP[S])
- sincronizzazione e propagazione delle chiavi
--
###LIVELLO LOCALE: KEYRINGS
- archivi di chiavi locali:
- chiavi pubbliche (mie, di altri)
- chiavi private
Pub_ring | Sec_ring | |
---|---|---|
|
||
|
... |
--
###LIVELLO LOCALE: TRUST_DB (1)
associa ad ogni chiave di Pub_ring un livello di fiducia
Keys | Levels | |
---|---|---|
... | ||
... | ... |
i valori vengono settati dall'utente, a mano
--
###LIVELLO LOCALE: TRUST_DB (2)
- unknown
- undefined
- untrusted
- marginal
- full
- ultimate
--
###LIVELLO LOCALE: VALIDITY (1)
quanto il possessore del keyring possa ritenere valida la chiave
- unknown
- untrusted
- marginal
- full
--
###LIVELLO LOCALE: VALIDITY (2)
###RULES
Sig Trust Level | Key Validity | |
---|---|---|
ultimate | full | |
full | full | |
marginal | marginal | |
3x marginal | full | |
untrusted | ... |
--
##FORMATO CHIAVI (1)
- generazione chiavi: due coppie
- Primary (pub & priv)
- Subkey (pub & priv)
--
##FORMATO CHIAVI (2)
Convenzione
-
$SIG_{M^A_{Priv}}(m)$ → A firma m -
$AUTH_{M^A_{Pub}}(m)$ → B verifica firma di A -
$ENC_{S^A_{Pub}}(m)$ → B cifra per A -
$DEC_{S^A_{Priv}}(c)$ → A decifra c
--
##CERTIFICATE FORM (RFC 4880)
$Sub_{Pub}^A$S |
--
##FIRME DIVERSE
certificazione identità
- autocertificazione
$SIG_{M_{Priv}^A}(M_{Pub}^A, ID_A)$ - da altri utenti
$SIG_{M_{Priv}^B}(M_{Pub}^A, ID_A)$
--
##FIRME DIVERSE
legame con sottochiavi
$SIG_{M_{Priv}^A}(M_{Pub}^A, S_{Pub}^A)$ $SIG_{S_{Priv}^A}(M_{Pub}^A, S_{Pub}^A)$
--
##MODIFICA CERTIFICATO
- scarico dal server
- appendo in coda la modifica
- rimetto sul server
NB: i server non controllano l'integrità dei certificati
--
##IN CASO DI CATASTROFI ###REVOCATION SIGNATURE
certificati differenti per:
- revoca chiave primaria
- revoca sottochiave
- revoca firma
--
##STATO DELLA WEB OF TRUST
rappresentata come un grafo (orientato)
--
##ALCUNI DATI
- 3'867'397 chiavi totali
--
--
- 300k nodi isolati
- ~117 chiavi di media per SCC
- STRONGSET: 59'466 chiavi
#LET'S DO STUFF
--
##installazione
$ sudo apt-get install gnupg2
--
##GENERAZIONE CHIAVI
$ gpg2 --full-gen-key
--
##DEMO
--
##MANUTENZIONE CHIAVI (1)
operazioni da e verso keyservers
$ gpg2 --send-key <ID> # esporto chiavi
$ gpg2 --search-keys <nome> # cerco chiavi
$ gpg2 --recv-keys <ID> # importo chiavi
$ gpg2 --import <file> # importo da file locale
$ gpg2 --refresh-keys # controllo cambiamenti
--
##DEMO
--
##MANUTENZIONE CHIAVI (2)
$ gpg2 --armor --export <nome> # esporto chiavi
$ gpg2 --gen-revoke <nome> # certificato di revoca
--
##DEMO
##CIFRIAMO COSE! (1)
simmetrica
$ gpg2 --symmetric <nomefile>
$ gpg2 --decrypt <nomefile>
--
##CIFRIAMO COSE! (2)
asimmetrica
$ gpg2 --recipient "nome destinatario" --encrypt <nomefile>
$ gpg2 --output <outputfile> --decrypt <nomefile>
--
##FIRMIAMO COSE!
firma
$ gpg2 --sign <doc>
$ gpg2 --verify
$ gpg2 --detach-sig <doc> # alternativo
$ gpg2 --verify doc.sig <doc>
$ gpg2 --clearsig <doc>
--
##DEMO
--
##GPG E PACCHETTI
- con GPG vengono firmati pacchetti metadata dei repository
- il sistema controlla le firme sui repo in automatico
- si può verificare (a mano) la firma sul singolo .deb
--
##GPG E PACCHETTI
$ gpg2 --verify nomesorgente.dsc # verifica il source
$ debsig-verify nomepck.deb # verifica il pacchetto
--
##GPG & POSTA ###FORMATO E-MAIL
-
header
To: dest@mail.cose From: mitt@mail.cose Subject: gatti
-
body: body della mail (ASCII)
--
##E-MAIL THE HARD WAY
--
##E-MAIL THE EASY WAY
- Thunderbird + Enigmail
- K_9 + OpenKeyChain
- GPG Tools + Apple Mail
- iPGMail
- Outlook + GpgOL
--
#THAT'S ALL FOLKS!