Come fa un hacker a sapere quante volte è stata eseguita l'hash di una password?

34

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

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

    
posta NKD 28.08.2015 - 11:59
fonte

4 risposte

39

Il numero di round viene spesso memorizzato con la password e l'hash. Ad esempio, utilizzando 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 della legge di Moore .

Se il tuo sistema ha un fattore di lavoro segreto uguale per tutti gli account, questo potrebbe essere usato come misura di sicurezza aggiuntiva, proprio come un pepe. Infatti, 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 sarebbe in grado di determinare il numero di iterazioni in gioco dalla visualizzazione dell'hash risultante. Tuttavia, è più complicato farlo in futuro rispetto a quando si memorizza con ciascuna password separata, poiché è necessario memorizzare un indicatore di quale versione di configurazione di iterazione è stata utilizzata per ciascuna password. Potresti avere un fattore di lavoro segreto che viene aggiunto al valore memorizzato con l'hash.

Veracrypt ha aggiunto di recente una funzione PIM (Personal Iteration Multiplier) che può essere utilizzata come ulteriore segreto per proteggere i dati crittografati.

    
risposta data 28.08.2015 - 12:13
fonte
14

In che modo un hacker sa quante volte è stata eseguita l'hash di una password? Nello stesso modo in cui lo fai.

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

L'altro requisito per l'hashing è che il server deve essere in grado di determinare se una password inserita è corretta. Ciò significa che a un certo punto durante la procedura 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 arcobaleno, e funziona senza alcun segreto . Ecco perché il numero di round viene in genere memorizzato direttamente 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 questo può aggiungere un ulteriore livello di protezione. Ma quando valutiamo il sistema di hashing dobbiamo supporre che l'attaccante sappia tutto ciò che sappiamo .

Dopotutto, se ci fosse un luogo in cui memorizzare il numero di round che era garantito non fosse compromesso, potremmo semplicemente archiviare le password lì e non preoccuparci affatto dell'hashing.

    
risposta data 29.08.2015 - 02:09
fonte
7

Il numero di iterazioni e il sale sono memorizzati nello stesso database, di solito nello stesso campo dell'hash della password stessa. Perché il sito ha bisogno di sapere quelle cose tanto quanto un potenziale aggressore, e quindi devono essere facilmente disponibili. Ad esempio, le bcrypt password hash contengono il (numero di base 2 del) numero di iterazioni separate da $ segni dal resto di l'hash.

    
risposta data 28.08.2015 - 12:10
fonte
3

Mentre la risposta attualmente accettata è corretta e il numero di iterazioni è solitamente memorizzato dove si trovano gli hash stessi, anche se questo non era il caso:

  1. Per principio di Kerckhoff , dovresti dare per scontato che l'attaccante possa scoprirlo. In pratica, potrebbero scoprire, ad esempio, creando il proprio login con una password conosciuta o cronometrando un tentativo di accesso.

  2. Anche se il numero di iterazioni era sconosciuto, aggiungerebbe un fattore costante al tempo richiesto dall'hacker per controllarle tutte, almeno con le funzioni comuni di hashing della password come PBKDF2 , in cui è possibile derivare l'hash da 1000 iterazioni dall'hash di iterazione 999 con una singola iterazione. L'utente malintenzionato dovrebbe solo confrontare i valori dell'intermediario con l'hash della password.

risposta data 29.08.2015 - 14:06
fonte

Leggi altre domande sui tag