Introduzione alla Crittografia.

DocumentazioneTecniche di Crittografia

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:

  • Riservatezza — solo il destinatario autorizzato può leggere il messaggio
  • Integrità — il messaggio non è stato alterato durante la trasmissione
  • Autenticità — il mittente è chi dice di essere
  • Non ripudio — il mittente non può negare di aver inviato il messaggio

Storia ed Evoluzione

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.

Il principio di Kerckhoffs

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.

Applicazioni nel mondo reale

La crittografia trova applicazioni ormai dovunque:

  • HTTPS / TLS — ogni volta che il browser mostra il lucchetto, una sessione crittografata protegge la connessione
  • Messaggistica — Signal, WhatsApp e simili usano la crittografia end-to-end per garantire che solo mittente e destinatario leggano i messaggi
  • Archiviazione — i dischi cifrati (BitLocker, VeraCrypt ) proteggono i dati in caso di furto fisico
  • Autenticazione — le password non vengono mai salvate in chiaro, ma come hash crittografici nei database
  • Blockchain e criptovalute — ogni transazione è firmata crittograficamente per garantirne l'autenticità
  • Firma digitale — documenti legali e software vengono firmati per certificarne l'origine (Approfondimento qui)

Crittografia classica vs. moderna

Crittografia classicaCrittografia moderna
BaseSostituzione e trasposizione di lettereMatematica, algebra, teoremi
SicurezzaSpesso dipendeva dal segreto dell'algoritmoBasata sulla complessità computazionale
ChiaveSpesso condivisa di personaPuò essere scambiata su canale insicuro
EsempiCesare, Vigenère, EnigmaAES, 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.

Crittografia e casualità

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.