Domanda:
Salare un hash è davvero sicuro come implica la conoscenza comune?
Thomas Andreè Wang
2013-05-08 17:14:32 UTC
view on stackexchange narkive permalink

(Ho cercato su questo argomento, ma non ho trovato alcuna domanda / risposta completa che lo riguardasse, o anche buone porzioni di domande che potrebbero essere pertinenti.)

I sto implementando una funzione salt per le password degli utenti sulla mia pagina web e mi chiedo alcune cose.

Un salt è un'estensione aggiunta a una password e quindi sottoposta ad hashing, il che significa che la password è memorizzata nel database come hash (password + salt) . Ma dove si conserva il sale? Un sale serve semplicemente a rendere "inutili" le tabelle arcobaleno, giusto?

Un attaccante non potrebbe semplicemente costruire una tabella arcobaleno, quindi convertire tutti gli hash e rimuovere il sale? Dopo tutto, il sale è memorizzato da qualche parte nel database. Pertanto, se si possono trovare le password con hash, si dovrebbe essere in grado di trovare i sali corrispondenti. Mi sembra che un salt allunghi solo le password, costringendo la tabella arcobaleno a durare più a lungo.

Quindi come si massimizza l'efficacia di un salt? Non vedo molte ragioni di sicurezza per questo, oltre a rendere le password più lunghe dinamicamente, ma poi di nuovo si potrebbero convertirle in bit in una stringa.

Le mie supposizioni su come un il sale funziona correttamente? In caso contrario, come devo archiviarlo correttamente e le password salate?

Nota: Salt non rende un attacco di forza bruta su una singola entrata più difficile che senza di esso. Tuttavia, se 2 utenti utilizzano la stessa password, il sale rende gli hash diversi.
Il sale viene normalmente aggiunto (sale + password); viceversa ho visto che gli "inizi" dell'hashish sono gli stessi e solo la coda viene modificata dal sale. Inoltre, il sale viene aggiunto in modo tale che sia come se l'utente avesse digitato 3453535335325 la mia password dove 3453535335325 è un sale, quindi no, il sale non può essere rimosso dall'hash perché viene anteposto alla password. Dovresti prima unhash la password + salt, ma se potessi farlo, l'hash sarebbe piuttosto rotto.
Non ripeterò il solido lavoro di ciò che altri hanno detto, solo che le GPU hanno reso il ripping attraverso gli hash salati così facile che rende le tabelle arcobaleno ingombranti. Usa un vero hash della password come bcrypt, non MD5
"Sto implementando una funzione salt per le password degli utenti sulla mia pagina web e mi chiedo alcune cose". Usa semplicemente bcrypt! (Non c'è niente di sbagliato nel porre domande per capire la salatura, ma non * implementarlo * da solo in un ambiente di produzione)
Il motivo per cui non uso una libreria finita è semplicemente perché la mia laurea è in sicurezza, e questo è un ottimo modo per imparare. le persone che hanno creato bcrypt per esempio hanno iniziato da qualche parte.
@ThomasAndreèLian SE vuoi imparare, scegli un buon algoritmo noto come `bcrypt` e implementalo tu stesso. Questo ha due vantaggi: 1) In realtà impari qualcosa di utile. 2) Ottieni casi di test che puoi usare per verificare se la tua implementazione non funziona.
@AntonRoth Se i sali non sono fuoriusciti. Quindi "saling" -> allungare la password è più sicuro se l'attaccante ha solo l'hash della password con salt e il sale è "casuale". la lunghezza vince l'entropia nella situazione in cui l'attaccante deve usare la forza bruta.
Otto risposte:
user10211
2013-05-08 17:18:28 UTC
view on stackexchange narkive permalink

Hai un'idea sbagliata fondamentale di come funzionano le tabelle arcobaleno.

Una tabella arcobaleno o una tabella hash viene costruita da un attaccante prima di un attacco. Supponiamo che io crei una tabella hash contenente tutti gli hash delle stringhe inferiori a 7 caratteri per MD5 . Se comprometto il tuo database e ottengo un elenco di hash, tutto ciò che devo fare è cercare l'hash sulla tabella per ottenere la tua password.

