A che punto l'aggiunta di ulteriori iterazioni a PBKDF2 non fornisce ulteriore sicurezza?

16

Se la mia passphrase vera viene utilizzata solo per generare un hash che viene utilizzato come chiave effettiva del codice, non significa che è possibile provare a forzare la crittografia stessa? So che ci vorrebbe un tempo incredibilmente lungo in entrambi i casi, ma a che punto sarebbe più veloce semplicemente per forzare la chiave stessa, piuttosto che passare attraverso ogni iterazione di hash? Per la mia unità più sicura, utilizzo 20 iterazioni secondarie (che risultano in circa 2 milioni di iterazioni SHA512) invece del valore predefinito 1. Se qualcuno volesse craccarlo e avere tutto il tempo nell'universo (e più volte), lo fanno più velocemente se cercassero l'hash risultante o ogni possibile ASCII per la passphrase originale?

EDIT: Voglio sottolineare che sono solo curioso della matematica, non della praticità. Uso già una passphrase lunga, e so che ci vorrebbe una forza bruta incredibilmente lunga, conosco la cryptanalisi dei tubi di gomma, ecc. Tutto quello che chiedo è, se un avversario teoricamente sarebbe capace di forzare brutalmente la chiave AES direttamente , dopo quante iterazioni di hash sarebbe più difficile forzare la chiave ASCII rispetto al tasto AES direttamente ...

    
posta kkarl88 24.10.2013 - 07:14
fonte

4 risposte

14

Non c'è una risposta esatta, ed ecco perché:

Forza bruta

Iniziamo con una chiave simmetrica a 128 bit. Supponendo che l'algoritmo (ad esempio AES) non sia ancora rotto, dobbiamo considerare il consumo energetico. Supponendo dispositivi di calcolo efficienti al 100%, la cui tecnologia supera di gran lunga qualsiasi computer, ASIC, scheda grafica o altro dispositivo di cracking dei tasti che si possa immaginare, c'è un fabbisogno energetico minimo per il semplice capovolgimento dei bit. Wikipedia ci ha fornito i calcoli , e ne viene fuori, per una chiave a 128 bit, la il fabbisogno energetico minimo richiesto dalla fisica è di circa 10 18 joule, o 30 Gigawatts per un anno. Ovviamente con hardware "reale", il requisito sarebbe diverse centinaia di volte; più della produzione di energia di tutto il mondo. Quindi questo è ben al di fuori della capacità di qualsiasi corpo terrestre esistente.

Ma se passiamo a una chiave a 256 bit, la matematica diventa più seria. Schneier ha fatto i conti con questo in Crittografia applicata ed è stato discusso qui prima . Per evitare di annoiarti con dettagli ripetuti, farò semplicemente una conclusione: il nostro sole non produce abbastanza energia per svolgere questo compito.

Il calcolo teoricamente reversibile (che potrebbe essere possibile con i computer quantistici) potrebbe dimezzare la durata effettiva del bit, rendendo tale progetto semplicemente al di fuori della portata di qualsiasi energia esistente, piuttosto che al di fuori della portata della fisica. Ma è tutto accademico.

Il take-away è questo: non è possibile forzare una chiave simmetrica di dimensioni ragionevoli. Non da te, non da nessuno.

Round equivalenti

Quindi, quanti round di PBKDF2? Se l'attaccante deve scegliere tra 10 anni di attesa per la derivazione della chiave completa contro la costruzione di una sfera di Dyson attorno al sole, la rotta PBKDF2 è ancora più veloce. Con qualsiasi metrica pratica, aggiungere più tempo alla derivazione della chiave significa aggiungere più tempo all'attacco e in nessun momento provare a forzare la chiave diventa mai un'opzione (a meno che la route PBKDF2 anche non richieda un progetto di costruzione extraterrestre).

Quindi, dov'è il punto di equivalenza? Quando la forza bruta-forzante PBKDF2 richiede l'intera installazione di Dyson Sphere? La risposta è: dipende . Vedi, l'intero punto di usare il processo di hash nel tuo attacco invece di indovinare la chiave stessa è così che provi meno password. Se conosci la password è "scimmia" o "123456", allora preferiresti indovinarla solo due volte, invece di tentare per fortuna di colpire l'hash corretto in una scansione sequenziale.

