Twofish | |
---|---|
Schema del Twofish | |
Generale | |
Progettisti | Bruce Schneier, John Kelsey, Doug Whiting, David A. Wagner, Chris Hall e Niels Ferguson |
Prima pubblicazione | 1997 |
Derivato da | Blowfish, SAFER, Square |
Dettagli | |
Dimensione chiave | 128, 192 o 256 bit |
Dimensione blocco | 128 bit |
Struttura | Rete di Feistel |
Migliore crittanalisi | |
Attacco a forza bruta | |
Twofish, nell'ambito della crittografia, è un algoritmo di cifratura a blocchi a chiave simmetrica, con una dimensione del blocco di 128 bit e dimensione della chiave di 128, 192 o 256 bit.
Storia
[modifica | modifica wikitesto]Presentato dai Counterpane Labs di Bruce Schneier, fu uno dei cinque finalisti nel processo di standardizzazione dell'Advanced Encryption Standard intrapreso dal NIST nel 1997 per rimpiazzare Triple DES.
Del team di sviluppo, oltre a Schneier (creatore del predecessore Blowfish), fecero parte anche John Kelsey, Doug Whiting, David Wagner, Chris Hall e Niels Ferguson.[1] Un team allargato che successivamente andò a compiere ulteriori analisi su Twofish e gli altri candidati ad AES incluse Stefan Lucks (ideatore dell'attacco a Triple DES), Tadayoshi Kohno e Mike Stay.[2]
L'algoritmo non è stato brevettato e la reference implementation è stata rilasciata nel pubblico dominio. Grazie a ciò, Twofish viene ad esempio utilizzato nello standard OpenPGP (RFC 4880), anche se al momento è ancora meno diffuso di Blowfish.
Caratteristiche
[modifica | modifica wikitesto]Twofish utilizza una struttura a rete di Feistel, come DES, reiterata per 16 round nella versione completa, con un Whitening in ingresso e in uscita. L'algoritmo distribuisce i blocchi di testo in chiaro di 128 bit in parole di 32 bit su cui svolge gran parte delle operazioni di cifratura.[3] La funzione biettiva F (il quadrato tratteggiato al centro dello schema) è composta da due copie della funzione g, composta a sua volta da quattro S-Box e una matrice fissa 4x4 Maximum Distance Separable (MDS), seguite da una Pseudo-trasformata di Hadamard (PHT) che deriva dalla famiglia di cifrari SAFER e un punto di introduzione di sottochiavi, ovvero materiale derivato dalla chiave attraverso il key schedule (o gestore della chiave).
Le S-Box (Substitution-box) di Twofish, precalcolate e dipendenti dai bit della chiave anziché costanti come negli altri candidati AES,[3] e la progettazione accurata dell'algoritmo di key schedule sono le due caratteristiche distintive di Twofish.
I test svolti su piattaforme software hanno rilevato che Twofish è leggermente più lento di Rijndael (l'algoritmo selezionato alla fine per implementare AES) per chiavi di 128 bit, ma un po' più rapido per chiavi a 256 bit.[4]
Attualmente non si conosce un attacco a Twofish più efficiente della forza bruta, malgrado i diversi tentativi effettuati.[5] Un algoritmo che può solo essere risolto con la brute force, o comunque di cui non si è ancora trovato il modo di aggirare le prestazioni con un codice specifico e studiato per l'unico scopo di romperlo, viene detto "hack-proof": a prova di hacker.
Note
[modifica | modifica wikitesto]- ^ AES Round 2 Information su nist.gov
- ^ (EN) Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall, Niels Ferguson, Tadayoshi Kohno, Mike Stay, The Twofish Team’s Final Comments on AES Selection (PDF), su schneier.com, 15 maggio 2000. URL consultato il 16 agosto 2010 (archiviato dall'url originale il 2 gennaio 2010).
- ^ a b Ferguson e Schneier, 2005, pp.47-49.
- ^ (EN) Bruce Schneier, Doug Whiting, A Performance Comparison of the Five AES Finalists, su schneier.com, 7 aprile 2000. URL consultato il 16 agosto 2010.
- ^ commento di Schneier sul suo blog - 23 novembre 2005
Bibliografia
[modifica | modifica wikitesto]- Niels Ferguson, Bruce Schneier, Crittografia pratica, Apogeo, 2005 [2003]. URL consultato il 16 agosto 2010.
Collegamenti esterni
[modifica | modifica wikitesto]- Implementazione di riferimento e derivata, su embeddedsw.net.