Con un salt, non puoi generare una tabella arcobaleno per un algoritmo specifico prima di un attacco. Un salt non è pensato per essere segreto, lo memorizzi insieme all'hash nel tuo database.

x = hash (salt + password) Lo memorizzerai quindi nel tuo database in il formato di salt + x Questo rende inutili le tabelle arcobaleno e le tabelle hash.

Come al solito non rotolare il tuo, usa bcrypt , scrypt o pbkdf2 che si prende cura di tutti i dettagli compresa la salatura per te. Vedi Come eseguire l'hashing sicuro delle password?

non esistono tabelle arcobaleno finite per MD5 e altri algoritmi hash che coprono gli hash di stringhe da 1 a n caratteri?
@ThomasAndreèLian Non per un po 'di sale generato casualmente, no.
@Terry Chia se l'attaccante ha accesso sia al salt che all'hash (e lo fa ha violato il database) non è il sale vicino a "inutile"? Tecnicamente ha solo bisogno di lanciare qualche GPU in più.
Gilles 'SO- stop being evil'
2013-05-08 17:44:13 UTC
view on stackexchange narkive permalink

Una tabella arcobaleno è un'ottimizzazione per invertire gli hash con la forza bruta. Funziona con un compromesso: esegui molti precalcoli per costruire un'enorme struttura di dati e puoi quindi decifrare rapidamente molti hash.

