it-swarm-eu.dev

Come fa un hacker a sapere quante volte una password è stata sottoposta a hash?

Ho letto molte domande sulla sicurezza e le funzioni hash su questo sito e altri. Non sono un esperto, solo una mente curiosa e nella mia comprensione, più iterazioni utilizzate per eseguire l'hashing di una password, meglio è e si suppone che si ottenga un output uguale a un input (collisione modulo con funzioni non funzionanti). A questo proposito, l'output non sarà lo stesso se il numero di iterazioni varia.

Ma quello che non capisco è come un hacker che cerca di trovare la pianura sappia quante iterazioni sono state usate. Perché deve saperlo o mi sono perso qualcosa?

34
NKD

Il numero di round viene spesso memorizzato con la password e l'hash. Ad esempio, usando bcrypt:

$2a$10$oEuthjiY8HJp/NaBCJg.bu76Nt4eY4jG/S3sChJhZjqsCvhRXGztm

Il 10 indica il fattore di lavoro, aggiungendo effettivamente 10 bit di entropia in termini di tempo di hashing alla forza bruta. 2^10 = 1024 rounds.

Viene memorizzato con l'hash in caso di necessità di aumentare il fattore di lavoro a causa di legge di Moore .

Se il tuo sistema aveva un fattore di lavoro segreto che è lo stesso per tutti gli account, questo potrebbe essere usato come misura di sicurezza aggiuntiva, proprio come un peperone. In effetti, nel caso in cui un utente malintenzionato sia in grado di impostare la propria password e visualizzare l'hash, è necessario combinarlo con un pepe, altrimenti potrebbero determinare il numero di iterazioni in gioco dalla visualizzazione dell'hash risultante. Tuttavia, è più complesso risolverlo in futuro di quanto non lo sia quando si archivia con ogni password separata, poiché è necessario invece memorizzare un indicatore di quale versione di configurazione dell'iterazione è stata utilizzata per ogni password. Potresti comunque avere un fattore di lavoro segreto che viene aggiunto al valore memorizzato con l'hash.

Veracrypt ha recentemente aggiunto una PIM (Personal Iteration Moltiplicatore) che può essere utilizzata come ulteriore segreto per proteggere i dati crittografati.

39
SilverlightFox

Come fa un hacker a sapere quante volte una password è stata sottoposta a hash? Allo stesso modo in cui lo fai.

L'obiettivo dell'hashing di una password è rendere impossibile (in pratica molto difficile) determinare la password, anche con pieno accesso a tutti i dati .

L'altro requisito per l'hash è che il server deve essere in grado di determinare se una password inserita è corretta. Ciò significa che ad un certo punto durante il processo di accesso, il server deve avere accesso alla formula completa per l'hashing di una password.

Lo scopo di variare il numero di hash è principalmente quello di rallentare gli attacchi di forza bruta e aumentare lo spazio di ricerca per le tabelle Rainbow e funziona senza alcun segreto. Ecco perché il numero di round viene generalmente archiviato nel database con l'hash, come nella risposta di SilverlightFox.

Esistono soluzioni che memorizzano il numero di round separatamente e tentano di mantenerlo segreto e che possono aggiungere un ulteriore livello di protezione. Ma quando valutiamo il sistema di hashing dobbiamo supporre che l'attaccante sa tutto ciò che sappiamo.

Dopotutto, se ci fosse un posto dove memorizzare il numero di round che è stato garantito per non essere compromesso, potremmo semplicemente archiviare le password lì e non preoccuparci affatto dell'hash.

14
Robert

Il numero di iterazioni e il salt sono memorizzati nello stesso database, di solito nello stesso campo dell'hash della password stessa. Perché il sito ha bisogno di sapere queste cose proprio come fa un potenziale attaccante, e quindi devono essere facilmente disponibili. Ad esempio, bcrypt le password con hash contengono il numero (log base 2 del) numero di iterazioni separate da $ segni dal resto dell'hash.

7
Mike Scott

Mentre la risposta attualmente accettata è corretta e il numero di iterazioni viene solitamente memorizzato dove si trovano gli hash stessi, anche se non fosse così:

  1. Con principio di Kerckhoff , dovresti supporre che l'attaccante possa scoprirlo. In pratica, potrebbero scoprirlo, ad esempio, creando il proprio login con una password nota o temporizzando un tentativo di accesso.

  2. Anche se il numero di iterazioni fosse sconosciuto, aggiungerebbe solo un fattore costante al tempo richiesto dall'aggressore per controllarle tutte, almeno con le funzioni di hashing delle password comuni come PBKDF2 , dove è possibile derivare l'hash di 1000 iterazioni dall'hash di 999 iterazioni con una singola iterazione. L'attaccante dovrebbe solo confrontare i valori intermedi con l'hash della password.

3
otus