it-swarm-eu.dev

Perché SHA-256 non è buono per le password?

Ho appena iniziato a conoscere tutto questo e non riesco davvero a trovare una risposta da nessuna parte, in particolare perché SHA-256 non viene utilizzato per le password? Ho scoperto che la ragione è che, poiché il normale SHA-256 è una funzione veloce, ed è meglio usarne di più lenti, ma ecco la parte che non ho davvero, da quello che ho letto finora, SHA-256 produce un hash che richiederebbe MOLTI anni per decifrare, come MOLTO MOLTO, quindi perché è considerato dannoso per le password quando è praticamente impossibile decifrare?

5
Wiktor

Si tratta di ridurre il rischio complessivo di perdita. Un buon algoritmo hash rende impossibile invertire il valore hash per calcolare il testo originale. Tuttavia, le password sono molto, molto brevi. Provando a indovinare una password, l'aggressore può confrontare l'output del suo SHA-256 con lo SHA-256 che trova nel database. E poiché le password sono così brevi, testare molte ipotesi di password in questo modo è facile per un computer. Per qualche migliaio di dollari puoi acquistare un piccolo supercomputer dedicato ai test SHA-256 (utilizzato per il mining di bitcoin), che consente a un utente malintenzionato di testare 16 trilioni diverse ipotesi di password al secondo. Questo è molto più efficace del tentativo di interrompere SHA-256.

Hashing password non significa cercare di impedire il crack di una singola password. I proprietari di siti Web sono molto più preoccupati perché hanno un database di un milione di utenti e quando gli aggressori irrompono, rubano spesso una copia del database di password. Vogliono rendere difficile per l'attaccante violare tutte le password nel loro database.

Con l'hardware dedicato (o una matrice di zombi botnet), un utente malintenzionato può facilmente violare la maggior parte delle password in un tipico database in cui sono protette solo da una singola iterazione di SHA-256. E la violazione delle password su un sito consente agli aggressori di sfruttare le persone che riutilizzano le password su più siti. Questo è un precursore per eseguire attacchi di acquisizione del conto (ATO), in cui riutilizzano le password rubate per accedere a conti bancari o carte regalo e rubare denaro reale.

Per difendersi da questo, un algoritmo di protezione della password appositamente costruito viene creato come un perditempo. Ad esempio, PBKDF2 esegue un algoritmo hash centinaia, migliaia o milioni di volte, a seconda di come lo si configura. Ciò aumenta la quantità di lavoro che un utente malintenzionato deve eseguire per eseguire un singolo test in base a quel grande fattore. Se si imposta PBKDF2 per eseguire un milione di iterazioni, ciò ridurrebbe l'efficacia della casella in alto per testare solo 16 milioni di ipotesi di password al secondo. Un utente malintenzionato sarebbe in grado di violare solo un milionesimo delle password nel database rispetto al crack di un database in cui sono stati archiviati come singolo SHA-256. Questa è la riduzione del rischio.

14
John Deters

Oltre all'ottima risposta di John, c'è un'altra cosa importante da considerare.

Quando si controlla una password, si trascorre molto tempo in azioni come la ricerca delle informazioni dell'account memorizzate (nome utente, password) in un database.

Se disponi di un algoritmo di hashing veloce, quella ricerca ora occupa una parte significativa della convalida della password. Ciò rende relativamente facile per un intruso eseguire un attacco in cui spara semplicemente nomi e password casuali e determina quali nomi anziché password non esistono temporizzando le risposte.

Lasciando lentamente la password in arrivo prima di inviarla al database per il confronto con la password memorizzata, si prende la durata della ricerca del database e del confronto delle password stessi del tempo necessario per il controllo delle password. Il risultato è che una ricerca fallita ora impiega lo stesso tempo (entro il margine per la latenza di rete ecc.) Di una ricerca riuscita.

Naturalmente questo presuppone che tu abbia l'hash della password in entrata prima di provare a recuperare le informazioni dell'utente. In caso contrario, un errore per un utente inesistente sarebbe molto più rapido di un errore per un utente esistente con una password errata, fornendo alla persona che sta effettuando un attacco al sistema informazioni potenziali su quali tentativi ha effettuato nomi utente reali, anche se non sapeva che erano nomi utente reali per cominciare.

Succede in pratica? Nessuna idea. Ma questa è stata una delle ragioni per i meccanismi di hashing lento che il nostro team di pentest ci ha detto diversi anni fa.

6
jwenting