Salted password + hash - è davvero utile? [duplicare]

5

Sono nuovo sull'argomento e volevo sapere il concetto di avere degli hash salati prima di andare ai dettagli tecnici.

Da quello che ho capito

  • password - testo semplice
  • password hash - password in chiaro crittografata da un algoritmo di hashing irreversibile (in un modo)
  • password hash salata - testo casuale + password di testo semplice sottoposta a hash / hash (sale + testo normale)
  • una tabella arcobaleno è un elenco di risultati hash precalcolati da un elenco di parole del dizionario, confrontando le password hash con l'elenco nella tabella arcobaleno per una corrispondenza che rivelerà la password effettiva utilizzata dall'utente.

Quindi, 2 delle stesse password in chiaro non avranno lo stesso valore di hash a causa del valore casuale del sale.

Il sale viene talvolta memorizzato con la password hash.

Da quanto sopra,

  1. Sto presumendo che non ci siano tentativi di password massima - In che modo avere un sale impedisce a un utente malintenzionato di forzare la password nel sistema semplicemente provando la password casuale (ad esempio tramite un elenco di dizionari)? Stanno utilizzando lo stesso meccanismo di accesso legittimo rispetto all'utente effettivo semplicemente tentando / immettendo password diverse per accesso.
  2. Se il sale previene un attacco arcobaleno avendo i dati casuali aggiunti al testo in chiaro prima dell'hash MD5, il primo criterio è che l'attacco arcobaleno ha un elenco di hash (sale + password) con cui confrontarlo. Ora, il sistema non è già stato compromesso quando l'utente malintenzionato ha l'elenco delle password con hash?
  3. Se la password salt e hash è archiviata insieme, non sarebbe che quell'utente malintenzionato (invece di usare una tabella arcobaleno) ricalcoli l'elenco di testo del dizionario + il sale recuperato per ricavare i risultati dell'hash e confrontarli con l'hash password nell'elenco recuperato?

È solo che ora la tabella arcobaleno è costruita sulla base di un singolo valore salt per una particolare password con hash. Per un'altra voce password, sarà necessario utilizzare un'altra tabella arcobaleno precalcata basata su quel sale associato.

La mia comprensione è sbagliata? Quindi cosa aiuta veramente il sale?

    
posta Noob 17.07.2015 - 10:55
fonte

5 risposte

20

Dalle tue intese iniziali:

  • Una tabella arcobaleno è, per un determinato algoritmo hash, una mappa esaustiva da hash output a input . Dato che la tabella deve coprire l'intero intervallo di output e che un buon algoritmo hash rende difficile prevedere l'input dall'output desiderato e costoso per calcolare l'output, dovrebbe essere molto costoso da generare.

Per quanto riguarda le tue domande:

  1. Salare i tuoi hash non fa nulla per prevenire attacchi di forza bruta contro la tua pagina di accesso. Protegge invece contro il tuo (o quello di qualcun altro, se sta usando lo stesso algoritmo di hash che hai) DB compromesso e l'hacker che conosce gli hash. Una volta che hanno l'hash, lo cercano nella tabella dell'arcobaleno per trovare l'input che genererà quell'hash e lo inseriranno nella tua pagina di login. Non importa nemmeno se l'input non è uguale alla password dell'utente, poiché entrambi eseguiranno lo stesso hash sullo stesso valore.
  2. Come notato sopra, le tabelle arcobaleno sono costose da generare.
    • Se non si utilizza sale e un algoritmo di hash comune, la tabella esiste già e tutti gli account sono compromessi. Questo è economico da fare.
    • Se si utilizza 1 salt per tutti gli utenti o un algoritmo hash univoco, l'utente malintenzionato dovrà generare 1 tabella arcobaleno e tutti gli account verranno compromessi. Questo è costoso, ma forse vale la pena pagare tutti gli account.
    • Se si utilizza un salt unico per ciascun utente, l'utente malintenzionato dovrà generare 1 tabella arcobaleno per ciascun utente , indipendentemente dall'algoritmo che si utilizza. Questo è costoso, e il profitto è 1 account. Spero che questo non valga la pena.
  3. Salting non protegge dagli attacchi di dizionario

L'obiettivo è quello di fare in modo che l'attaccante faccia il maggior lavoro possibile, abbastanza che sia più facile trovare l'utente (o se l'attaccante è un pensatore molto chiaro, il tuo sysadmin) e batterlo con un tubo di gomma piuttosto che impegnare risorse non banali per calcolare le tabelle arcobaleno.

Per inciso, MD5 non è un buon algoritmo di hash in questo contesto, è molto più veloce da calcolare.

    
risposta data 17.07.2015 - 11:37
fonte
7

Versione semplice: i sali non fermano gli attacchi di forza bruta contro la password di un singolo utente. Quello che loro fermano è che sei in grado di fare un attacco di forza bruta contro tutte le password degli utenti contemporaneamente.

    
risposta data 17.07.2015 - 14:37
fonte
2

