AES vs Blowfish per la crittografia dei file


106

Voglio crittografare un file binario. Il mio obiettivo è quello di impedire a chiunque di leggere il file senza la password.

Qual è la soluzione migliore, AES o Blowfish con la stessa lunghezza della chiave? Possiamo presumere che l'attaccante abbia grandi risorse (software, conoscenza, denaro) per decifrare il file.


4
Blowfish ha più di un decennio, penso che intendi aes vs twofish ...
torre

Hai ragione, avrei potuto chiederlo. Fortunatamente Jerry ha riassunto l'argomento alla grande per me.
mimrock

@Rook Più vecchio è, meglio è la regola pratica per gli algoritmi di sicurezza. I nuovi algoritmi sono per le persone che si preoccupano più delle prestazioni che della sicurezza.
Ceving

Risposte:


187

Probabilmente AES. Blowfish è stato il diretto predecessore di Twofish. Twofish è stato l'ingresso di Bruce Schneier nella competizione che ha prodotto AES. È stato giudicato inferiore a una voce denominata Rijndael, che è diventata AES.

Interessante a parte: a un certo punto della competizione, a tutti i partecipanti è stato chiesto di esprimere la propria opinione su come si posizionavano i cifrari. Probabilmente non sorprende che ogni squadra abbia scelto la propria voce come la migliore, ma ogni altra squadra ha scelto Rijndael come la seconda migliore.

Detto questo, ci sono alcune differenze fondamentali negli obiettivi di base di Blowfish vs AES che possono (probabilmente) favorire Blowfish in termini di sicurezza assoluta. In particolare, Blowfish tenta di rendere difficile un attacco di forza bruta (esaurimento chiave) rendendo la configurazione iniziale della chiave un'operazione piuttosto lenta. Per un utente normale, ciò ha poche conseguenze (è comunque meno di un millisecondo) ma se stai provando milioni di chiavi al secondo per romperlo, la differenza è abbastanza sostanziale.

Alla fine, tuttavia, non lo vedo come un grande vantaggio. In genere consiglierei AES. Le mie prossime scelte sarebbero probabilmente Serpent, MARS e Twofish in quest'ordine. Blowfish verrebbe da qualche parte dopo quelli (anche se ce ne sono un paio di altri che probabilmente consiglierei prima di Blowfish).


11
Penso che altri algoritmi siano stati considerati più sicuri di Rijndael, ma ha offerto prestazioni molto buone mentre la sua sicurezza è stata giudicata abbastanza buona. Progettare un algoritmo di cifratura è sempre un compromesso tra sicurezza e prestazioni.
CodesInChaos

10
@CodeInChaos: A seconda del tuo punto di vista, è almeno un po 'vero - Serpent era probabilmente il design più conservatore. In particolare, hanno pensato che una versione a 16 round sarebbe stata sufficiente, quindi hanno raddoppiato quella a 32 round. Il miglior attacco attualmente conosciuto è efficace contro solo 11 round. Se la domanda originale non avesse limitato specificamente le scelte ad AES e Blowfish, e avesse semplicemente chiesto il codice più sicuro e ragionevolmente noto, probabilmente avrei detto Serpent ...
Jerry Coffin

Inoltre, questo "Interessante a parte" è emerso in diverse domande e fonti durante lo studio per il mio esame CompTIA Security +. Le piccole cose potrebbero non essere così inutili dopotutto!
Everlight

Blowfishè il più veloce
user924

22

È un fatto non spesso riconosciuto che la dimensione del blocco di un codice a blocchi è anche un'importante considerazione di sicurezza (sebbene non sia neanche lontanamente importante quanto la dimensione della chiave).

Blowfish (e la maggior parte degli altri codici a blocchi della stessa epoca, come 3DES e IDEA) hanno una dimensione del blocco di 64 bit, che è considerata insufficiente per le grandi dimensioni dei file che sono comuni in questi giorni (maggiore è il file e minore è la dimensione del blocco , maggiore è la probabilità di un blocco ripetuto nel testo cifrato - e tali blocchi ripetuti sono estremamente utili nella crittoanalisi).

