Che cosa è la crittografia e come funziona?
La crittografia viene oggi utilizzata anche nelle app più semplici. Dal momento che è così semplice hackerare le tue informazioni online, i vari tipi di crittografia sono i migliori strumenti disponibili per proteggere le tue informazioni.
La maggior parte delle applicazioni e dei programmi utilizza qualche tipo di crittografia. Le migliori VPN utilizzano AES con chiavi a 256 bit, e questo è uno dei motivi per cui le VPN sono il modo migliore per proteggere la tua attività online.
Anche altre app popolari, come WhatsApp e Gmail, usano una crittografia.
Ma, anche se tutti usiamo la crittografia nella nostra vita quotidiana, la maggior parte di noi non sa come funziona.
Per aiutarci a capire come funziona la crittografia, faremo un esempio pratico.
Il problema dei canali aperti
Immagina una chat room standard in cui gli utenti possano comunicare tra loro tramite messaggi di testo. Come potremmo costruire una chat room sicura con messaggi crittografati?
La prima implementazione è un semplice canale di comunicazione basato su TCP. Dal momento che non c'è sicurezza, ogni messaggio inviato dagli utenti è aperto agli attacchi.
Così, quando Alice e Bob si scrivono, gli hacker possono semplicemente entrare nella loro conversazione e spiare. Questo attacco viene definito Man in the Middle. Gli hacker possono anche modificare i messaggi e reindirizzarli.
Questo è possibile perché il canale di comunicazione predefinito passa i messaggi in testo semplice. La stessa cosa accade con tutte le comunicazioni HTTP sulle reti Wi-Fi aperte. Chiaramente, abbiamo bisogno di un sistema migliore.
Crittografia simmetrica
La crittografia simmetrica utilizza un algoritmo che converte il messaggio originale in chiaro in un messaggio crittografato con testo cifrato utilizzando una chiave di crittografia. La stessa chiave viene utilizzata dal destinatario per convertire il testo cifrato in testo normale. Applichiamo questo concetto al nostro esempio.
Se Alice vuole inviare un messaggio a Bob, lo crittografa con una chiave simmetrica. Quando Bob lo riceve, usa la stessa chiave per decifrare il messaggio. Senza la chiave, gli utenti malintenzionati non possono accedere alla comunicazione crittografata tra i due utenti, e questo la manterrà riservata.
Solitamente, la chiave simmetrica viene generata a ogni sessione e non è valida per le comunicazioni successive. Possiamo chiamarla chiave di sessione.
Tuttavia, questo approccio ha degli svantaggi:
- Scalabilità: la nostra soluzione non è scalabile. Se 1.000 utenti vogliono comunicare tra loro, ognuno di loro avrebbe bisogno di 999 chiavi diverse per stabilire un canale sicuro.
- Distribuzione delle chiavi: abbiamo ipotizzato che entrambe le parti abbiano accesso alla chiave simmetrica, ma come ottengono questa chiave in primo luogo? Se Alice genera una chiave simmetrica (chiave di sessione) e la invia a Bob, l'utente malintenzionato potrebbe intercettarla e decrittografare qualsiasi altra comunicazione.
Allora qual è la fase successiva?
Crittografia asimmetrica
La crittografia asimmetrica utilizza due chiavi: una privata e una pubblica. Quando il testo in chiaro viene crittografato con una chiave pubblica, può essere decodificata solo la corrispondente chiave privata e viceversa.
Questo permette di risolvere il problema di due chiavi simmetriche. La crittografia asimmetrica è più lenta della crittografia simmetrica, in genere, sono utilizzate di pari passo entrambe. Vediamo come si fa:
Ogni utente ha una coppia di chiavi pubblica-privata. La chiave pubblica è disponibile e nota a tutti, ma quella privata è riservata e protetta dal proprietario.
Se Alice vuole inviare un messaggio a Bob, per prima cosa crea una chiave di sessione simmetrica. Quindi crittografa il messaggio con la chiave pubblica di Bob. Poiché Bob possiede la chiave privata corrispondente, solo lui può decifrare il messaggio e ottenere la chiave di sessione.
Da quel momento in poi, tale chiave di sessione può essere utilizzata per crittografare e decrittografare i messaggi tra i due. Ciò risolve il problema della distribuzione delle chiavi senza compromettere la velocità, poiché la crittografia asimmetrica più lenta viene utilizzata solo per la stretta di mano iniziale.
Abbiamo anche risolto il problema della scalabilità poiché tutti hanno bisogno di una sola coppia di chiavi pubblica-privata per comunicare tra loro.
Ora il sistema è notevolmente migliorato, ma non è ancora completamente sicuro. Abbiamo ancora problemi con:
- Autenticazione: stiamo usando la chiave pubblica di Bob come punto di partenza, ma come l'abbiamo ottenuta? La chiave pubblica che abbiamo ricevuto inizialmente poteva provenire da Bob o da un imitatore, un hacker. Quindi anche se comunichiamo in sicurezza, lo facciamo con la persona sbagliata.
- Integrità dei dati: il messaggio potrebbe essere modificato durante il trasferimento dei dati. Dobbiamo assicurarci che i dati non siano stati manomessi.
Certificati e firme digitali
L'autenticazione richiede un sistema di fiducia. Un'autorità di certificazione (CA) affidabile garantisce che una chiave pubblica appartenga a una persona specifica. Ciascuno degli utenti del sistema registra un certificato digitale con l'autorità di certificazione (CA). Questo contiene le informazioni sull'identità del proprietario e una chiave pubblica.
Quindi, se Alice vuole comunicare con Bob, può verificare con la CA che la chiave pubblica che ha ricevuto appartenga effettivamente a Bob. Questo è il modo in cui funziona anche HTTPS su Internet. Un certificato radice è collegato a vari certificati figli con firme digitali (descritto di seguito).
Quindi, come facciamo a sapere che il certificato ricevuto proviene dalla CA radice e non dall'hacker? In genere, i certificati radice di una CA attendibile sono codificati nel browser, che ci fornisce una base di riferimento affidabile.
Il problema dell'integrità dei dati può essere risolto utilizzando le firme digitali (da non confondere con i certificati digitali).
Se Alice vuole inviare un messaggio a Bob, prima crea una chiave di sessione e la crittografa con quella pubblica di Bob. Chiamiamo questo pacchetto di dati PART1. Quindi, crea un hash del messaggio utilizzando uno dei numerosi algoritmi di hash disponibili (MD5 / SHA256). Un hash del messaggio è una conversione unidirezionale da un byte di lunghezza variabile a uno di lunghezza fissa.
Non è possibile ottenere il messaggio originale dall'hash ed è statisticamente improbabile che due messaggi abbiano lo stesso valore hash.
Dopo aver creato l'hash, Alice lo crittografa con la sua chiave privata. Questa è definita firma digitale dal momento che può essere utilizzata per verificare che il messaggio provenga da Alice e non sia stato manomesso.
La firma digitale e il messaggio originale vengono quindi crittografati con la chiave di sessione. Chiamiamo questa chiave PART2. Ecco cosa abbiamo ora:
PART1 = BOB’S_PUBLIC_KEY -> (SESSION_KEY)
PART2 = SESSION_KEY -> (MESSAGE + DIGITAL_SIGNATURE)
Alice invia sia PART1 che PART2 a Bob. Dal momento che possiede la chiave privata, solo Bob può decrittografare PART1 e accedere a SESSION_KEY.
Successivamente, utilizza questa chiave di sessione per decrittografare PART2 e recuperare il messaggio e la firma digitale. Quindi utilizza la chiave pubblica di Alice per decrittografare la firma digitale e recuperare l'hash del messaggio. Bob calcola l'hash MESSAGGIO e lo confronta con quello della fase precedente.
Se entrambi gli hash corrispondono, significa che l'integrità dei dati è stata preservata e non c'è stata alcuna manomissione.
Come puoi vedere, ora abbiamo costruito un sistema completamente sicuro.
Utilizzando certificati e firme digitali, possiamo creare un sistema di autenticazione crittografato rapido, sicuro, confidenziale e scalabile.
Ora che sai come funziona la crittografia, dai un’occhiata alle nostre VPN preferite e la vedrai in azione.
Inviaci un commento su come migliorare questo articolo. Il tuo feedback è importante!