Il sale non aiuta contro gli attacchi di forza bruta, poiché l'attaccante sta sparando tutte le password note agli uomini, finirà per essere fortunato e indovinare.

I sali diventano utili quando le password memorizzate sono state rubate, per trovare la password che appartiene all'hash (non vorrei usare MD5) puoi prendere una password casuale, cancellarla e controllarla contro l'hash che hai trovato le password rubate. Le tabelle Rainbow rendono questo andare molto più veloce.

Tuttavia, quando si usano i sali, non troverà la password ma la password + sale, il che significa che dovrà sottrarre il sale per trovare la password effettiva. Il punto di utilizzo di un sale è che ne usi uno diverso per ogni password, quindi se l'utente malintenzionato incrina una password, farà solo quello, crack quella password, anche se qualcun altro sta usando la stessa password, quell'hash sarà completamente diverso.

L'uso di sali non significa rendere impossibile la decifrazione di una password, ma richiede molto tempo per decifrare tutte le password, dato che dovrai controllare ogni singola password come hash univoco, anche se viene utilizzata la stessa password ancora una volta.

Tutto ciò richiede tempo per rompere tutti gli hash.

    
risposta data 17.07.2015 - 11:17
fonte
1

Ecco la risposta alla domanda correlata che dovrebbe risolvere tutti della tua confusione: Come password di hash sicure?

Modifica

Alla domanda 1.

Come è stato detto da altri rispondenti, non puoi impedire la forza bruta salendo le tue password. Esistono altre tecniche per questo compito, di solito è una limitazione di qualche tipo e un numero limitato di tentativi. La strozzatura graduale con ogni tentativo fallito funziona meglio dal punto di vista dell'UX.

Alla domanda 2.

Ecco l'estratto dalla risposta collegata sopra:

Since the overall contents of a server that can validate passwords are necessarily sufficient to indeed validate passwords, an attacker who obtained a read-only snapshot of the server is in position to make an offline dictionary attack: he tries potential passwords until a match is found. This is unavoidable. So we want to make that kind of attack as hard as possible. Our tools are the following:

<...>

Salts: among the advantages of the attacker over the defender is parallelism. The attacker usually grabs a whole list of hashed passwords, and is interested in breaking as many of them as possible. He may try to attack several in parallels. For instance, the attacker may consider one potential password, hash it, and then compare the value with 100 hashed passwords; this means that the attacker shares the cost of hashing over several attacked passwords. A similar optimisation is precomputed tables, including rainbow tables; this is still parallelism, with a space-time change of coordinates.

The common characteristic of all attacks which use parallelism is that they work over several passwords which were processed with the exact same hash function. Salting is about using not one hash function, but a lot of distinct hash functions; ideally, each instance of password hashing should use its own hash function. A salt is a way to select a specific hash function among a big family of hash functions. Properly applied salts will completely thwart parallel attacks (including rainbow tables).

Alla domanda 3.

Per dirla in breve, la relazione tra la tavola arcobaleno e il sale è che hai una tabella arcobaleno per valore di sale. Calcolare una tabella arcobaleno equivale a bruteforce la password che usa il sale singolo o non ne usa affatto. Costa tempo, e in genere molto. Se tutte le tue password nel database sono salate utilizzando un diverso valore di sale, il lavoro dell'attaccante nel caso in cui il database venga rubato, in parole povere, è semplicemente aumentato di un ordine di grandezza. Per ogni password deve esistere la tabella arcobaleno precalcata specifica.

Non è una questione di protezione di per sé , si tratta di rendere più difficile la vita degli attaccanti.

    
risposta data 17.07.2015 - 17:09
fonte
0

Il tuo primo punto è facilmente risposta. Non c'è nulla che lo impedisca. Il sale non è un mezzo per evitare comunque gli attacchi di forza bruta.

Il tuo secondo e terzo punto sono più pertinenti. I sali sono qui per evitare di avere un tavolo arcobaleno per dominarli tutti. Vale a dire, per ogni utente, si ha un sale diverso. Ciò significa che se vuoi attaccare più utenti, devi fare il lavoro di calcolo delle tabelle arcobaleno per questo particolare sale. I calcoli delle tabelle arcobaleno non sono gratuiti, specialmente quando il valore del sale è abbastanza grande. Ci vogliono tempo e denaro.

Naturalmente, i sali non sono la soluzione che risolverà tutti i problemi relativi alle password. Tuttavia, la sicurezza riguarda il trade-off. Si dispone di un metodo semplice per verificare l'autenticazione dell'utente, ma per l'aggressore è difficile (richiede molto tempo e denaro). Una delle cose da sapere sulla sicurezza è che "con i giusti mezzi, puoi rompere qualsiasi cosa". Non tutti gli attaccanti hanno accesso a tutti i mezzi necessari.

    
risposta data 17.07.2015 - 11:25
fonte

Leggi altre domande sui tag