La crittografia: che cos’è
La crittografia fornisce comunicazioni sicure in presenza di terze parti dannose, note come avversari. La crittografia utilizza un algoritmo e una chiave per trasformare un input (es. testo in chiaro) in un output crittografato (es. testo cifrato). Un dato algoritmo trasformerà sempre lo stesso testo in chiaro nello stesso testo cifrato se viene utilizzata la stessa chiave. Gli algoritmi sono considerati sicuri se un utente malintenzionato non è in grado di determinare alcuna proprietà del testo in chiaro o della chiave, dato il testo cifrato. Un utente malintenzionato non dovrebbe essere in grado di determinare nulla su una chiave dato un gran numero di combinazioni di testo in chiaro/testo cifrato che hanno utilizzato la chiave.
Qual è la differenza tra crittografia simmetrica e asimmetrica?
Con la crittografia simmetrica, la stessa chiave viene utilizzata sia per la crittografia che per la decrittografia. Un mittente e un destinatario devono già disporre di una chiave condivisa nota a entrambi. La distribuzione delle chiavi è un problema complicato ed è stato l’impulso per lo sviluppo della crittografia asimmetrica. Con la crittografia asimmetrica, vengono utilizzate due chiavi diverse per la crittografia e la decrittografia. Ogni utente in un sistema crittografico asimmetrico ha sia una chiave pubblica che una chiave privata. La chiave privata è sempre tenuta segreta, ma la chiave pubblica può essere distribuita liberamente. I dati crittografati con una chiave pubblica possono essere decifrati solo con la chiave privata corrispondente. Quindi, l’invio di un messaggio a John richiede la crittografia di quel messaggio con la chiave pubblica di John. Solo John può decifrare il messaggio, poiché solo John ha la sua chiave privata. Qualsiasi dato crittografato con una chiave privata può essere decrittografato solo con la chiave pubblica corrispondente. Allo stesso modo, Jane potrebbe firmare digitalmente un messaggio con la sua chiave privata e chiunque abbia la chiave pubblica di Jane potrebbe decrittografare il messaggio firmato e verificare che sia stata effettivamente Jane a inviarlo. Simmetrico è generalmente molto veloce e ideale per crittografare grandi quantità di dati (ad esempio, un’intera partizione del disco o database). Asimmetrico è molto più lento e può crittografare solo parti di dati inferiori alla dimensione della chiave (in genere 2048 bit o inferiori). Pertanto, la crittografia asimmetrica viene generalmente utilizzata per crittografare chiavi di crittografia simmetriche che vengono quindi utilizzate per crittografare blocchi di dati molto più grandi. Per le firme digitali, la crittografia asimmetrica viene generalmente utilizzata per crittografare gli hash dei messaggi anziché interi messaggi. Un sistema crittografico prevede la gestione delle chiavi crittografiche, inclusa la generazione, lo scambio, l’archiviazione, l’uso, la revoca e la sostituzione delle chiavi.
Quali problemi risolve la crittografia?
Un sistema sicuro dovrebbe fornire diverse garanzie come riservatezza, integrità e disponibilità dei dati, nonché autenticità e non ripudio. Se usata correttamente, la crittografia aiuta a fornire queste assicurazioni. La crittografia può garantire la riservatezza e l’integrità sia dei dati in transito che dei dati inattivi. Può anche autenticare tra loro mittenti e destinatari e proteggersi dal ripudio. I sistemi software hanno spesso più endpoint, in genere più client e uno o più server back-end. Queste comunicazioni client/server avvengono su reti che non possono essere considerate attendibili. La comunicazione avviene su reti pubbliche aperte come Internet o reti private che possono essere compromesse da aggressori esterni o da insider dannosi. Può proteggere le comunicazioni che attraversano reti non affidabili. Esistono due tipi principali di attacchi che un avversario può tentare di eseguire su una rete. Gli attacchi passivi coinvolgono un utente malintenzionato semplicemente in ascolto su un segmento di rete e nel tentativo di leggere informazioni riservate mentre viaggia. Gli attacchi passivi possono essere online (in cui un utente malintenzionato legge il traffico in tempo reale) o offline (in cui un utente malintenzionato acquisisce semplicemente il traffico in tempo reale e lo visualizza in un secondo momento, magari dopo aver trascorso del tempo a decrittografarlo). Gli attacchi attivi coinvolgono un utente malintenzionato che impersona un client o un server, intercetta le comunicazioni in transito e visualizza e/o modifica i contenuti prima di trasmetterli alla destinazione prevista (o eliminarli completamente). Le protezioni di riservatezza e integrità offerte dai protocolli crittografici come SSL/TLS possono proteggere le comunicazioni da intercettazioni e manomissioni dannose. Le protezioni di autenticità garantiscono che gli utenti stiano effettivamente comunicando con i sistemi come previsto. Ad esempio, stai inviando la password dell’online banking alla tua banca oa qualcun altro? Può essere utilizzato anche per proteggere i dati inattivi. I dati su un disco rimovibile o in un database possono essere crittografati per impedire la divulgazione di dati sensibili in caso di smarrimento o furto del supporto fisico. Inoltre, può anche fornire protezione dell’integrità dei dati inattivi per rilevare manomissioni dannose.
Quali sono i principi?
Il principio più importante da tenere a mente è che non dovresti mai tentare di progettare il tuo sistema crittografico. I crittografi più brillanti del mondo (tra cui Phil Zimmerman e Ron Rivest) creano regolarmente sistemi crittografici con gravi falle di sicurezza. Affinché un criptosistema sia considerato “sicuro”, deve affrontare un attento esame da parte della comunità della sicurezza. Non fare mai affidamento sulla sicurezza attraverso l’oscurità o il fatto che gli aggressori potrebbero non essere a conoscenza del tuo sistema.
Ricorda che insider malevoli e aggressori determinati tenteranno di attaccare il tuo sistema. Le uniche cose che dovrebbero essere “segrete” quando si tratta di un sistema crittografico sicuro sono le chiavi stesse. Assicurati di adottare le misure appropriate per proteggere tutte le chiavi utilizzate dai tuoi sistemi. Non archiviare mai le chiavi di crittografia in chiaro insieme ai dati che proteggono. È come chiudere a chiave la porta d’ingresso e mettere la chiave sotto lo zerbino. È il primo posto in cui un attaccante guarderà.
Ecco tre metodi comuni per proteggere le chiavi (dalla meno sicura alla più sicura):
- Archivia le chiavi in un filesystem e proteggile con elenchi di controllo di accesso (ACL) avanzati. Ricordati di aderire al principio del privilegio minimo.
- Crittografa le tue chiavi di crittografia dei dati (DEK) con una seconda chiave di crittografia della chiave (KEK). La KEK deve essere generata utilizzando la crittografia basata su password (PBE). Una password nota a un numero minimo di amministratori può essere utilizzata per generare una chiave utilizzando un algoritmo come bcrypt, scrypt o PBKDF2 e utilizzata per avviare il crittosistema. Ciò elimina la necessità di archiviare la chiave non crittografata ovunque. Un modulo di sicurezza hardware (HSM) è un’appliance hardware a prova di manomissione che può essere utilizzata per archiviare le chiavi in modo sicuro. Il codice può effettuare chiamate API a un HSM per fornire chiavi quando necessario o per eseguire la decrittografia dei dati sull’HSM stesso.
- Assicurati di utilizzare solo algoritmi, punti di forza e modalità operative conformi alle migliori pratiche del settore. Lo standard di crittografia avanzata (AES) (con chiavi a 128, 192 o 256 bit) è lo standard per la crittografia simmetrica. RSA e crittografia a curva ellittica (ECC) con chiavi di almeno 2048 bit sono lo standard per la crittografia asimmetrica. Assicurati di evitare modalità operative non sicure come AES in modalità Electronic Codebook (ECB) o RSA senza imbottitura.