Skip to content

Latest commit

 

History

History
527 lines (312 loc) · 8.19 KB

slides.md

File metadata and controls

527 lines (312 loc) · 8.19 KB

#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 $k_{B,pri}$

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

($k_{B,pub}$ è disponibile per tutti coloro vogliano contattare Bob)

--

###MESSAGGIO SOLO DA ALICE

Oltre a cifrare , Alice firma m con $k_{A,priv}$

  • 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
$Pub_A$, $ID_A$, $SIG_{ME}$ $Pri_{ME}$
$Pub_{ME}$, $ID_{ME}$ ...

--

###LIVELLO LOCALE: TRUST_DB (1)

associa ad ogni chiave di Pub_ring un livello di fiducia

Keys Levels
$Pub_{someone}$ $trust level$
$Pub_{someoneelse}$ ...
... ...

i valori vengono settati dall'utente, a mano

--

###LIVELLO LOCALE: TRUST_DB (2)

  1. unknown
  2. undefined
  3. untrusted
  4. marginal
  5. full
  6. ultimate

--

###LIVELLO LOCALE: VALIDITY (1)

quanto il possessore del keyring possa ritenere valida la chiave

  1. unknown
  2. untrusted
  3. marginal
  4. 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)

$Master_{Pub}^A$
$ID_A$
$SIG_{M_{Priv}^A}(M_{Pub}^A, ID_A)$
$Sub_{Pub}^A$S
$SIG_{M_{Priv}^A}(M_{Pub}^A, S_{Pub}^A)$
$SIG_{S_{Priv}^A}(M_{Pub}^A, S_{Pub}^A)$

--

##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)

wot

--

##ALCUNI DATI

  • 3'867'397 chiavi totali

--

--

  • 300k nodi isolati
  • ~117 chiavi di media per SCC
  • STRONGSET: 59'466 chiavi

#LET'S DO STUFF

ivenoideawhatimdoing

--

##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

--

##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!

Licenza Creative Commons

<style> .reveal table { color: white; margin: auto; border-collapse: collapse; border-spacing: 0; } .reveal table th { font-weight: bold; } .reveal table th, .reveal table td { text-align: left; padding: 0.2em 0.5em 0.2em 0.5em; border-bottom: 1px solid; } </style>