Crittografia e sicurezza CONCETTI BASE DI CRITTOGRAFIA INTRODUZIONE A GPG https://www.gnupg.org/gph/en/manual.pdf
Che cos’è la crittografia Cifratura: rendere il testo illeggibile a chiunque non conosca la chiave per poterlo decifrare. Crea un testo cifrato. Decifratura: usare la chiave per poter decifrare il messaggio. Si ottiene il testo in chiaro. Permette di cifrare e decifrare messaggi secondo un determinato algoritmo, in modo che tali informazioni che viaggiano su un mezzo altamente insicuro come il web possano essere lette solo dal legittimo destinatario
Diversi tipi di crittografia simmetrica Chiave pubblica Misto (gpg)
Chiave Simmetrica Mittente e destinatario usano la stessa chiave. Una volta che i due soggetti si sono accordati, sulla chiave, il mittente cifra il messaggio usando la chiave, la manda al ricevente e il ricevente decifra il messaggio usando la chiave inviata dal ricevente. La macchina Enigma usava una chiave simmetrica e giornalmente venivano distribuite chiavi. L’algoritmo di Cesare è un altro esempio di chiave Simmetrica Si cifra il messaggio sostituendo ogni lettera con la lettera posizionata n posizioni (n si può sostituire) successive nell’alfabeto. AB chiave 3 diventa DF DF diventa AB
Chiave Pubblica Risolve il problema nella distribuzione della chiave. Si usa una coppia di chiavi per mandare messaggi. Le due chiavi appartengono alla persona che riceve il messaggio. Una chiave è pubblica e può essere mandata a tutti L’altra chiave è segreta e deve essere tenuta custodita dal proprietario. Chi invia un messaggio cifra il messaggio usando la chiave pubblica e una volta cifrato, solo la chiave privata del destinatario può essere usata per decifrare il messaggio.
Sistemi ibridi (come GPG) GPG è un sistema di crittografia "ibrido", che combina algoritmi a chiave simmetrica a causa della loro velocità e algoritmi a chiave pubblica per la facilità di scambio delle chiavi: ogni volta che si deve cifrare un messaggio viene generata una chiave di sessione (utilizzata un'unica volta, per l'algoritmo simmetrico) che viene a sua volta cifrata con la chiave pubblica del destinatario. Si noti come questo passaggio renda impossibile la lettura del messaggio anche al mittente (a meno che questo non cifri la chiave di sessione anche con la propria chiave pubblica, opzione che è possibile abilitare). Il destinatario pertanto userà la propria chiave privata per recuperare la session key, che a sua volta verrà utilizzata da PGP per decifrare il testo. In sintesi https://it.wikipedia.org/wiki/GNU_Privacy_Guard
Che cos’è PGP E GPG E’ stata creata Phil Zimmermann nel 1991 Pretty Good Privacy Oggi è un software proprietario detenuto dalla Symantec OpenPGP è lo standard libero per l’invio di email crittografate GPG è uno dei software che implementa lo standard OPENPGP. GNU Privacy Guard. E’ software libero. E’ utilizzato anche dai package manager per la verifica della correttezza dei pacchetti software (vedremo più avanti in apt tale verifica) Si può usare sia per cifrare i messaggi sia per firmarli, in modo da garantire che un certo file o messaggio provenga da una fonte affidabile Pgp funziona in questo modo. E’ necessario avere a disposizione una coppia di chiavi (una chiave pubblica per cifrare il messaggio e una chiave privata per poter decifrare il messaggio. La chiave pubblica pertanto deve essere mandata a tutti quelli che ci devono scrivere, in modo che possano cifrare il messaggio che solo il destinatario potrà leggere. Una volta ricevuto il messaggio, solo il ricevente potrà poi decrittare il messaggio usando la sua chiave privata Le chiave pubbliche sono contenute in certificati che specificano informazioni sull’utente che ha creato la chiave o la firma della stessa (ID UTENTE, email, nome, cognome, altre informazioni). All’interno della chiave pubblica ci sono anche sottochiavi indipendenti che consentono di utilizzare chiavi diverse per la firma e la crittografia.
Prime configurazioni di GPG Creiamo un nuovo utente sulla nostra distro linux per avere un ambiente pulito sudo useradd -m alice //creiamo il nuovo utente alice sudo -i -u alice //apriamo una nuova shell come utente alice Il tool gpg è preinstallato nelle distro linux e gestisce tutte le preferenze, impostazioni e chiavi (private e pubbliche) nella cartella nascosta .gnupg all’interna della home dell’utente. In questo caso /home/alice Tale cartella è installata in automatico la prima volta che l’utente esegue questo tool, ma si può anche creare manualmente in modo da specificarne i permessi mkdir -m 700 .gnupg usando 700 specifichiamo che i permessi di scrittura, lettura ed esecuzione appartengono solo al proprietario (fate riferimento ai video precedenti sui permessi in Linux). Per generare la chiave è necessario che il sistema abbia a disposizione dei byte casuali, altrimenti impiegherà troppo tempo nella generazione della chiave e l’operazione di generazione della chiave potrebbe andare in timeout. Installiamo pertanto rng-tools Apt install rng-tools E poi runniamo sudo rngd -r /dev/urandom prima di generare la chiave
La chiave Una chiave è il value che lavora con uno specifico algoritmo di crittografia per ottenere un particolare testo cifrato Le chiavi sono di solito grandi numeri. Sono misurate in bit, per esempio 2048 bit , 4096 bit. Più grande è la chiave, più sicuro è il testo cifrato Le chiavi sono cifrate GPG mantiene le chiavi in due file, uno per le chiavi pubbliche e uno per le chiavi private. Questi file sono chiamati keyrings.
Generare una nuova coppia di chiavi gpg –gen-key Il sistema chiederà varie informazioni Il tipo di algoritmo da utilizzare La lunghezza della chiave l’uso della chiave e della sottochiave (per firmare o per crittografare o entrambe) Nome Email Passphrase per proteggere il portachiavi La data di scadenza Queste impostazioni possiamo specificarle anche tramite un file Usando gpg –verbose –gen-key –batch alice.keyparams
File per generare una chiave Key-Type: RSA Key-Length: 4096 Key-Usage: sign Subkey-Type: RSA Subkey-Length: 4096 Subkey-Usage: encrypt Name-Real: Alice Name-Email: prova@prova.it Passphrase: provaprova Expire-Date: 1y gpg --verbose --gen-key --batch alice.keyparams
Scambiarsi le chiave Gpg –list-keys Vediamo tutte le chiavi pubbliche in nostro possesso Per inviarla un’altra persona in modo che ci possa scrivere, Dobbiamo esportarla gpg -output alice.gpg -export alice@cyb.org La chiave viene esportata nel file alice.gpg in formato binario. Se la vogliamo in formato ascii, leggibile con un editor di testo Aggiungiamo al comando l’opzione –armor ---BEGIN PGP PUBLIC KEY BLOCK--- Version: GnuPG v0.9.7 (GNU/Linux) Comment: For info see http://www.gnupg.org [...] ---END PGP PUBLIC KEY BLOCK--- Noi per comunicare con un altra persona dobbiamo importare la sua chiave pubblica in questo modo gpg -import blake.gpg Parleremo nel prossimo video in dettaglio su come accertarsi che sia la chiave pubblica corretta della persona cui dobbiamo scrivere o non sia una chiave pubblica che finge di essere quella del nostro destinatario (Web of Trust)
Cifrare e decifrare documento (chiave pubblica) Per cifrare un messaggio e inviarlo ad Alice, dobbiamo avere la sua chiave pubblica. Alice poi decifrerà il messaggio con la propria chiave privata. Per cifrare un documento usiamo l’opzione –encrypt. Il documento viene anche compresso in modo da garantire maggiore sicurezza gpg -output doc.gpg -encrypt -recipient blake@cyb.org doc Per decifrare un documento dobbiamo avere la chiave privata gpg -output doc -decrypt doc.gpg
Cifrare e decifrare un documento (chiave simmetrica) gpg -output doc.gpg -symmetric doc Ci chiederà il passphrase per decifrare il documento Il destinatario decifrà il messaggio nello stesso modo di prima gpg -output doc -decrypt doc.gpg