L'implementazione AES Crypt hash una password 8192 volte per generare la chiave. È necessario?

16

Sto pensando di crittografare alcuni piccoli file (centinaia di kb ciascuno) usando l'implementazione di riferimento AES Crypt . Osservando la fonte, sembra che la chiave di crittografia sia derivata dalla IV e dalla password concatenando i due in un buffer che viene ripetutamente sottoposto a hash. Quindi l'IV agisce come "sale" per l'hash. Più volte intendo 8192 volte.

Capisco che il vantaggio di questo è di aumentare il tempo necessario per generare la chiave, rendendo più costoso l'esecuzione di attacchi a forza bruta per scoprire la password. Capisco anche che lo svantaggio è che ci vuole più tempo per fare le attività di crittografia e decrittografia legittime per gli utenti reali. Inoltre, poiché sia gli utenti che gli aggressori acquistano macchine più veloci nel tempo, i vantaggi e l'inconveniente tenderanno a zero.

Quindi la mia domanda è, date le attuali capacità del computer, e supponendo che un attaccante motivato che non possiede un cluster dedicato, sia 8192 iterazioni insufficienti, eccessive o "giuste"? Inoltre, ho perso qualcosa nella mia analisi di questa generazione di chiavi: c'è qualche altra ragione per scegliere un tale numero di iterazioni che lo rende una buona scelta?

    
posta kalina 19.11.2010 - 11:07
fonte

5 risposte

18

Lo standard RSA per la crittografia basata su password raccomanda "almeno 1000" iterazioni, quindi il fattore sembra essere nell'area di gioco.

Con 8192 iterazioni, si sta essenzialmente aumentando il tempo necessario per completare un attacco di forza bruta di un fattore equivalente all'aggiunta di 13 bit di entropia alla password o di 2 caratteri alfanumerici (rispetto solo agli attacchi di forza bruta). Questo è un buon modo di pensarci perché è indipendente dall'aumento del potere computazionale.

La domanda è: data la sicurezza delle password che tu o i tuoi utenti userete, è possibile forzarlo? Se aggiungi 13 bit, è possibile forzarlo con forza?

Se i tuoi utenti utilizzano password complesse, probabilmente la risposta è no a entrambi. Se i tuoi utenti utilizzano una parola del dizionario, 13 bit non è probabilmente sufficiente per spingerlo in territorio sicuro. Le tue risposte a queste domande cambiano nel tempo man mano che i computer diventano più potenti.

    
risposta data 20.11.2010 - 01:04
fonte
5

Nel caso in cui la password sia una parola del dizionario, le tabelle arcobaleno possono essere generate in modo rapido ed efficiente. Con le password salate, i requisiti di dimensioni / tempo per generare utili tabelle arcobaleno aumentano. Più iterazioni di hash (sale + passaggio) sono un modo semplice per ridurre notevolmente l'utilità delle tabelle arcobaleno. Penso che lo schema MD5 salato di Apache lo faccia 1000 volte. Il numero è completamente arbitrario, è solo alzando notevolmente la barra per la quantità di hardware che avresti dovuto lanciare al problema per sconfiggere il meccanismo di hashing. Utilizzando un meccanismo di hashing migliore (e questo significa andare oltre SHA-1, notare che non è nemmeno in NSA's Suite B più) è unidirezionale. Ci sono anche degli algoritmi che ti permettono di scegliere quanto tempo vuoi che prenda all'hash qualcosa, che si riferirebbe direttamente al "creep della velocità cripta che sconfigge" come conseguenza della Legge di Moore.

    
risposta data 19.11.2010 - 15:08
fonte
3

Il numero di iterazioni dovrebbe essere regolato in base alla potenza disponibile, in modo tale che il tempo di elaborazione si adatti ancora alla difficile limitazione della pazienza dell'utente; vuoi comunque rendere il numero più alto possibile.

