Gli algoritmi crittografici moderni sono, in pratica, inattaccabili. Le chiavi no. Una chiave AES-256 perfetta non serve a nulla se è scritta in un file di configurazione pubblicato per errore, se è salvata accanto ai dati che dovrebbe proteggere o se l'unica copia si trova su un disco guasto. Per questo chi lavora sulla sicurezza dice spesso che la crittografia trasforma un problema di protezione dei dati in un problema di gestione delle chiavi.
Il ciclo di vita di una chiave
Una chiave attraversa fasi precise, e ognuna ha i suoi rischi.
1. Generazione
La chiave deve essere prodotta da un generatore di numeri casuali crittograficamente sicuro. Una chiave derivata da un orario, da un contatore o da una funzione casuale pensata per i videogiochi può essere indovinata. Se la chiave deve derivare da una password, si usano funzioni di derivazione apposite, lente e con sale.
2. Custodia
È la fase più delicata. Le opzioni, in ordine crescente di protezione, sono:
- file su disco, protetto da permessi e possibilmente cifrato con una password;
- archivi di sistema dedicati, come il portachiavi del sistema operativo;
- servizi di gestione delle chiavi (KMS) offerti dalle piattaforme cloud;
- moduli hardware di sicurezza (HSM), smart card e token, da cui la chiave privata non può essere estratta.
Con un HSM o una smart card l'applicazione non vede mai la chiave: invia i dati da cifrare o firmare e riceve il risultato. Anche se il server viene compromesso, l'attaccante non può portarsi via la chiave, al massimo usarla finché ha accesso.
3. Distribuzione
Le chiavi simmetriche condivise vanno trasmesse attraverso canali protetti, idealmente tramite uno scambio di chiavi o cifrandole con una chiave pubblica. Inviare una password o una chiave per email, nello stesso messaggio del file cifrato, annulla la protezione.
4. Uso
Ogni chiave dovrebbe avere un solo scopo: una per cifrare, una per firmare, una per ambiente. Usare la stessa chiave per cose diverse crea interazioni impreviste e, se viene compromessa, moltiplica i danni.
5. Rotazione
Le chiavi andrebbero sostituite periodicamente o dopo eventi significativi, come l'uscita di un collaboratore che vi aveva accesso. La rotazione limita la quantità di dati esposta se una chiave viene compromessa e costringe a mantenere le procedure in efficienza.
6. Revoca e distruzione
Una chiave compromessa va revocata subito e comunicata a chi la usa. Una chiave non più necessaria va distrutta in modo sicuro, insieme alle sue copie. Ma attenzione: distruggere una chiave significa rendere illeggibili per sempre i dati cifrati con essa. A volte è proprio ciò che si vuole, come nella "cancellazione crittografica" di un disco.
La cifratura a busta
Un modello molto diffuso, soprattutto nel cloud, è la cifratura a busta (envelope encryption):
- ogni file o record viene cifrato con una propria chiave dati;
- la chiave dati viene cifrata con una chiave master, custodita in un KMS o in un HSM;
- accanto ai dati si conserva solo la chiave dati cifrata.
Per leggere un file, l'applicazione chiede al KMS di decifrare la chiave dati. Così la chiave master non lascia mai il modulo protetto, gli accessi vengono registrati e ruotare la chiave master non richiede di ricifrare tutti i dati, ma solo le chiavi dati.
Gli errori più comuni
- Chiavi nel codice sorgente: chiavi API e password inserite nel codice finiscono nei repository, nelle copie di backup e, a volte, in repository pubblici. Una volta pubblicata, una chiave va considerata compromessa anche se il file viene cancellato, perché resta nella cronologia.
- Chiave accanto ai dati: un backup cifrato salvato nella stessa cartella del file con la chiave non protegge nulla.
- Nessun backup della chiave: la cifratura funziona perfettamente anche contro il legittimo proprietario. Una chiave persa equivale a dati persi.
- Troppe persone con accesso: ogni copia di una chiave e ogni persona che la conosce aumentano il rischio.
- Assenza di inventario: non sapere quali chiavi esistono, dove sono e a cosa servono rende impossibile ruotarle o revocarle in caso di incidente.
Un esempio concreto
Un piccolo studio professionale decide di cifrare i backup. Una gestione ragionevole potrebbe essere questa:
| Elemento | Scelta |
|---|---|
| Algoritmo | AES-256 in modalità autenticata, tramite software di backup affidabile |
| Chiave | Generata dal software, protetta da una passphrase lunga |
| Custodia della passphrase | Gestore di password condiviso solo con due responsabili |
| Copia di emergenza | Stampata e conservata in cassaforte, fuori dall'ufficio |
| Rotazione | A ogni cambio dei responsabili |
| Verifica | Prova di ripristino periodica con la chiave di emergenza |
Nessuno di questi passaggi richiede competenze avanzate, ma insieme fanno la differenza tra una cifratura reale e una illusoria.
In sintesi
- La sicurezza della crittografia dipende quasi sempre dalla gestione delle chiavi, non dall'algoritmo.
- Ogni chiave ha un ciclo di vita: generazione, custodia, distribuzione, uso, rotazione, revoca e distruzione.
- HSM, smart card e KMS impediscono l'estrazione delle chiavi più importanti.
- La cifratura a busta separa le chiavi dati dalla chiave master e semplifica la rotazione.
- Chiavi nel codice, senza backup o accanto ai dati sono gli errori più frequenti.