Crittografia e sicurezza GPG WEB OF TRUST https://www.gnupg.org/gph/en/manual.pdf
Importiamo una chiave pubblica gpg –import alice.gpg pub rsa2048 2017-10-22 [SC] BD7763CDB974A8FEF4BA36BEA7F58287B4154916 uid [ unknown] alice <alice@alice.it> sub rsa2048 2017-10-22 [E] In questo caso l’uid è [unknown], ovvero gpg non si fida della chiave pubblica di alice. Dobbiamo pertanto dirgli di fidarsi gpg –edit-key alice Sign per firmare la chiave con il nostro uid, dopo averla verificata Ora viene mostrato full al posto di unknown e questo si riferisce alla VALIDITA’ DELLA CHIAVE. uid [ full ] alice <alice@alice.it> Ora pertanto possiamo decifrare eventuali documenti firmati da Alice
Verificare una chiave pubblica importata gpg –edit-keys alice fpr otteniamo il fingerprint della chiave. Ci facciamo dare da Alice (mandandole una email) il fingerprint e lo confrontiamo. Se è identifico, possiamo avere un certo livello di sicurezza sulla veridicità della chiave pubblica di Alice
Firmare un documento Il soggetto mittente oltre a cifrare il messaggio per inviarlo al destinatario può anche firmarlo, in modo che il destinatario possa garantire l’autenticità della fonte. Il mittente userà la propria chiave privata per firmare il documento. Il destinatario userà la chiave pubblica del mittente per garantirne l’univocità. Il mittente firmerà il documento gpg -output doc.sig -sign doc Il destinatario decritterà il messaggio come abbiamo visto nel video precedente gpg -output doc -decrypt doc.sig
Abbiamo firmato la chiave manualmente Ma cosa succede se abbiamo tante chiavi da validare? Web Of Trust La verifica viene delegata a persone di cui ci fidiamo che a sua volta delegheranno ad altre persone di cui si fidano fino a 5 livelli. Six Degree of Separation Alice firma la chiave di Bob Bob firma la chiave di Chloe e Mary Se Alice si fida di Bob, allora vorrà dire che si fiderà anche della chiave che firma Bob, senza doverle verificare personalmente. Si fida indirettamente anche delle chiavi di Chloe e Mary
Fiducia nel proprietario della chiave Ci sono diversi livelli di fiducia Unknown => Niente è conosciuto del giudizio del proprietario nella firma delle chiavi Le chiavi nel keyring pubblico che sono state appena importate hanno questo livello di fiducia none => Il proprietario è conosciuto come persona che non firma le chiavi correttamente. marginal => Il proprietario comprende l’importanza della firma delle chiavi e pertanto le valida prima di firmarle full =>Il proprietario ha un’eccellente conoscenza della firma delle chiavi e la sua firma è come se fosse la nostra
Aggiorniamo la fiducia gpg –edit-key alice Trust Una chiave è valida se 1. è firmata da un numero sufficiente di chiavi valide, ovvero - chiavi che hai firmato personalmente O che sono state firmate da una chiave fully trusted O che sono state firmate tra 3 chiavi con trust marginal e 2. il percorso della chiavi firmate dalla chiave presa in considerazione fino alla tua chiave personale è di 5 passi o inferiore 0 passi: è stata firmata da te personalmente 1 passo: Trust Introducers 2 passi Meta introducers 3 passi Meta-Meta introducers Generalmente una trust signature di livello n certifica che una chiave può emettere firme di livello n-1
Tsign Firmare una chiave (validità) e stabilire anche la fiducia (trust) nel proprietario gpg –edit-key alice tsign 1) Decidere quanta fiducia riporre nella capacità di questo utente di verificare le chiavi di altri utenti (consultando passaporti, controllando le impronte digitali da diverse sorgenti, ecc) 1 = fiducia marginale 2 = fiducia piena 2) Inserire il livello di affidabilità di questa firma. Un livello superiore a 1 consente alla chiave che si sta firmando di creare firme affidabili a vostro nome.
Vedere il proprio Web Of Trust gpg –update-trust-db gpg: necessari: 3 marginali, 1 completi, modello di fiducia PGP gpg: livello: 0 valido: 11 firmato: 1 fiducia: 0-, 0q, 0n, 0m, 0f, 11u gpg: livello: 1 valido: 1 firmato: 0 fiducia: 0-, 0q, 0n, 0m, 1f, 0u
Web of Trust - Riassunto Il proprietario di una Chiave GPG nell’Uid rappresenta la sua identità tramite il nome, cognome, email, foto. Una chiave è autentica se abbiamo verificato con il proprietario che la possiede Prima di firmare una chiave è necessario verificarla, per esempio scambiandosi il fingerprint La firma di una chiave ne garantisce l’autenticità La firma di una chiave è una certificazione (validità). Tramite la validità assicuriamo a GPG che la chiave appartiene al legittimo proprietario Possiamo fidarci di un proprietario di una chiave e accettare la sua certificazione full (completamente) o marginal (parzialmente) Una chiave è valida se ha un numero sufficiente di certificazioni attendibili Possiamo delegare la fiducia
Distribuzione della chiave pubblica Email, sito web personale Ma è più comodo un key server KeyServer http://hkps.pool.sks-keyservers.net/ In questo sito possiamo trovare le chiavi pubbliche di chiunque anche quelle fasulle e possiamo caricare anche la nostra Per usare una chiave dobbiamo fidarci del proprietario La certificazione è legata a un Uid nome, indirizzo, email o foto. Rimane valida finché non viene revocata
Conservazione della chiave privata Non deve essere salvata su dispositivi soggetti a furto (come smartphone, portatili o tablet) Si potrebbe però usare la chiave privata anche su dispositivi mobili Si usano in questo caso le sottochiavi che possono essere scollegate dalla chiave principale Creiamo pertanto un’altra sottochiave così da avere due sottochiavi, una per firmare e una per cifrare Gpg –edit-key alice Addkey Specifichiamo poi una passphrase specifica per la sottochiave gpg – passwd alice Esportiamo in un file subkeys.gpg solo le sottochiavi Gpg –export-secret-subkeys alice > subkeys.gpg
Avviamo un GnuPG Temporaneo Creiamo una cartella temporanea mkdir -m 700 .gnupg-temp Indichiamo a gpg di puntare alla cartella gnupg-temp per importare le sottochiavi gpg –homedir .gnupg-temp –import subkeys.gpg Elenchiamo le chiavi del nostro keyring temporaneo gpg –homedir .gnupg-temp -K Arrestate il daemon gpg e rimuovete la cartella temporanea gpg-connect-agent –homedir .gnupg-temp KILLAGENT /bye Rm -r .gnupg-temp In ogni dispositivo dove dobbiamo decifrare i nostri messaggi gpg –import subkeys.gpg
Conservare la chiave primaria segreta La chiave primaria segreta è sempre bene tenerla offline, in un computer non collegato a Internet e sicuro. Un sistema per la conservazione della chiave è Linux Tails, una distro Linux live che mantiene il portachiavi al sicuro in volume persistente. Potete trovare maggiori informazioni a questo link https://tails.boum.org/doc/first_steps/persistence/
Revochiamo la chiave Dopo la creazione di una chiave con –gen-key Viene automaticamente creato un certificato di revoca che viene salvato in .gnupg/openpgp-revocs.d E’ rinominato con la stessa impronta digitale della chiave con l’aggiunta del suffisso .rev Possiamo creare manualmente un certificato di revoca gpg –gen-revoke alive > alice.rev Per usare il certificato di revoca si usa gpg –import alice.rev