Una tabella arcobaleno aiuta solo gli hash crack nello spazio di ricerca che copre. In concreto, le tabelle arcobaleno sono costruite per testi in chiaro composti da caratteri stampabili e [fino a una certa lunghezza. Il principio di base dell'aggiunta di un salt è che il testo in chiaro sottoposto ad hashing contiene sia la password che il salt; con il sale aggiunto, lo spazio di ricerca diventa troppo grande per creare una tabella arcobaleno.

Pertanto, aggiungendo un sale alla password, non è possibile ammortizzare il costo di un attacco di forza bruta su molte crepe. L'attaccante deve fare tutto il lavoro per ogni hash, iniziando solo quando conosce il sale.

Dato un hash e un sale, non c'è modo di "rimuovere il sale". Questa è una proprietà di base di una funzione hash: anche se sai che due stringhe sono correlate (es. Sai che la password è una sottostringa di password + salt), non ti aiuta a trovare hash (password) che conosce hash (password + sale). Non è necessario nascondere il sale all'attaccante: deve essere univoco (e non derivato dalla password) ma non è necessario che sia più segreto del hash. (Puoi aggiungere un ulteriore sale segreto, che è chiamato pepe, ma è utile solo in un ristretto insieme di circostanze.)

Salare l'hash è solo metà della battaglia. Un'altra parte dell'hashing sicuro delle password è che la funzione hash deve essere lenta, perché questo danneggia molto più il cracker che il verificatore. Non lanciarne uno tuo, utilizza un metodo che è stato verificato da esperti. Utilizza bcrypt o PBKDF2 o scrypt. L'implementazione della memorizzazione delle password non dovrebbe comportare l'esecuzione di crittografia da soli, chiama una funzione di libreria.

Per tutto quello che volevi sapere sull'hashing delle password, tutto quello che non volevi sapere sull'hashing delle password e tutto quello che non sapevi potresti sapere sull'hashing delle password, leggi Come eseguire l'hashing sicuro delle password?

Suggerimento: cambia "deve essere unico" in "deve essere unico per ogni password".
@Iszi: Tecnicamente, avere lo stesso sale per due password diverse fa trapelare anche alcune informazioni: vale a dire, il fatto che quelle password _ sono_ diverse (poiché, se non lo fossero, l'intero hash sarebbe identico).
@Iszi: Considerando che è estremamente improbabile che generi mai lo stesso sale casuale due volte, e che se c'è una collisione di sale puoi semplicemente generarne uno nuovo per un costo marginale, non penso che sia un suggerimento molto utile.
@IlmariKaronen Dal momento che non c'è modo di dire se la password è identica a un'altra password là fuori (forse su un server diverso), il server può solo applicare l'unicità globale (generando un salt casuale), non l'unicità per password. E come già notato da Ilmari Karonen uno schema di unicità per password potrebbe far trapelare che due password sono uguali. Allora perché dovresti introdurre il concetto di unicità per password?
@Gilles Quello che intendevo dire allora è che deve essere unico per ogni * utente *, non per particolari stringhe di password.
@Iszi [Oops, ho scelto l'obiettivo di completamento automatico sbagliato nel mio commento precedente. Sono contento che tu l'abbia trovato comunque.] Il sale deve essere univoco anche nei database delle password. Ad esempio, se tutti usassero "1", "2", "3", ... come sali, ci vorrebbe solo una tabella arcobaleno leggermente più grande per tenere conto di ogni testo con hash contenente queste cifre extra, anche se i sali sarebbero unici per utente su un determinato server.
AJ Henderson
2013-05-08 19:45:20 UTC
view on stackexchange narkive permalink

Hai fondamentalmente ragione sul fatto che si tratta solo di allungare la password, ma ci sono alcune cose aggiuntive che aggiunge. Inoltre, la password media non è così lunga o sicura e l'aggiunta di lunghezza "gratuitamente" è raramente dannosa. Il sale fa in modo che un utente malintenzionato non possa hash "password" una volta e quindi cerchi ogni utente che abbia una password di "password".

Invece, dovrebbero generare hash di "password03j9834nfp-3028n408" e "passwordn0438wnvas89v5sne" e ... Ciò aumenta notevolmente la protezione dell'identificazione di password non sicure e ha ancora un vantaggio positivo sull'aumento della difficoltà di individuazione password sicure.

Dove la tua comprensione va fuori strada è quando dici "Un utente malintenzionato non potrebbe semplicemente costruire una tabella arcobaleno, quindi convertire tutti gli hash e rimuovere il sale?". Ci sono alcuni problemi qui.

Il primo è quello delle collisioni. Non è garantito che una tabella arcobaleno produca l'input originale, è interessata solo a produrre un input AN che ha prodotto l'output desiderato. Poiché il sale verrà aggiunto a qualsiasi cosa inserisca un utente, l'attaccante deve trovare l'input esatto che è stato utilizzato per l'hash.

Dato che l'input esatto deve essere trovato, il vantaggio di una tabella arcobaleno da sfruttare le collisioni sono perse. Inoltre, la dimensione richiesta per la forza bruta di tutti i sali possibili sarebbe troppo grande per essere trattenuta praticamente da qualsiasi attaccante.

Inoltre, non puoi semplicemente rimuovere il sale da un hash senza capire quale fosse l'input originale. Dovresti cercare un valore che finisca nel sale che corrisponde all'hash dato. Ciò richiede quindi la produzione di una tabella arcobaleno separata per ogni valore di sale nel DB e questo vanifica la capacità di pre-calcolo poiché non è possibile creare una tabella arcobaleno per ogni possibile sale.

Quindi, rende le password più lunghe E garantisce che siano uniche ED elimina le collisioni di hash, non "solo" allungando le password ...
L'eliminazione delle collisioni di hashing è un completo non problema qui. Ciò è importante nelle tabelle hash e nelle tabelle hash non è possibile aggiungere bit casuali alle chiavi di ricerca solo per eliminare le collisioni, perché in tal caso si modificano le chiavi di ricerca. Quindi "Bob" non si trova nella tabella hash, perché, sciocco, avresti dovuto cercare "Bob0z + dKl".
@schroeder - Dal punto di vista della sicurezza, una password molto lunga e molto sicura non sarà più facile da violare di una password più semplice e salata, almeno per quanto riguarda la forzatura bruta. Offre un leggero guadagno in termini di input non vincolato da una collisione. Ecco perché ho detto fondamentalmente corretto. Ci sono alcune complessità che vengono acquisite, ma il punto principale è estendere la complessità a qualcosa che non può semplicemente avere tutte le combinazioni di sale / password incorporate in una tabella arcobaleno.
@Kaz - le collisioni di hashing sono rilevanti nell'altra direzione. Non per le tabelle arcobaleno in particolare, ma se trovo che hso8urn0 e password si risolvono entrambi con un valore hash di 12345678, posso usare hso8urn0 come password. Tuttavia, poiché il sale verrà aggiunto al mio input utente, devo trovare una collisione che termini con il sale, il che significa che la maggior parte delle possibili collisioni non funzionerà più.
@AJHenderson Non ti sto portando al compito, sto dicendo che hai valore nella tua risposta che potresti minare con una sola parola nella tua introduzione.
Non vedo perché le collisioni siano un problema (che puoi trovare un'altra stringa che funziona come password). È un problema nel caso molto ipotetico che scegli una password molto complessa, ma entra in conflitto con "passw0rd". :)
@Kaz, Non sono sicuro che sia un problema per la maggior parte delle impostazioni di password, ma so che ci sono stati punti deboli con l'iniezione di contenuti alla fine di un file per farlo corrispondere agli hash dati. Anche se all'epoca si tratta principalmente di un attacco teorico applicato a un hash di password sicuro, non vi è alcuna garanzia che non sarà un attacco in futuro e un sale aiuta a proteggerlo.
@Schroeder - un punto valido, l'ho aggiornato per chiarire i punti più fini più rapidamente.
Le collisioni hash sui digest di messaggi sono un problema diverso perché gli hash sono la base per le firme digitali e quindi consentono di spostare una firma in un documento contraffatto. I sali peggiorano il problema in quel caso perché il falsario può manipolare il sale per aiutare a costruire il falso. Se al documento autentico non è consentito aggiungere spazzatura casuale (cioè il sale), anche il documento contraffatto non può farlo, altrimenti sembra sospetto. L'unica arma è una solida funzione di hashing che rende difficile trovare collisioni.
@Kaz - sì, non sto dicendo che sia utile per la protezione delle firme. Sto dicendo che un vincolo noto sull'ingresso rende più difficile trovare una collisione. Dovresti fare delle ipotesi per quel valore in particolare invece di avere la possibilità di utilizzare una collisione scoperta nel tentativo di risolvere un altro record. Ad esempio, se scopro che aousenfo si risolve in un hash 1234567 di un record che ha un salt di abcde, potrebbe non essere utile per quel record, ma non posso riutilizzare quello sforzo su nessun record che ha un hash di 1234567 perché l'ingresso è diverso.
Ma la ragione più probabile per cui due record avrebbero lo stesso hash (in assenza di salt) è che gli utenti in effetti hanno la stessa password, non che hanno password diverse con lo stesso hash.
dr jimbob
2013-05-08 20:40:52 UTC
view on stackexchange narkive permalink

Un salt unico risolve un problema: ogni account non può essere attaccato contemporaneamente in un gigantesco tentativo di forza bruta.

Supponiamo che tu abbia provato a costruire una tabella arcobaleno di tutte le password ASCII stampabili che erano 8 caratteri lunghi 1 . Sono 96 8 ~ 7,2 milioni di miliardi (7,2 x 10 15 ) possibilità. Se avessi una GPU che genera password a un miliardo al secondo, ci vorrà circa un mese per decifrare (ea 200 W a $ 0,10 per kWhr è in media circa $ 200; ~ $ 400 nel peggiore dei casi per la tua bolletta elettrica).

Quindi scopri gli hash di ogni account su linkedin da una sorta di iniezione SQL o trovando un disco rigido con un vecchio backup. Hai hash di un milione di utenti. Ora, se sono hash non salati, puoi rompere la stragrande maggioranza di questi hash in due mesi con una GPU per circa ~ $ 400 di elettricità. Se sono tutti salati in modo univoco e vuoi rompere tutti i milioni di loro, ora ci vorranno 400 milioni di dollari di elettricità poiché ogni sale unico deve avere il proprio attacco indipendente. Ora, prima di dire, costruirò una tabella arcobaleno più grande che includa i sali, renditi conto che almeno un sale tipico ha 5 caratteri esadecimali (16 ** 5), il che significa che ci vorrà un milione di volte in più per creare il tuo arcobaleno tabella (ad es., dovrai spendere 400 milioni di dollari per l'elettricità per generarla).

Ora aggiungi il rafforzamento della chiave dove invece di eseguire un hash una volta, itererai il processo N volte (ad es. La funzione hash iterata tre volte sarebbe: hash (salt + hash (salt + hash (salt + pw))) ). Ora invece di essere in grado di rompere un miliardo di hash al secondo, possono rompere un miliardo / N di hash al secondo, quindi tutti gli attacchi saranno N volte più costosi. (Un tipico N è 5000; quindi per rompere un singolo hash occorrerebbero circa $ 2 milioni di elettricità; il problema con N super grande è che le sue risorse di calcolo sui tuoi server per la verifica dei tentativi di password sono maggiori).

1 - Questo non è il modo più efficace per violare le password. Gli elenchi di dizionari di milioni di password utilizzate in precedenza sono molto più efficaci, poiché molte password sono piuttosto deboli. Non consiglio le persone che generano le password da sole (in genere con un'entropia molto bassa) o che le riutilizzano. Utilizza un servizio come keepassx che ti consente di creare password casuali per ogni sito e archiviarle in un file crittografato. Rafforzamento chiave + sale unico significa che è impossibile provare a rompere qualsiasi hash tranne il più semplice.

Shurmajee
2013-05-08 18:36:36 UTC
view on stackexchange narkive permalink

Le tabelle arcobaleno sono tabelle hash precalcolate che vengono utilizzate per decifrare le password in un tempo relativamente più rapido perché cercare una tabella è molto più veloce del calcolo di un hash.

se è possibile trovare l'hashed password si dovrebbe essere in grado di trovare i sali corrispondenti

Il sale noto all'attaccante non creerà un grosso problema se l'attaccante sta cercando di violare una singola password . Il sale renderà difficile e dispendioso in termini di tempo decifrare un elenco di password perché per ogni password il sale è diverso.

Ma dove si memorizza il sale? Un sale serve semplicemente a rendere "inutili" le tabelle arcobaleno, giusto?

Il sale è memorizzato solo nel DB e per ogni password hai un sale casuale diverso. Sì, il sale lo rende molto difficile usare un tavolo arcobaleno. Le tabelle arcobaleno vengono generalmente create utilizzando le password comuni utilizzate. L'aggiunta di un salt casuale rende molto difficile essere violati da un tavolo arcobaleno.

Un attaccante non potrebbe semplicemente costruire un tavolo arcobaleno, quindi convertire tutti gli hash e rimuovere il sale?

Potresti voler dire costruire un tavolo arcobaleno con sali noti (prima di eseguire l'attacco reale) perché non puoi semplicemente rimuovere un sale dall'hash. Ricalcolare la tabella non è raccomandato perché se prendi in considerazione tutti i sali conosciuti la dimensione della tabella sarà troppo grande. Ricorda il compromesso spazio / tempo. Se crei le tabelle per un sale alla volta stai sprecando troppe energie. Lo scopo della creazione di una tabella arcobaleno è quello di crackare un elenco di password e non una singola password.

Un altro valore aggiunto molto importante fornito dal salting è che due utenti non finiranno per avere un hash della password identico perché i sali saranno diversi. Immagina che un utente malintenzionato sia in grado di decifrare una delle password e se i sali non vengono utilizzati, l'attaccante deve semplicemente dare un'occhiata per scoprire quali altri utenti stanno utilizzando la stessa password.

Kaz
2013-05-08 21:31:32 UTC
view on stackexchange narkive permalink

In primo luogo, perché stai implementando codice crittografico di basso livello per una pagina web? Penseresti che questo sia un problema risolto: usi un framework che usa le librerie.

In secondo luogo, l'hash protegge le password nel caso in cui gli hash trapelino. Il tuo sito non fornisce l'accesso al database delle password, quindi questa situazione idealmente non dovrebbe nemmeno verificarsi. I sali aiutano a difendere il database delle password nel suo insieme in quell'evento.

Se l'attaccante è concentrato su una singola password da quel database, allora non fa molta differenza. Rende il lavoro solo più difficile, nel senso che l'attaccante non può semplicemente recuperare la password da una tabella arcobaleno cercando l'hash. La forzatura bruta di una password con un salt è solo leggermente rallentata perché viene eseguito l'hashing di pochi byte in più, il che costa qualche ciclo macchina in più nei round di hashing.

Una volta, i sistemi Unix fornivano l'accesso (come i sistemi del campus per gli studenti) aveva le loro password violate a destra ea sinistra. C'erano vari motivi per cui questo era facile, ma il problema principale era semplice: le informazioni sensibili sull'hash della password erano conservate nello stesso file degli altri campi di informazioni su un utente e quel file, / etc / passwd era leggibile in tutto il mondo. La soluzione consiste nell'inserire le informazioni riservate in un file separato, / etc / shadow . Presto: questo pone fine al cracking delle password da parte di script kiddie che hanno account legittimi e non privilegiati sul sistema.

Allo stesso modo, nessuno sarà bruto forzare le tue password a meno che tu non le lasci trapelare. qualcuno sta cercando la password di un determinato utente, c'è poco che può essere fatto per fermarlo.

Gli utenti che utilizzano le stesse password su sistemi diversi e non la cambiano per anni e anni saranno sempre vulnerabili. Puoi salarlo, peparlo e aggiungere ketchup; non farà la differenza.

I sali scoraggiano chi vuole craccare il database delle password nel suo insieme e raccogliere quante più password diverse possibile. I sali significano che ogni password deve essere forzata individualmente piuttosto che semplicemente recuperata da tabelle precalcolate. Se un salt ha N bit, allora, almeno idealmente, il database della tabella arcobaleno dell'attaccante deve essere 2 ^ N volte più grande. Un salt a 32 bit significa che hai bisogno di un database di tabelle arcobaleno quattro miliardi di volte più grande per cercare solo le password.

Se il tuo sito ha solo 20 utenti, ovviamente ci sono solo fino a 20 sali diversi. Quindi ciò che un aggressore farà è prendere il dizionario delle password e hash ogni voce in 20 modi diversi con quei sali.

Quindi i sali non solo proteggono il tuo database dalla ricerca nella tabella arcobaleno, ma lo proteggono anche dal cracking della forza bruta di circa un fattore N, dove N è il numero di utenti. Per forzare N password, l'attaccante deve eseguire N volte il lavoro di forzatura bruta. (Supponendo che il sale sia abbastanza largo: almeno grande quanto il logaritmo in base 2 di N. Se un sale è largo, diciamo, solo 12 bit, allora ci possono essere solo 4096 sali diversi, non importa quanti utenti ci sono.)

Senza sali, questo non è vero. Forzare brutalmente un numero qualsiasi di password contemporaneamente è facile come forzarne una, quindi più utenti ci sono, maggiore è il guadagno per sforzo.

Brian
2013-05-08 23:14:22 UTC
view on stackexchange narkive permalink

Ci sono un paio di fattori coinvolti nel salare e te ne manca (almeno) uno.

  • Rendono inutili le tabelle arcobaleno. Se qualcuno guarda nel tuo database delle password e vede che una password è "5f4dcc3b5aa765d61d8327deb882cf99", non ha nemmeno bisogno di creare una "tabella arcobaleno", può semplicemente cercare su Google quel valore e Google gli dirà che è l'hash md5 di " parola d'ordine". Se le password vengono sottoposte ad hashing prima di essere inserite nel db, il meccanismo di ricerca "rainbow table" sarà inutile. Non è necessario conservare il sale nel db per rendere inutili le tabelle arcobaleno. Il tuo salt può essere sempre "xxxx" o qualsiasi altra stringa arbitraria. Se cerchi su google per 6a316e1fdac8a61d9c7a2ed1cba4a804 (l'hash md5 di "xxxxpassword"), non ottieni risultati.

  • Se fatto correttamente, il sale generalmente significa che un intruso ha bisogno di sia il tuo database e il tuo codice per decifrare le tue password. Potresti aver modificato la tua password come "xxxx" + password o pw.substring (0,2) + "xxxx" + pw.substring (2). L'aggressore non sa come hai salato le tue password a meno che non abbia rubato anche il tuo codice. Il tuo server web spesso non è in esecuzione sulla stessa scatola del tuo database e con linguaggi di programmazione compilati il ​​tuo codice potrebbe non essere nemmeno disponibile sul tuo server web. Indipendentemente dai sali che memorizzi nel tuo db, consiglierei anche di avere un salt lungo, arbitrario e fisso memorizzato al di fuori del db che è inoltre concatenato alla password prima dell'hashing.

  • I sali unici rendono il cracking più costoso. Come qualcun altro ha sottolineato, se si esegue l'hashing di ogni parola del dizionario con un salt statico ("xxxx"), è possibile eseguire la scansione dell'intero database delle password per "6a316e1fdac8a61d9c7a2ed1cba4a804" alla ricerca di chiunque abbia la password "password". Se ogni riga utilizza un salt diverso, devi eseguire N hash solo per scoprire se uno degli N utenti ha la password "password".

  • Sul secondo punto, attenzione a usare solo un singolo sale semplice fisso senza nessun altro. Un cracker potrebbe provare ad eseguire l'hashing di stringhe arbitrarie + "password" fino a quando non trova qualcuno la cui password era "password", e quindi avrebbe sostanzialmente risolto il problema. In ogni database di password di grandi dimensioni deve esserci almeno un utente la cui password è una password banale come "password".

Il "sale lungo, arbitrario, fisso" è chiamato pepe.
@SLaks bello, non l'ho mai sentito
"Se fatto correttamente, il sale generalmente significa che un intruso ha bisogno sia del tuo database che del tuo codice ..." Non è un sale, è un pepe. Servono a scopi diversi e [l'utilità del pepe è dubbia] (http://security.stackexchange.com/questions/3272/password-hashing-add-salt-pepper-or-is-salt-enough). Indipendentemente dal fatto che tu usi o meno un peperone, è necessario un sale unico. "Con i linguaggi di programmazione compilati il ​​tuo codice potrebbe non essere nemmeno disponibile sul tuo server web" non ha senso: anche con un linguaggio compilato, il pepe è presente nel binario.
@SLaks: Interessante, non avevo mai sentito quel nome.Gilles: Non c'è niente di "dubbio" nell'uso di un "pepe". Ho visto molti casi in cui le aziende non erano in grado di mantenere la sicurezza dei loro database, mentre un intruso non ha avuto accesso al codice dell'applicazione. Un "pepe" non deve essere una stringa, ma può essere un algoritmo . Il modo in cui mischi il sale nella password, il numero di iterazioni con cui ri-hash, ecc., Sono tutti una specie di "pepe". Sicuramente l'algoritmo o la stringa è in qualche modo nel binario, ma non sarà facile trovarlo. Aggiunge sicurezza oltre il semplice sale.
Kisembo Moses Isaac
2018-01-27 03:26:40 UTC
view on stackexchange narkive permalink

Vedo una tabella arcobaleno ancora funzionante qui, anche se con un po 'di lavoro in più.

se x è il valore hash per password + salt e poiché salt può essere noto a tutti poiché è memorizzato nel database su nei file dell'applicazione, quindi posso ancora utilizzare una tabella arcobaleno

scegli la tua tabella arcobaleno, aggiungi nuove colonne cioè hashed_password_Salt per tutti i valori hash quindi esegui un aggiornamento per la colonna con il risultato per x = hash (password + salt) poiché la colonna delle stringhe delle password comuni che hai già

allora la tua tabella arcobaleno verrà aggiornata per gestire il cracking della password usando l'attacco del dizionario

Sombody può correggermi se non modo praticabile

Ti manca un punto molto importante: il sale è unico per ogni record / voce.
@grunbert concordato.Un sale comune per ogni utente annulla completamente lo scopo.Anche due utenti con lo stesso sale sono visti come una vulnerabilità, quindi la necessità di generare sale cripto-casuali.
Quindi, come viene eseguito il confronto delle password durante la verifica della password per quelle password fissate come valore salato.se hai quella risposta, saprò che posso ancora battere la salatura
La password è fatta da password + salt il trucco è che aggiungendo un salt casuale di per esempio 32 caratteri a ogni password.quindi una normale tabella arcobaleno per, diciamo, 16 caratteri è quindi inutile.avresti bisogno di un rainbowtable di 16 + 32 (almeno 26 ^ 48 combinazioni).oppure potresti decifrare ogni password generando una tabella arcobaleno basata su ogni singolo sale, il che significa generare una tabella arcobaleno unica di 26 ^ 16 combinazione per ogni password.crackare una e una password (il sale impedisce l'identificazione dei duplicati).


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...