è l'hash di un hash di una password, ugualmente o più sicuro dell'hash una sola volta? [duplicare]

2

Mi è stato detto che è abbastanza facile decifrare le password quando un utente malintenzionato ottiene un elenco di hash di queste password. Questo è abbastanza facilmente comparabile agli hash delle password comuni precalcolate, o alla forza bruta confrontata o attaccata con un elenco basato su dizionario o lista arcobaleno.

Per questo motivo gli hash veloci come MD5 sono deprecati. La mia domanda è se applicando l'algoritmo hash molte volte si può davvero ottenere l'archiviazione delle password che è più difficile da decifrare con tutti gli approcci sopra citati, o è solo un'illusione?

Mi sembra che la risposta sia sì, è più sicura. Se memorizzo l'hash di una password che è stata re-hash N volte, un utente malintenzionato dovrebbe sapere quanti passaggi di hashing ho fatto, o indovinare questo numero. Prendere N abbastanza grande mi sembra renderebbe un attacco del tutto inattuabile, mentre conservare l'hash sarebbe ancora una cosa rapida (immagina alcune decine di migliaia di passaggi di hash, sarebbe ancora questione di secondi che indovino su una CPU)

    
posta Rho Phi 14.12.2017 - 14:53
fonte

3 risposte

7

Hai ragione sul fatto che un numero maggiore di iterazioni migliora la sicurezza, ma non è certamente un proiettile d'argento.

Come dice @Marc, dovresti dare per scontato che l'hacker conosca il numero di iterazioni, in modo da non avere alcuna sicurezza lì. Dove guadagni, aumenti il costo dell'attacco. Se stai utilizzando un numero elevato di iterazioni di una grande funzione di hashing della password lenta come argon2, scrypt o il vecchio pbkdf2, allora ogni ipotesi sarà più costosa in termini di tempo di CPU e costi dell'elettricità.

L'attacco è ancora fattibile, ma diventa costoso, come $ 50.000 di tempo di elaborazione su AWS costoso, quindi stai costringendo a chiedere "è il valore di ciò che posso rubare con questa password abbastanza alta da bilanciare i costi dell'attacco?

(Come dice anche @Marc, questa risposta presuppone che tu stia facendo una corretta salatura, altrimenti le tabelle arcobaleno possono essere utilizzate e l'attacco diventa molto più economico).

    
risposta data 14.12.2017 - 15:09
fonte
5

by applying the hash algorithm many many times one can really achieve storage of passwords that is harder to crack

Sì, se fatto correttamente. Molte funzioni di hash delle password moderne sono lente perché eseguono un rapido calcolo hash migliaia di volte.

an attacker would have to know how many passes of hashing I did

Normalmente non viene usato come proprietà di sicurezza. Normalmente il numero di iterazioni viene memorizzato insieme all'hash e non mantenuto segreto .

Taking N large enough seems to me it would make an attack quite unfeasible

Questo è corretto, perché l'hash della password diventa più lento. Un tempo tipico per l'hashing della password è 100 millisecondi. Questo è a malapena visibile per gli utenti e aumenta notevolmente il tempo per fare un attacco a forza bruta.

    
risposta data 14.12.2017 - 15:07
fonte
1

Eseguire molti round di hashing è un inizio ma non è sufficiente.

Un utente malintenzionato potrebbe generare una tabella di ricerca degli hash e visualizzare semplicemente gli hash su tutte le password memorizzate corrispondenti.

Il minimo che si vuole fare è combinare un salt (dati generati pseudo-casuali) con la password, quindi eseguire il risultato attraverso il ciclo di hash. Il sale dovrebbe essere unico per ogni credenziale memorizzata. Ciò significa che due password identiche non finiranno con lo stesso hash.

Per le regole di base della memorizzazione delle password, vedi questo cheat sheet .

Oh, e presume che il numero di hash sia noto all'attaccante. O si trova da qualche parte nella tua applicazione, o memorizzato insieme all'hash (se è dinamico, devi sapere quanti cicli applicare).

    
risposta data 14.12.2017 - 15:00
fonte

Leggi altre domande sui tag