Descrivere la crittografia e il codice hash
Un modo per proteggersi dalle minacce di cybersecurity comuni consiste nel crittografare i dati sensibili o preziosi. La crittografia è il processo di rendere i dati illeggibili e inutilizzabili per i visualizzatori non autorizzati. Per usare o leggere i dati crittografati, è necessario decrittografarlo, che richiede l'uso di una chiave privata. Anche se un utente malintenzionato intercetta o ottiene l'accesso ai dati crittografati, rimane inutile senza la chiave corrispondente.
Tipi di crittografia
Esistono due tipi principali di crittografia: simmetrica e asimmetrica.
Crittografia simmetrica
La crittografia simmetrica usa la stessa chiave per crittografare e decrittografare i dati. Poiché è interessata una sola chiave, la crittografia simmetrica è di tipo computazionale veloce e adatta per crittografare grandi quantità di dati, ad esempio file archiviati in un disco rigido o record in un database.
La sfida principale con la crittografia simmetrica è la distribuzione delle chiavi: entrambe le parti devono accedere alla stessa chiave privata e condividere in modo sicuro tale chiave, soprattutto in una rete, possono essere difficili.
Crittografia asimmetrica
La crittografia asimmetrica usa una coppia di chiavi: una chiave pubblica e una chiave privata. Queste chiavi sono matematicamente correlate, ma non è possibile derivare la chiave privata dalla chiave pubblica.
- I dati crittografati con la chiave pubblica possono essere decrittografati solo con la chiave privata corrispondente.
- I dati firmati con la chiave privata possono essere verificati con la chiave pubblica corrispondente.
Poiché la chiave pubblica può essere condivisa liberamente, la crittografia asimmetrica risolve il problema di distribuzione delle chiavi della crittografia simmetrica. Chiunque può crittografare i dati usando la chiave pubblica, ma solo l'utente, che contiene la chiave privata, può decrittografarlo. La crittografia asimmetrica viene usata in molti protocolli di sicurezza con cui si interagisce quotidianamente, tra cui HTTPS, che protegge i siti Web e la crittografia della posta elettronica.
Firme digitali
La crittografia asimmetrica abilita anche le firme digitali, che verificano sia l'autenticità che l'integrità dei dati. Quando un mittente firma i dati con la chiave privata, chiunque abbia la chiave pubblica del mittente può verificare che:
- I dati provengono dal mittente previsto (autenticità).
- I dati non sono stati modificati dopo la firma (integrità).
Le firme digitali vengono usate per verificare i download del software, autenticare i messaggi di posta elettronica e proteggere documenti e transazioni elettroniche.
Crittografia in base allo stato dei dati
Crittografia per i dati inattivi
I dati inattivi sono dati archiviati in un dispositivo fisico, ad esempio un disco rigido del server, un database o un account di archiviazione cloud. La crittografia dei dati inattivi garantisce che i dati siano illeggibili senza le chiavi necessarie per decrittografarli.
Se un utente malintenzionato venisse in possesso di un disco rigido con dati crittografati, ma non avesse accesso alle chiavi di crittografia, non sarebbe in grado di leggere i dati. Questa protezione rimane anche se il supporto di archiviazione fisico viene rubato o l'account di archiviazione è accessibile senza autorizzazione.
Crittografia per i dati in transito
I dati in transito sono dati che passano da una posizione a un'altra, ad esempio attraverso Internet, tra servizi o su una rete privata. I dati in transito sono vulnerabili all'intercettazione da parte di chiunque possa osservare il traffico di rete.
La crittografia dei dati in transito li protegge dall'eavesdropping e dall'intercettazione. HTTPS è l'esempio più familiare: quando si accede a un sito Web tramite HTTPS, la connessione viene protetta tramite Transport Layer Security (TLS), che garantisce che i dati scambiati tra il browser e il server non possano essere letti da terze parti. Lo stesso principio si applica ai dati che si spostano tra i servizi cloud e le connessioni VPN che proteggono il traffico sulle reti pubbliche.
Crittografia per i dati in uso
I dati in uso fanno riferimento ai dati elaborati attivamente, ad esempio i dati caricati nella memoria (RAM) di un computer o vengono usati da una CPU. La crittografia tradizionale protegge i dati inattivi e in transito, ma i dati vengono in genere decrittografati quando vengono caricati in memoria per l'elaborazione, creando una finestra di potenziale esposizione.
La crittografia dei dati in uso viene ottenuta tramite tecnologie di confidential computing che creano ambienti di esecuzione protetti, talvolta definiti enclave sicuri, in cui i dati possono essere elaborati senza essere esposti anche al sistema operativo o all'hypervisor. Ciò è particolarmente importante negli ambienti multi-tenant in cui diversi clienti possono condividere lo stesso hardware fisico.
Gestione delle chiavi
La crittografia è sicura come le chiavi usate per crittografare i dati. Una chiave di crittografia rubata o esposta rende i dati crittografati accessibili agli utenti malintenzionati, sconfiggendo lo scopo della crittografia. La gestione delle chiavi illustra il modo in cui le chiavi di crittografia vengono generate, archiviate, protette, ruotate e infine ritirate.
Le migliori prassi per la gestione delle chiavi includono:
- Archiviazione delle chiavi separatamente dai dati che proteggono: se le chiavi vengono archiviate insieme ai dati crittografati, un utente malintenzionato che ottiene l'accesso a uno ha automaticamente entrambi.
- Uso di hardware dedicato per l'archiviazione delle chiavi: i moduli di protezione hardware sono dispositivi specializzati e resistenti alle manomissioni progettati appositamente per archiviare e proteggere le chiavi crittografiche.
- Rotazione periodica delle chiavi: la modifica periodica delle chiavi di crittografia limita la quantità di dati esposti in caso di compromissione di una chiave.
- Controllo rigoroso dell'accesso alle chiavi: solo gli utenti e i sistemi autorizzati devono essere in grado di accedere alle chiavi di decrittografia, applicate tramite l'autenticazione avanzata e i principi di accesso con privilegi minimi.
I servizi di gestione delle chiavi cloud, ad esempio Azure Key Vault, offrono un servizio gestito centralizzato per l'archiviazione e la gestione di chiavi di crittografia, certificati e segreti. Questi servizi riducono il rischio di esposizione chiave, supportano flussi di lavoro di rotazione delle chiavi e si integrano con altri servizi cloud per fornire la crittografia senza esporre materiale chiave al codice dell'applicazione o agli amministratori.
Hashing
L'hashing usa un algoritmo per convertire qualsiasi input in una stringa a lunghezza fissa di caratteri denominata hash (o digest). A differenza della crittografia, l'hashing è un processo unidirezionale: non è possibile invertire un hash per recuperare l'input originale. Ogni volta che viene eseguito l'hashing dello stesso input usando lo stesso algoritmo, viene generato lo stesso valore hash, rendendo l'hash un'impronta digitale univoca affidabile per tali dati.
L'hashing è diverso dalla crittografia in quanto non usa chiavi e il valore con hash non può essere invertito ai dati originali. In questo modo l'hashing è utile per gli scenari in cui è necessario verificare i dati senza dover archiviare o leggere il valore originale.
Come l'hashing protegge le password
L'hashing viene ampiamente usato per proteggere le password archiviate. Anziché archiviare la password effettiva di un utente, un sistema archivia solo l'hash di tale password. Quando un utente accede, il sistema esegue l'hash della password immessa e lo confronta con l'hash archiviato. Se gli hash corrispondono, l'autenticazione ha esito positivo, senza che il sistema archivii o trasmetta la password effettiva in testo normale.
Questa operazione è più sicura rispetto all'archiviazione di password in testo normale perché, anche se il database delle password viene rubato, l'utente malintenzionato ottiene solo hash. Tuttavia, l'hashing di base presenta una vulnerabilità nota: poiché le funzioni hash sono deterministiche, gli utenti malintenzionati possono precompilare gli hash per milioni di password comuni e cercarli nelle tabelle, denominate tabelle arcobaleno o attacchi di dizionario, per trovare corrispondenze.
Salt
Per difendersi dagli attacchi precomputti, le password vengono in genere salate prima dell'hashing. Un salt è un valore univoco generato in modo casuale creato per ogni singola password e aggiunto prima dell'hashing. Poiché ogni password ottiene un salt diverso, due utenti con la stessa password producono hash diversi nel database. Ciò rende inefficaci le tabelle arcobaleno precalcolate, poiché l'autore dell'attacco avrebbe bisogno di una tabella di ricerca distinta per ogni possibile valore di salt.
Il salting è una procedura consigliata standard per l'archiviazione sicura delle password ed è necessaria per qualsiasi sistema di autenticazione implementato correttamente.