AES, d'altra parte, ha una dimensione del blocco di 128 bit. Questa considerazione da sola è una giustificazione per utilizzare AES invece di Blowfish.


2
Il vantaggio di un blocco a 64 bit è che rende più facile inserire il nuovo algoritmo in una vecchia applicazione in sostituzione del (3-) DES.
dajames

La dimensione del blocco è un argomento interessante. Ho scritto, diversi mesi fa, un articolo che teorizza che la dimensione del blocco di qualsiasi cifrario simmetrico possa essere estesa a qualsiasi lunghezza: cubicspot.blogspot.com/2013/02/…
CubicleSoft

16

Per quanto riguarda gli algoritmi stessi, sceglierei AES, per il semplice motivo è che è stato accettato dal NIST e sarà sottoposto a peer review e crittoanalizzato per anni. Tuttavia, suggerirei che nelle applicazioni pratiche, a meno che tu non stia memorizzando alcuni file che il governo vuole mantenere segreto (nel qual caso l'NSA probabilmente ti fornirebbe un algoritmo migliore sia di AES che di Blowfish), usando uno di questi algoritmi ha vinto non fa troppa differenza. Tutta la sicurezza dovrebbe essere nella chiave ed entrambi questi algoritmi sono resistenti agli attacchi di forza bruta. Blowfish ha dimostrato di essere debole solo nelle implementazioni che non fanno uso dei 16 round completi. E mentre AES è più recente, questo fatto dovrebbe farti inclinare maggiormente verso BlowFish (se stavi prendendo in considerazione solo l'età). Pensare in questo modo,

Ecco cosa ti proporrei ... invece di guardare questi due algoritmi e provare a scegliere tra gli algoritmi, perché non guardi il tuo schema di generazione delle chiavi. Un potenziale aggressore che vuole decrittografare il tuo file non si siederà lì e inventerà un set teorico di chiavi che può essere utilizzato e quindi eseguirà un attacco di forza bruta che può richiedere mesi. Invece sta per sfruttare qualcos'altro, come attaccare l'hardware del tuo server, decodificare l'assembly per vedere la chiave, provare a trovare un file di configurazione che contiene la chiave, o forse ricattare il tuo amico per copiare un file dal tuo computer . Quelli saranno dove sei più vulnerabile, non l'algoritmo.


4
AES è stato recentemente aggiunto alla lista delle "cifrature non funzionanti" su Wikipedia, ma il peggior attacco contro Blowfish è contro un misero quattro round ed è chiaramente assente dalla lista delle cifrature non funzionanti. Il commento di Bruce sull'essere sorpreso dal fatto che la gente usi ancora Blowfish è ciò che allontana gli implementatori. Tuttavia, non è rotto, ha il supporto per chiavi di dimensioni variabili, supporta chiavi di dimensioni maggiori rispetto ad AES e, dal punto di vista della programmazione, è facile da implementare rispetto alla maggior parte degli altri cifrari a blocchi simmetrici. Blowfish è sopravvissuto alla prova del tempo, che è la più grande minaccia per qualsiasi cifra simmetrica.
CubicleSoft

Sono d'accordo che AES non è neanche lontanamente rotto. Tuttavia nei prossimi 10 anni o giù di lì avremo bisogno di un nuovo standard. Anche tutti i finalisti di AES sono stati cifre fantastiche. Serpent è effettivamente considerato da molti il ​​più difficile da rompere, ma AES era il più elegante. (E sì, se guardi a come fai la crittografia e la decrittazione è decisamente elegante.)
nerdybeardo

8

AES.

(Suppongo anche che tu intenda due pesci non il pesce palla molto più vecchio e più debole)

Entrambi (AES e twofish) sono buoni algoritmi. Tuttavia, anche se fossero uguali o due fossero leggermente più avanti nel merito tecnico, sceglierei ANCORA AES.

