L'applicazione di AES è più sicura?

6

La pagina della guida alla sicurezza di KeePass parla della prevenzione degli attacchi di dizionario

To generate the final 256-bit key that is used for the block cipher, KeePass first hashes the user's password using SHA-256, encrypts the result N times using the Advanced Encryption Standard (AES) algorithm (called key transformation rounds from on now), and then hashes it again using SHA-256. For AES, a random 256-bit key is used, which is stored in the database file. As the AES transformations aren't pre-computable (key is random), an attacker has to perform all the encryptions, too, otherwise he cannot try and see if the current key is correct.

La "sicurezza contro gli attacchi di dizionario" si trova apparentemente nel tempo necessario per i cicli di crittografia N. Ora la domanda:

È il tempo necessario per calcolare N iterazioni di AES in realtà N volte il tempo necessario per una singola crittografia AES, oppure esiste uno schema noto e più efficiente per calcolare AES ^ N (cleartext)?

    
posta kutschkem 05.12.2013 - 13:07
fonte

3 risposte

8

L'esecuzione di AES più volte non è utile. La rottura di AES richiederebbe l'infinito se si utilizza una chiave appropriata. Quello che sta facendo KeePass qui è rendere la derivazione della chiave dalla password più lenta in modo che un attacco bruteforce richiederebbe molto tempo perché per ogni password la chiave deve essere ricalcolata (è ciò che PBKDF2, Scrypt e Bcrypt cercano di affrontare).

Anche se questo potrebbe rallentare gli attacchi del dizionario, non li impedirà. Prevenire gli attacchi del dizionario può essere fatto solo utilizzando password casuali abbastanza lunghe.

Per quanto ne so ( potrei sbagliarmi dal momento che non sono un crittografo ), non ci dovrebbe essere un modo più veloce per calcolare AES ^ N in modo più efficiente rispetto a N iterazioni di AES. La ragione principale per cui stanno usando questo algoritmo è perché è davvero difficile (impossibile) rendere i calcoli più efficienti e quindi meno vulnerabili alla forza bruta.

Spero che Thomas Pornin sia in grado di darti più informazioni su questo.

    
risposta data 05.12.2013 - 13:50
fonte
6

No . Tuttavia, la tua domanda non è correlata al testo che hai citato. I dati effettivi (il database delle password) non vengono realmente crittografati più volte .

Per crittografare qualcosa con AES-256, hai bisogno di una chiave a 256-bit. La password MyPass!sAwesome è patetica per questo scopo. La buona notizia è che c'è qualcosa chiamato KDF (Key Derivation Function) che prende la password e la trasforma in una chiave gigantesca necessario per la crittografia. Più è lento il KDF, più è difficile per un utente malintenzionato calcolare la chiave finale provando un gran numero di password. Un KDF standard e ampiamente utilizzato è PBKDF2 .

(Si prega di leggere Come fare in modo sicuro le password di hash? in modo che quanto segue l'analogia ha più senso)

Un KDF di solito accetta lavori con una funzione di hash crittografica, salt e un conteggio di iterazione. KeePass ha scelto di scrivere la propria logica KDF e la stanno rendendo più lenta usando 6000 round di AES. Quello che hanno fatto è semplicemente utilizzare AES come funzione di hash crittografica, la chiave casuale a 256 bit come sale e N come numero di iterazione.

La documentazione di KeePass per "prevenzione degli attacchi di dizionario" è in realtà una protezione contro tabelle arcobaleno che viene fatto usando i sali sicuri (una chiave casuale a 256 bit usata con un sale è abbastanza sicura).

    
risposta data 05.12.2013 - 14:06
fonte
2

Se comprendo correttamente la tua domanda, stai chiedendo se più operazioni di crittografia AES hanno una "ottimizzazione nota". La risposta è no". Se ci fosse, avrebbe dovuto lavorare sui turni interni di AES, e le difese create da quei round multipli sarebbero state contrastate rapidamente. Tuttavia, proprio come sappiamo che la riduzione del numero di round porta a punti deboli, sappiamo anche che aumentare i round rende sicuro (oggi). La stessa logica si applica nella più ampia portata di più crittografie.

In altre parole, se tale ottimizzazione esistesse, sarebbe un punto debole nella cifra sottostante. Significherebbe che potrei imparare di più sullo stato interno semplicemente chiedendo all'algoritmo di crittografare i dati una seconda volta.

Questo non sarebbe così sicuro se KeePass fornisse gli stessi dati in ogni iterazione di crittografia, ma non lo è - l'unica cosa alimentata nel round n + 1 è l'output del round n.

    
risposta data 05.12.2013 - 14:35
fonte

Leggi altre domande sui tag