Quindi la risposta dipende dalla dimensione del dizionario che il tuo aggressore utilizzerà nel suo attacco. Se conosce la password esatta, allora solo indovina una volta. E quindi, l'attacco a forza bruta richiederà esattamente il tempo necessario per il login. Per quanto a lungo lo farai. Se si aspetta di ottenerlo in due ipotesi, allora la sua forza bruta richiederà esattamente il doppio del tempo di accesso corretto. Se ha un dizionario di 100 parole da provare, allora 100 volte il tempo necessario per il login corretto, e se la tua password non è sul suo dizionario, allora non potrà mai avere successo, mai.

Alcuni esercizi pratici

Quindi per garantire che il suo attacco a forza bruta sarà impossibile, devi anche garantire che il tuo login di successo sarà impossibile, perché devi considerare la possibilità che la tua password sia l'unica candidato nella sua lista.

Se d'altra parte, vuoi andare per una media ragionevole, fai una semplice divisione. Diciamo che vuoi che l'attacco a forza bruta richieda 1 trilione di anni. E diciamo che la nostra password è di 14 caratteri alfanumerici (quindi 1 su 10 25 ). Supponendo che il suo dizionario sia tutte password alfanumeriche, vale 10 25 tentativi di password in 10 12 anni (trilioni su piccola scala) o 10 13 ipotesi anno, o circa 316900 ipotesi al secondo.

Quindi, se sintonizziamo PBKDF2 in modo tale che ci vuole più di 1 / 300.000 di secondo per indovinare ogni password, e la nostra password è lunga almeno 14 lettere, quindi 1 trilione di anni.

Caveat

Ricorda che se la crypto sottostante viene mai interrotta, in modo tale da poter essere attaccata senza indovinare la chiave, allora questo probabilmente diventerà il metodo di attacco prescelto. Ma non conosciamo alcun attacco di questo tipo in AES, né ci aspettiamo che esista mai.

    
risposta data 24.10.2013 - 09:27
fonte
6

Dal documento di Colin Percival su scrypt :

By using a key derivation function which requires 2^s cryptographic operations to compute, the cost of performing a brute-force attack against passwords with t bits of entropy is raised from 2^t to 2^(s+t) operations.

2.000.000 sono circa 2 ^ 21 iterazioni di SHA-512. Affinché questo superi la sicurezza offerta da una chiave a 128 bit, la tua password dovrebbe avere circa 107 bit di entropia, o approssimativamente equivalente a una password di 17 caratteri scelta casualmente da lettere maiuscole, minuscole, cifre e dodici simboli.

    
risposta data 24.10.2013 - 07:40
fonte
5

Le iterazioni sono lì per rallentare l'attaccante. Supponiamo che la funzione sia correttamente salata, in modo che il migliore che un utente malintenzionato possa fare sia provare tutte le password potenziali finché non viene trovata una corrispondenza. Definiamo la entropia della password come uguale a n bit se il migliore che l'attaccante può fare è, in media, provare 2 n-1 password: l'utente malintenzionato sa quali password vengono scelte più spesso dagli utenti e tenta le password nell'ordine "ottimale", e ciò funzionerà con tale successo medio. (Nota che "media" è una parola molto importante qui. Tutta la matematica cade giù senza quella parola.)

L'uso di "bit" deriva dal fatto che se la password è una sequenza di k bit, tale che tutti i possibili 2 k le sequenze hanno uguale possibilità di essere selezionate dall'utente, quindi l'entropia è, per la definizione di cui sopra, uguale a k bit. Vedi questa risposta per spiegazioni più lunghe in un caso famoso.

Quindi si applicano le iterazioni r nel tentativo di rallentare l'attaccante. Il costo di calcolo per l'aggressore è quindi, in media, r · 2 n-1 . Quindi, il tuo obiettivo è quello di ottenere r e n sufficientemente alti in modo che questo costo sia proibitivo e non sia raggiungibile dall'attaccante (o l'attaccante ritiene che non valga la pena sforzo, o semplicemente non può). Non esiste un livello di sicurezza oltre a non infrangibile , pertanto esiste effettivamente un numero massimo di iterazioni oltre il quale non si ottiene alcun guadagno di sicurezza effettivo. Una volta sconfitto l'attaccante, viene sconfitto. Non c'è modo di sconfiggerlo di più (anche se ci potrebbe essere un guadagno psicologico nell'umiliare e sopraffare l'attaccante con un conteggio di iterazione alto come Burj Khalifa ). Un punto importante è che la motivazione dell'attaccante dipende dal valore dei dati protetti dalla password, quindi i dati di scarso valore richiedono meno protezione.