Con la matematica: se l'elaborazione di una password richiede tempo T sul tuo sistema (es. 1 secondo), ma l'attaccante è pronto a spendere T ' per craccare una password ( es. 3 settimane) e ha accesso a macchine che sono, collettivamente, P volte potenti quanto le tue, quindi l'attaccante ha un vantaggio di un fattore T '* P / T su di te. La difesa contro questa è l'entropia della password: se una password ha entropia e bit, allora l'attaccante è (in media) sconfitto se e solo se T '* P / T < 2 e-1 . Supponendo che T = 1 secondo, T ' = 3 settimane e P = 100 (l'hacker ha cinque PC con alcune GPU, per un budget meno di 3000 $), quindi la password deve avere entropia almeno 27,4 bit. Probabilmente vuoi avere un po 'di margine di sicurezza e andare per 30 bit. Tu puoi , come individuo informato, scegli una password che è più strong di quella (c'è un po 'di discussione su quell'argomento in questa domanda ); ma sembra abbastanza ottimistico aspettarsi che la maggior parte degli utenti faccia altrettanto.

Nelle equazioni sopra, il numero di iterazioni viene usato per alterare T . Mentre il numero appropriato dipende in ultima analisi dalla potenza disponibile e dalla pazienza dell'utente medio, è probabile che 8192 iterazioni siano troppo piccole; in base alla descrizione del processo di trasformazione della password (hashing ripetuto - questa sembra una versione ridotta di PBKDF2 ), il numero di iterazioni su un PC tipico dovrebbe essere contato in milioni .

A proposito, una tecnica di elaborazione password personalizzata dovrebbe essere un strong avvertimento rosso: non va bene. È molto meglio fare affidamento su algoritmi standardizzati comprovati come PBKDF2 o bcrypt (quest'ultimo dovrebbe essere preferito poiché abbassa il " fattore di potenza di elaborazione " P di un utente malintenzionato che utilizza GPU - vedere questa risposta per i dettagli).

    
risposta data 07.10.2011 - 01:33
fonte
3

Se scegli i pacchetti di crittografia, ti consiglio GPG o PGP su AES Crypt. GPG e PGP hanno ricevuto molti controlli accurati dalla comunità di crittografia. Per quanto ne so, AES Crypt no. Pertanto, mi fiderei di GPG o PGP più di AES Crypt.

Per quanto riguarda il numero di volte per iterare l'hashing della password, ciò si basa su quanto a lungo si è disposti ad attendere durante la crittografia / decrittografia e quanto velocemente è la funzione hash. In primo luogo, decidi per quanto tempo sei disposto ad aspettare: ad esempio, 100 msec. Quindi, scegliere un numero di iterazioni che causerà il processo di hashing iterato a 100 msec sui computer che si utilizzano. Fatto.

Come @PulpSpy ha spiegato con precisione , se si itera l'hashing N volte, allora si aumenta l'entropia effettiva del segreta di circa lg (N) bit, dove lg rappresenta il logaritmo in base 2. Ad esempio, 8192 = 2 ^ 13 iterazioni corrispondono a 13 bit in più di entropia effettiva. Non è facile tradurre questo in una lunghezza della passphrase effettiva. (Contrariamente a quanto scritto da @PulpSpy, 13 bit di entropia non traducono direttamente in 2 caratteri, poiché non tutti i caratteri di ogni passphrase hanno la stessa quantità di entropia. Come spiega correttamente @nealmcb, l'entropia per carattere di una passphrase varia, ma è probabilmente in genere nell'intervallo di 1-2 bit per carattere, quindi questo potrebbe corrispondere a un aumento della lunghezza della passphrase da qualche parte nelle immediate vicinanze di 8 caratteri.)

Infine, ti avverto che scegliere la chiave crittografica da una passphrase è generalmente considerata una pratica rischiosa. Le passphrase scelte dall'uomo spesso non forniscono sufficiente entropia per proteggersi dagli attacchi di forza bruta sulla crittografia. Pertanto, non raccomando le passphrase scelte dall'uomo per misure di sicurezza elevata (o, se è necessario utilizzare una passphrase scelta dall'uomo, utilizzare un software che aiuti a scegliere una passphrase ad alta entropia). Il miglior software di crittografia tende a utilizzare la casualità vera per le sue chiavi crittografiche laddove possibile, piuttosto che le passphrase scelte dall'uomo.

    
risposta data 08.01.2011 - 01:47
fonte
2

Non è "necessario", ma rende le password di cracking più difficili. Si chiama "rafforzamento della chiave" - è logicamente come aggiungere due caratteri (simbolo numerico maiuscolo / inferiore) alla fine della password. È abbastanza comune Ad esempio, il WPA che protegge il tuo access point blocca la password 4000 volte.

    
risposta data 21.09.2011 - 09:06
fonte

Leggi altre domande sui tag