GnuPG fa uso di diversi concetti di crittografia come
algoritmi simmetrici, algoritmi
a chiave pubblica, e hashing a senso
unico. È possibile utilizzare le funzioni di base di
GnuPG senza comprendere appieno tali concetti, ma, se si vuole
usarlo con cognizione di causa, una loro comprensione è
necessaria.
Questo capitolo introduce i concetti di base della crittografia
utilizzati in GnuPG. Si possono trovare altri libri che
trattano questi argomenti più dettagliatamente. Un buon testo per
approfondire ulteriormente gli studi è ``Applied
Cryptography'' di Bruce
Schneier.
Un algoritmo simmetrico è un algoritmo che utilizza la stessa
chiave sia per criptare che per decriptare. Due parti che
comunicano sfruttando un algoritmo simmetrico devono innanzi
tutto mettersi d'accordo sulla chiave. Una volta d'accordo, il
mittente cifra un messaggio utilizzando la chiave, lo spedisce
al destinatario e questi decripta il messaggio usando la stessa
chiave. Per esempio, il tedesco Enigma è un algoritmo
simmetrico per il quale venivano distribuite delle chiavi
giornaliere sotto forma di libri di codici. Ogni giorno un
operatore radio, fosse esso un trasmittente o un ricevente,
consultava la propria copia del libro codici per trovare la
chiave di quel giorno. Il traffico radio di quel giorno veniva
quindi criptato e decriptato utilizzando la quella chiave.
Esempi moderni di algoritmi simmetrici includono 3DES, Blowfish
e IDEA.
Un buon algoritmo di cifratura racchiude completamente la
sicurezza nella chiave senza lasciare nulla nell'algoritmo. In
altre parole, non dovrebbe essere di alcun aiuto per un
malintenzionato conoscere il tipo di algoritmo utilizzato. Solo
se ottenesse la chiave la conoscenza dell'algoritmo sarebbe
necessaria. L'algoritmo usato in GnuPG possiede tale
proprietà.
Poiché tutta la sicurezza è riposta nella chiave, è importante
che sia veramente difficile indovinare la chiave stessa. Detto
altrimenti, l'insieme di chiavi possibili, cioè lo
spazio delle chiavi, deve essere grande. A
Los Alamos, Tichard Feynman era famoso per la sua abilità
nell'aprire casseforti. Per incoraggiare l'alone di mistero che
lo circondava egli portava con sé perfino un serie di attrezzi,
compreso un vecchio stetoscopio. In realtà egli usava una
varietà di trucchi per ridurre il numero di combinazione che
doveva provare e poi semplicemente tirava ad indovinare finché
trovava la giusta combinazione. In altre parole, egli riduceva
la dimensione dello spazio di chiavi.
La Gran Bretagna, durante la Seconda Guerra Mondiale, usò delle
macchine per cercare di indovinare le chiavi usate dagli
avversari. Il tedesco Enigma, infatti, possedeva uno spazio di
chiavi veramente ampio, ma la Gran Bretagna costruì dei motori
di calcolo specializzati, i Bombes, per provare meccanicamente
le chiavi finché la chiave del giorno non veniva trovata.
Questo significa che a volte riuscivano a trovare la chiave di
quel giorno in capo a poche ore dal momento in cui una nuova
chiave veniva usata, ma significa anche che alcuni volte non
riuscissero affatto a trovare la chiave giusta. I Bombes non
erano computer multi-funzione ma erano comunque i precursori dei
nostri moderni elaboratori.
Oggigiorno i computer possono indovinare una chiave molto
rapidamente e questo è il motivo per cui la dimensione della
chiave è un requisito importante per i moderni sistemi di
crittografia. L'algoritmo DES usa una chiave da 56 bit. Ciò
significa che ci sono 256 chiavi
possibili. 256 sono
72,057,594,037,927,936 chiavi. Un sacco di chiavi, ma un
computer non specializzato può controllarle tutte in una
manciata di giorni. Un computer specializzato in poche ore.
D'altro canto, algoritmi sviluppati più recentemente, come il
3DES, il Blowfish e IDEA, usano tutti chiavi da 128 bit. Ciò
implica che ci sono 2128 possibili
chiavi. Queste sono molte, molte di più e, anche se tutti i
computer della terra cooperassero, sarebbe ancora necessario più
tempo di quello rappresentato dall'età dell'universo per trovare
la chiave corretta.