Perché SHA-256 non va bene per le password? [duplicare]

5

Ho appena iniziato a conoscere tutto questo e non riesco davvero a trovare una risposta per questo ovunque, cioè perché SHA-256 non è usato per le password? Ho scoperto che il motivo è che, poiché il normale SHA-256 è una funzione veloce, ed è meglio usare quelli più lenti, ma ecco la parte che non ottengo, da quello che ho letto finora, SHA-256 produce un hash che impiegherebbe MOLTO ANNI per craccare, come A LOT A LOT, quindi perché è considerato negativo per le password quando è praticamente impossibile decifrare?

    
posta Wiktor 12.10.2018 - 02:27
fonte

2 risposte

14

Si tratta di ridurre il rischio complessivo di perdita. Un buon algoritmo di hash rende impossibile invertire il valore di hash per calcolare il testo originale. Tuttavia, le password sono molto, molto brevi. Indagando su una password, l'attaccante 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 poche migliaia di dollari è possibile acquistare un piccolo supercomputer dedicato al test SHA-256 (utilizzato per il bitcoin mining), che consente a un utente malintenzionato di provare 16 trilioni diverse ipotesi di password al secondo. Questo è molto più efficace di provare a interrompere SHA-256.

Le password di hashing non riguardano il tentativo di impedire il cracking di una singola password. I proprietari dei siti Web sono molto più preoccupati perché hanno un database di un milione di utenti e quando gli hacker si intromettono, spesso rubano una copia del database delle password. Vogliono rendere difficile per l'utente malintenzionato interrompere tutte le password nel proprio database.

Con l'hardware dedicato (o una serie di zombi di botnet) un utente malintenzionato può facilmente rompere la maggior parte delle password in un tipico database dove 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 loro password su più siti. Questo è un precursore per l'esecuzione di attacchi Account Take Over (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 è costruito come un perditempo. Ad esempio, PBKDF2 esegue un algoritmo di 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 tale fattore. Se imposti PBKDF2 per eseguire un milione di iterazioni, ciò ridurrebbe l'efficacia della casella sopra per testare solo 16 milioni di tentativi di password al secondo. Un utente malintenzionato sarebbe in grado di rompere solo un milionesimo delle password nel database rispetto al cracking di un database in cui sono stati archiviati come singoli SHA-256. Questa è la riduzione del rischio.

    
risposta data 12.10.2018 - 04:48
fonte
6

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

Quando si controlla una password, viene speso molto tempo in azioni come cercare le informazioni sull'account memorizzate (nome utente, password) in un database.

Se si dispone di un algoritmo di hash veloce, tale ricerca occupa ora una parte significativa della convalida della password. Ciò rende relativamente facile per un intruso fare un attacco in cui spara solo nomi e password casuali e determina quali nomi invece di password non esistono sincronizzando le risposte.

Facendo un hashing lento della password in entrata prima di inviarlo al database per il confronto con la password memorizzata, si sta prendendo la durata della ricerca del database e il confronto delle password da soli per il tempo necessario per il controllo delle password. Il risultato è che una ricerca fallita ora richiede lo stesso tempo (all'interno del margine per la latenza della rete, ecc.) Come uno di successo.

Naturalmente questo presuppone che hai cancellato la password in arrivo 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, dando alla persona un attacco al sistema potenziale informazioni su quali dei tentativi effettuati conteneva nomi utente reali, anche se non sapeva che erano veri e propri nomi utente per cominciare.

Questo succede in pratica? Nessuna idea. Ma questa era una delle ragioni per i lenti meccanismi di hashing che il nostro team ci aveva detto diversi anni fa.

    
risposta data 12.10.2018 - 08:32
fonte

Leggi altre domande sui tag