La crittografia è la scienza che studia le tecniche per proteggere le informazioni, rendendole leggibili solo a persone autorizzate. Il termine deriva dal greco kryptós (nascosto) e gráphein (scrivere): letteralmente, scrittura nascosta.
Il suo obiettivo è garantire alcune proprietà di sicurezza, fra cui:
La crittografia ha radici profonde. Già nell'antico Egitto si usavano geroglifici non standard per oscurare testi; i Romani impiegavano il celebre cifrario di Cesare, che sostituisce ogni lettera con quella tre posizioni più avanti nell'alfabeto (ROT).
Nel Medioevo e nel Rinascimento la crittografia divenne uno strumento diplomatico e militare: Leon Battista Alberti inventò il primo disco cifrante polialfabetico nel 1467, anticipando i sistemi che avrebbero dominato i secoli successivi.
La svolta moderna arriva con la Seconda Guerra Mondiale: la macchina Enigma tedesca, e soprattutto la sua decifrazione da parte di Alan Turing, non solo cambiò le sorti del conflitto ma pose le basi per l'informatica moderna con la nascita della prima "macchina computer".
Negli anni '70 nacque la crittografia contemporanea: DES (1977) fu il primo standard crittografico pubblico, mentre la pubblicazione dello studio di Diffie e Hellman (New Directions in Cryptography, 1976) rivoluzionò il campo introducendo il concetto di chiave pubblica. Oggi è alla base dell'Internet sicuro.
Tutta la crittografia moderna si fonda su un principio enunciato da Auguste Kerckhoffs nel 1883:
La sicurezza di un crittosistema non dipende dal tenere segreto l'algoritmo crittografico, ma solo dal tenere segreta la chiave.
Questo significa che un algoritmo deve essere sicuro anche se il "nemico" ne conosce ogni dettaglio. La segretezza non si nasconde nell'oscurità del meccanismo, ma nella dimensione e casualità della chiave. Più la chiave è complessa, cioè ha un'entropia maggiore, e più la crittografia sarà sicura.
La crittografia trova applicazioni ormai dovunque:
| Crittografia classica | Crittografia moderna | |
|---|---|---|
| Base | Sostituzione e trasposizione di lettere | Matematica, algebra, teoremi |
| Sicurezza | Spesso dipendeva dal segreto dell'algoritmo | Basata sulla complessità computazionale |
| Chiave | Spesso condivisa di persona | Può essere scambiata su canale insicuro |
| Esempi | Cesare, Vigenère, Enigma | AES, RSA, ChaCha20 |
La differenza fondamentale è che la sicurezza moderna è dimostrabile: si riduce alla difficoltà di risolvere problemi matematici noti (fattorizzazione, logaritmo discreto) per i quali non esistono algoritmi efficienti. La sicurezza, oltre alla chiave, è proprio questa.
Un aspetto spesso sottovalutato: la crittografia dipende in modo critico dalla casualità. Una chiave prevedibile è una chiave compromessa. Generare numeri veramente casuali — non pseudocasuali — è un problema ingegneristico serio. I sistemi operativi moderni raccolgono entropia da sorgenti fisiche (movimenti del mouse, timing dell'hardware) proprio per questo motivo.
In Cryptea per garantire un'elevata entropia nella generazione delle chiavi è stata implementata la classe Prime basata su SecureRandom.