Ora può esserci un dibattito sulla quantificazione di questo livello "indistruttibile". Tradizionalmente, i crittografi hanno usato "80 bit", cioè 2 80 "semplici operazioni", come limite. Una "semplice operazione" qui deve essere intesa come un'invocazione della funzione di hash sottostante (ad esempio, SHA-256) su un piccolo messaggio; in realtà comporta alcune migliaia di operazioni aritmetiche a 32 o 64 bit. Questo livello è ancora abbastanza buono; il più grande sforzo comparabile pubblicato è stato il cracking di una chiave RC5 a 64 bit, con uno sforzo in corso a 72 bit, ma ora in via di completamento (vedere questa pagina ). D'altra parte, questo limite di 80 bit era già utilizzato 20 anni fa (questo è il limite che implicava SHA-1 con un output a 160 bit o firme DSA con un sottogruppo a 160 bit) e la tecnologia è migliorata da quel momento (vedi la legge di Moore per il punto di ingresso solitamente citato in quel dibattito).

Al giorno d'oggi, "128 bit" è usato come "limite di sicurezza" per ora e nei prossimi decenni. In effetti questo include un enorme margine di sicurezza, ma 128 è una potenza di 2, quindi ha un enorme fascino estetico (se i crittografi usassero decimali anziché binari, si sarebbero fermati a 100 bit).

In pratica , tuttavia, non raggiungerai quel livello con le tue iterazioni. Realisticamente, puoi aspettarti che i normali utenti umani abbiano password con entropia di 30 bit o giù di lì; più sarebbe eccessivamente ottimista. Gli stessi utenti sono noti per avere poca pazienza (sei apparentemente pronto ad aspettare per 20 secondi, ma la maggior parte delle persone non sarà così paziente). Quindi, puoi sperare in un r contato in milioni, non molto di più. Questo vale, approssimativamente, 2 50 , cioè un miliardo di volte più facile del tradizionale limite di infrangibilità a 80 bit. Questo porta a due conclusioni:

  1. Dovresti usare quante più iterazioni sono tollerabili per i tuoi utenti (incluso te stesso), dal momento che un conteggio ad alta iterazione implica un ritardo maggiore. Si esaurirà la pazienza dell'utente prima di raggiungere il limite di infrangibilità.

  2. È sempre meglio aumentare l'entropia della password. Il metodo "cavallo corretto" comporta password che non sono difficili da ricordare, ma forniscono un'entropia sostanzialmente migliore dei metodi usuali (44 bit, come è stato esposto).

risposta data 24.10.2013 - 15:28
fonte
1

"Se qualcuno volesse craccarlo e avere tutto il tempo nell'universo (e parecchie volte), lo farebbe più velocemente se fossero andati per l'hash risultante o ogni possibile ASCII per la passphrase originale?"

Dipende dalla larghezza dell'output della funzione hash. Supponiamo che l'output sia molto basso a 32 bit e che la tua "passphrase vera" (btw cosa è vero?) Abbia 64 bit di entropia. Quindi probabilmente i 32 bit impiegano meno tempo per craccare, se conosci anche del testo chiaro. Il primo prende circa 2 ^ 32 decrittografie e il secondo prende 2 ^ 64, anche se differente, suppone

Una passphrase lunga non può essere attaccata provando "con successo" ogni ASCII possibile per la passphrase originale ". Viene utilizzato un attacco basato su dizionario. Quindi il calcolo del tempo di recupero medio è diverso da quello di tutti i caratteri.

Perché non con successo? Prendiamo ad esempio una passphrase di 5 parole, esistente di soli 28 caratteri minuscoli. Un sistema di forza bruta muta dovrebbe testare 26 ^ 28 = 10 ^ 40 combinazioni al massimo.

Hai considerato di utilizzare una passphrase più lunga invece di un ritardo sostanziale? Il fattore 2 milioni richiede circa 2 parole in più quando si utilizza un dizionario Diceware. Ogni parola fornisce circa 12,9 bit, vedi materiale facoltativo che non hai davvero bisogno di sapere

    
risposta data 24.10.2013 - 09:09
fonte

Leggi altre domande sui tag