Perché? Pubblicità. AES è lo standard per la crittografia del governo e quindi anche milioni di altre entità lo usano. Un crittoanalista di talento ottiene semplicemente più "bang for the buck" trovando un difetto in AES quindi lo fa per i due pesci molto meno conosciuti e usati.

L'oscurità non fornisce alcuna protezione nella crittografia. Più corpi che guardano, studiano, sondano, attaccano un algoritmo è sempre meglio. Vuoi l'algoritmo più "controllato" possibile e in questo momento è AES. Se un algoritmo non è soggetto a un controllo intenso e continuo, dovresti mettere una minore fiducia nella sua forza. Sicuramente due pesci non sono stati compromessi. È a causa della forza del codice o semplicemente perché non abbastanza persone hanno osservato da vicino ..... ANCORA


5

La scelta dell'algoritmo probabilmente non ha molta importanza. Userei AES poiché è stato studiato meglio. Ciò che è molto più importante è scegliere la giusta modalità operativa e la funzione di derivazione della chiave .

Potresti voler dare un'occhiata alle specifiche del formato TrueCrypt per ispirazione se desideri un accesso casuale veloce. Se non hai bisogno dell'accesso casuale, XTS non è la modalità ottimale, poiché ha punti deboli che altre modalità non lo fanno. E potresti anche voler aggiungere una sorta di controllo dell'integrità (o codice di autenticazione del messaggio).


1
Assolutamente: è di fondamentale importanza utilizzare una buona funzione di derivazione della chiave, come PBKDF2.
caf

3

So che questa risposta viola i termini della tua domanda, ma penso che la risposta corretta al tuo intento sia semplicemente questa: usa qualsiasi algoritmo che ti consenta la lunghezza della chiave più lunga, quindi assicurati di scegliere una chiave davvero buona. Piccole differenze nelle prestazioni degli algoritmi più apprezzati (crittograficamente e cronologicamente) sono sopraffatte da alcuni bit extra di una chiave.


7
Non posso essere d'accordo. Il cifrario Lucifer di IBM (predecessore di DES) utilizzato come chiave a 128 bit, ma DES (con solo una chiave a 56 bit) si è rivelato molto più sicuro una volta (ri) scoperta la crittoanalisi differenziale.
Jerry Coffin

3
Guardare semplicemente la lunghezza della chiave è una metrica molto scarsa.
Gerald Davis

2
Questo è il motivo per cui ho detto "algoritmi più apprezzati". Se consideri Blowfish 128bit inferiore a AES 128bit, dovresti essere d'accordo che Blowfish 256bit soffia AES 128bit fuori dall'acqua. Allo stesso modo, la generazione e la gestione delle chiavi sono altrettanto importanti. Se la tua chiave è "password", non importa affatto quale algoritmo usi. Quello che sto dicendo è che l'OP sta probabilmente guardando la cosa sbagliata.
Mike Jones

2
Nella domanda è indicato che le chiavi saranno derivate dalle password. È probabile che rompere il sistema forzando brute la password sia molto più facile che attaccare uno qualsiasi degli algoritmi qui menzionati. La lunghezza della chiave è quasi del tutto irrilevante quando la chiave è derivata da una password.
dajames

Annoti la mia risposta, nonostante tu dica esattamente la stessa cosa che ho fatto io? Ho detto lunghezza della chiave e ho scelto una chiave davvero buona. Con quale definizione di "buono" considereresti una chiave buona se non riempisse tutti i bit della chiave?
Mike Jones

3

Entrambi gli algoritmi (AES e twofish) sono considerati molto sicuri. Questo è stato ampiamente trattato in altre risposte.

Tuttavia, poiché AES è molto utilizzato ora nel 2016, è stato specificamente accelerato dall'hardware in diverse piattaforme come ARM e x86. Sebbene non sia significativamente più veloce di twofish prima dell'accelerazione hardware, AES è ora molto più veloce grazie alle istruzioni CPU dedicate.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.