Rallenta la crittografia simmetrica

2

Sto sviluppando un programma in Java. In un solo passaggio i dati dovrebbero essere crittografati ed esportati in un file.

A partire da ora stiamo crittografando in AES-256

Voglio rallentare un possibile attacco di forza bruta il più possibile.

La risposta ovvia sarebbe quella di far scegliere agli utenti password lunghe e resistenti. Ma possiamo anche fare qualcosa per rallentare l'algoritmo?

La mia prima idea è di eseguire il testo in chiaro in un ciclo decrittografandolo con AES 2000 volte. Qualunque svantaggio di questo, oltre ci vorrà più tempo per l'utente per ottenere il file?

    
posta Stefan Rasmusson 07.02.2013 - 13:36
fonte

2 risposte

6

I want to slow down a possible brute force attack as much as possible. The obvious answer would be to make the users choose long strong passwords. But can we also do something to slow down the algorithm?

Per quanto riguarda la resistenza di AES alla forzatura bruta, va bene così com'è. Dal momento che sembra che tu stia utilizzando le password di immissione degli utenti per generare la chiave, dovresti rafforzare la chiave inserendo il codice di input più volte. Vedi L'implementazione AES Crypt hash una password 8192 volte per generare la chiave. È necessario? per ulteriori informazioni.

    
risposta data 07.02.2013 - 13:52
fonte
2

Forza brutale riguarda il provare tutte le possibili chiavi o password. AES utilizza chiavi di almeno 128 bit (256 bit nel tuo caso) in modo che la forza bruta fallisca: non è fattibile, con la tecnologia esistente o prevedibile, "provare" una proporzione non ridicola dello spazio del possibile 128-bit chiavi, per non parlare delle chiavi a 256-bit.

Un attacco di forza bruta più efficace proverebbe le potenziali password che spesso provengono da uno spazio molto più piccolo di possibili password (lo spazio delle password che una mente umana può inventare). Questo è chiamato un attacco dizionario . Per rendere meno efficaci tali attacchi, si vorrà utilizzare un certo rallentamento nel processo, sia nella trasformazione da password a chiave, sia nella crittografia stessa. Ha più senso, ed è molto meglio per la sicurezza, fare il rallentamento nella trasformazione da password a chiave, piuttosto che nella crittografia. Vedi questa risposta per i dettagli.

Il rallentamento è solo una parte della storia; vuoi anche un salt . Questo punta a bcrypt o PBKDF2 . E avrai anche bisogno di una certa integrità controllata, per sconfiggere gli attacchi attivi (che sono più realistici di quanto si pensi normalmente). Combinando un buon hashing della password, la crittografia simmetrica e l'integrità verificata è non è facile come sembra , quindi dovresti fare affidamento su uno standard e una libreria esistenti che svolgono il lavoro ed è stato esaminato da molti specialisti. Potresti fare peggio dell'uso di OpenPGP e del Implementazione di BouncyCastle Java .

    
risposta data 07.02.2013 - 15:27
fonte

Leggi altre domande sui tag