Domanda:
Perché gli hash salati sono più sicuri per l'archiviazione delle password?
Tsyras
2014-02-21 02:58:40 UTC
view on stackexchange narkive permalink

So che ci sono molte discussioni sugli hash salati e capisco che lo scopo è rendere impossibile costruire una tabella arcobaleno di tutti gli hash possibili (generalmente fino a 7 caratteri).

La mia comprensione è che i valori saltati casuali sono semplicemente concatenati all'hash della password. Perché una tabella arcobaleno non può essere utilizzata contro l'hash della password e ignorare i primi X bit noti per essere l'hash salt casuale?

Aggiorna

Grazie per le risposte. Immagino che, affinché funzioni, la directory (LDAP, ecc.) Deve memorizzare un salt specifico per ogni utente, o sembra che il salt andrebbe "perso" e l'autenticazione non potrebbe mai verificarsi.

Oltre al commento di AJ, il semplice salting di un hash non è sufficiente per garantire l'archiviazione sicura della password. I moderni algoritmi di hashing delle password come bcrypt e scrypt richiedono notevoli quantità di CPU e / o memoria, rallentando in modo significativo la capacità di un utente malintenzionato di tentare ipotesi.
Alcuni anni fa ho scritto una serie di articoli per rispondere alla tua domanda. http://blogs.msdn.com/b/ericlippert/archive/tags/salt/
E sì, il sale viene conservato insieme all'hashish e il sale dovrebbe essere per utente.
Il sale può anche essere un sale globale, concatenato all'ID utente e quindi sottoposto a hashing per produrre un salt univoco per l'hash della password dell'utente. In questo modo, non è necessario memorizzare nulla per utente (che potrebbe essere rubato insieme alla password con hash ...)
Il sale non viene aggiunto all'hash! Il salt viene aggiunto (o anteposto) alla password * in chiaro * e il sale e la password insieme vengono inviati all'algoritmo di hashing per produrre l'hash. Ecco perché puoi memorizzare il sale direttamente con il valore hash. Ma ovviamente il semplice hashish salato, oltre ad essere dannoso per il tuo cuore, non è più sufficiente per archiviare in sicurezza le credenziali.
Se anche un sale deve essere conservato da qualche parte (lo fa), perché è effettivamente utile?È fondamentalmente la stessa cosa di una password.
Otto risposte:
tylerl
2014-02-21 11:11:42 UTC
view on stackexchange narkive permalink

Di solito funziona in questo modo:

Supponi che la tua password sia "baseball". Potrei semplicemente archiviarlo grezzo, ma chiunque ottiene il mio database ottiene la password. Così invece ci faccio un hash SHA1 e ottengo questo:

  $ echo -n baseball | sha1suma2c901c8c6dea98958c219f6f2d038c44dc5d362  

Teoricamente è impossibile invertire un hash SHA1. Ma fai una ricerca su Google su quella stringa esatta e non avrai problemi a recuperare la password originale.

Inoltre, se due utenti nel database hanno la stessa password, allora avranno lo stesso hash SHA1. E se uno di loro ha un suggerimento per la password che dice prova "baseball" , beh, ora so quali sono entrambe le password degli utenti.

Quindi, prima di eseguirne l'hashing, anteponiamo una stringa univoca. Non un segreto , solo qualcosa di unico. Che ne dici di WquZ012C . Quindi ora stiamo eseguendo l'hashing della stringa WquZ012Cbaseball . Il risultato è questo:

c5e635ec235a51e89f6ed7d4857afe58663d54f5

Se cerchi su Google quella stringa non viene visualizzato nulla (tranne forse questo pagina), quindi ora siamo a qualcosa. E se person2 usa anche "baseball" come password, usiamo un salt diverso e otteniamo un hash diverso.

Ovviamente, per testare la tua password, devi sapere qual è il sale. Quindi dobbiamo conservarlo da qualche parte. La maggior parte delle implementazioni lo inseriscono proprio lì con l'hash, di solito con un delimitatore. Prova questo se hai openssl installato:

  [tylerl ~] $ openssl passwd -1Password: baseballVerifying - Password: baseball $ 1 $ oaagVya9 $ NMvf1IyubxEYvrZTRSLgk0  

Questo ci fornisce un hash usando la libreria crypt standard. Quindi il nostro hash è $ 1 $ oaagVya9 $ NMvf1IyubxEYvrZTRSLgk0 : in realtà si tratta di 3 sezioni separate da $ . Sostituirò il delimitatore con uno spazio per renderlo visivamente più chiaro:

  $ 1 $ oaagVya9 $ NMvf1IyubxEYvrZTRSLgk0 1 oaagVya9 NMvf1IyubxEYvrZTRSLgk0
  • 1 significa "algoritmo numero 1" che è un po 'complicato, ma utilizza MD5. Ce ne sono molti altri che sono molto migliori, ma questo è il nostro esempio.
  • oaagVya9 è il nostro sale. Inserito proprio lì con il nostro hash.
  • NMvf1IyubxEYvrZTRSLgk0 è la somma MD5 effettiva, codificata in base64.

Se eseguo il processo di nuovo, ottengo un hash completamente diverso con un sale diverso. In questo esempio, ci sono circa 10 14 modi per memorizzare questa password. Tutti questi sono per la password "baseball":

  $ 1 $ 9XsNo9.P $ kTPuyvrHqsJJuCci3zLwL. $ 1 $ nLEOCtx6 $ uSnz6PF8q3YuUhB3rLTC3 / ​​$ 1 $ / jZJXTF3zLwL. $ 1 $ nLEOCtx6 $ uSnz6PF8q3YuUhB3rLTC3 / ​​$ 1 $ / jZJXTF8Kb / OqDamf. U $ KR0jkhpeb1sz.UIqvfYOR.  

Ma, se specifichi deliberatamente il sale che voglio controllare, ottengo il risultato atteso:

  [ tylerl ~] $ openssl passwd -1 -salt oaagVya9Password: baseballVerifying - Password: baseball $ 1 $ oaagVya9 $ NMvf1IyubxEYvrZTRSLgk0  

E questo è il test che eseguo per verificare se la password è corretta. Trova l'hash memorizzato per l'utente, trova il salt salvato, riesegui lo stesso hash usando il salt salvato, controlla per vedere se il risultato corrisponde all'hash originale.

Implementing This Yourself

Per essere chiari, questo post non è una guida all'implementazione. Non limitarti a salare il tuo MD5 e chiamarlo buono. Non è abbastanza nell'attuale clima di rischio. Dovrai invece eseguire un processo iterativo che esegue la funzione hash migliaia di volte. Questo è stato spiegato altrove molte volte, quindi non esaminerò il "perché" qui.

Ce ne sono molti ben consolidati e opzioni affidabili per farlo:

  • crypt : la funzione che ho usato sopra è una variante precedente del meccanismo di hashing delle password crypt unix integrato in tutti Sistemi operativi Unix / Linux. La versione originale (basata su DES) è terribilmente insicura; non considerarlo nemmeno. Quello che ho mostrato (basato su MD5) è migliore, ma non dovrebbe ancora essere usato oggi. Le variazioni successive, comprese le variazioni SHA-256 e SHA-512, dovrebbero essere ragionevoli. Tutte le varianti recenti implementano più cicli di hash.

  • bcrypt : la versione blowfish di crypt codice> chiamata funzionale di cui sopra. Sfrutta il fatto che blowfish ha un processo di configurazione della chiave molto costoso e utilizza un parametro "cost" che aumenta il tempo di configurazione della chiave di conseguenza.

  • PBKDF2 : ("Funzione di derivazione chiave basata su password versione 2") creata per produrre chiavi crittografiche complesse da semplici password, questa è l'unica funzione qui elencata che ha effettivamente una RFC. Esegue un numero configurabile di round, con ogni round hash la password più il risultato del round precedente. Il primo round utilizza un sale. Vale la pena notare che lo scopo originario previsto è creare chiavi efficaci , non memorizzare password , ma la sovrapposizione degli obiettivi rende questa soluzione affidabile anche qui. Se non hai librerie disponibili e sei costretto a implementare qualcosa da zero, questa è l'opzione più semplice e meglio documentata. Tuttavia, ovviamente, utilizzare una libreria ben controllata è sempre la cosa migliore.

  • scrypt : un sistema progettato di recente specificamente per essere difficile da implementare su hardware dedicato. Oltre a richiedere più round di una funzione di hashing, scrypt ha anche uno stato di memoria di lavoro molto ampio, in modo da aumentare il requisito di RAM per le implementazioni. Sebbene sia molto nuovo e per lo più non provato, sembra sicuro almeno quanto gli altri, e forse il più sicuro di tutti.

La spiegazione migliore, più chiara e completa degli hash che ho visto. Ho intenzione di usarlo * spudoratamente * nelle classi in cui insegno sulla sicurezza.
Quindi, in senso stretto, un sale non dovrebbe essere veramente * casuale *, corretto? Come, il software di crittografia dovrebbe tenere traccia dei sali già utilizzati e fare in modo di non riutilizzarli? O è in gran parte irrilevante?
@JeffGohlke Se stai usando un sale di 8 caratteri che è 62 ^ 8 o più di 218 * trilioni * di sali possibili. E vuoi solo assicurarti di non usare lo * stesso sale per la stessa password * due volte. Quindi, no, realisticamente non devi preoccuparti di riutilizzare i sali.
@AdamBalsam Ha senso. Immagino di aver visto davvero solo due sali di personaggi guardando queste cose in passato.
Potresti aggiungere un paragrafo finale sullo stretching dei tasti e sull'uso di un KDF appropriato, altrimenti questo post genererà ancora più schemi `sha1 (salt || pwd)` da parte degli utenti che hanno letto solo questa risposta e sono andati a fare le loro cose. So che è tecnicamente fuori tema, ma dobbiamo davvero combatterlo cercando di non suggerire di usarlo direttamente.
* "Inoltre, se due utenti nel database hanno la stessa password, avranno lo stesso hash SHA1." * In aggiunta a ciò, vale per i database che utilizzano lo stesso algoritmo non salato (forse un utente usa la stessa password su sistemi multipli). Anche questo è indipendente dall'algoritmo hash; anche un algoritmo completamente personalizzato o ipotetico impossibile da rompere non impedirebbe a un utente malintenzionato di vedere quali utenti hanno la stessa password se il salting non viene utilizzato.
Sono venuto qui, ho letto la risposta, ho cercato su Google c5e635ec235a51e89f6ed7d4857afe58663d54f5 e sono tornato qui! :) +1
Ho usato SHA1 per l'hashing della password una volta quando stavo lavorando su un'applicazione per rendere compatibile con PA-DSS. Ho memorizzato il sale per ogni utente in una colonna chiamata sale ed era solo un numero casuale di cinque cifre. Se l'utente ha cambiato la propria password, ho generato un nuovo salt. Il revisore ha detto che era sicuro.
@0A0D oggi probabilmente non sarebbe considerato sicuro. Ho aggiornato la mia risposta per includere le opzioni consigliate oggi.
@tylerl: Questo è stato solo un paio di anni fa!
@0A0D Tempi veloci! `:)` In realtà, il tuo sistema probabilmente supererà un audit PCI-DSS con lo standard attuale. Richiedere un hashing forte in PCI sarebbe devastante per gli amministratori di Windows, che non possono decidere in che modo le password degli account devono essere sottoposte a hashing sui loro sistemi.
@tylerl: Ah, beh, questa era un'applicazione personalizzata (quindi PA-DSS non PCI-DSS). Ma posso vedere il tuo punto.
Tieni presente che PBKDF2 è anche l'unico algoritmo di hashing della password comune che può utilizzare [FIPS 140-2] (http://csrc.nist.gov/publications/fips/fips140-2/fips1402annexa.pdf) / [NIST SP 800-131A ] (http://csrc.nist.gov/publications/nistpubs/800-131A/sp800-131A.pdf) ha elencato le funzioni hash come primitiva di hashing, se tali documenti sono considerati una guida per il proprio settore o utilizzo.
risposta molto bella. Tieni presente che se qualcuno è preoccupato per il riutilizzo del sale, ad esempio per memorizzare user psw, puoi utilizzare l'ID utente come sale, poiché non cambierà mai ed è unico.
Sito interessante che è emerso quando ho cercato su Google `c5e635ec235a51e89f6ed7d4857afe58663d54f5`: http://arehost.net:9090/encryption/index.php?search=c5e635ec235a51e89f6ed7d4857afe58663d54f5 !&sub=Sub=Sub
@AdamBalsam: No, si vuole essere sicuri che lo _stesso sale non venga usato due volte_, in modo che gli attacchi multi-target non siano (si spera) più veloci che attaccare gli hash indipendentemente.
@asteri: Vedi il mio commento precedente.
Oh mio, è semplicemente bellissimo.
Grazie per questa spiegazione.Il concetto con cui ho avuto problemi è che il sale è combinato con la PASSWORD, non l'hash, quindi il sale + la password viene sottoposto ad hashing.Questa spiegazione aveva davvero molto senso.
Forse dovresti aggiornare questa risposta per menzionare argon2.
xkcd
2014-02-22 00:10:38 UTC
view on stackexchange narkive permalink

Tecnicamente puoi ancora usare un tavolo arcobaleno per attaccare gli hash salati. Ma solo tecnicamente. Un hashish salato sconfigge gli attacchi del tavolo arcobaleno, non aggiungendo criptovaluta, ma semplicemente aumentando esponenzialmente le dimensioni del tavolo arcobaleno necessario per trovare con successo una collisione.

E sì, dovrai conservare il sale :)

Votato perché questa è l'unica risposta che spiega effettivamente perché gli hash salati aiutano contro le tabelle arcobaleno.
e lo fa * in modo esponenziale *.
La dimensione del tavolo non sarebbe maggiore.Sarebbe necessaria una tabella arcobaleno separata per ciascuno degli utenti (poiché viene utilizzato un salt diverso per la password di ogni utente), ma la dimensione di ciascuno di essi sarebbe la stessa.Invece di scaricare una tabella arcobaleno per diciamo hash SHA-1 di stringhe, ne creeresti uno tuo per diciamo hash SHA-1 di stringhe salate `CYyohYn8MGYk`.Sarebbe un esercizio inutile, poiché un attacco di forza bruta su una password specifica sarebbe più veloce.I sali funzionano, non a causa dell'aumento delle dimensioni della tabella, ma perché rendono inutilizzabili le tabelle arcobaleno scaricabili standard.
@mgr326639 - Non mi riferivo a "tabelle arcobaleno scaricabili standard" nella mia risposta, infatti non sono a conoscenza se esiste uno standard.La domanda menzionava la "costruzione" di un tavolo arcobaleno.Puoi avere una grande tabella che soddisfa l'intera cosa o puoi avere tante tabelle quanti sono i sali o qualsiasi schema di partizionamento logico o fisico che desideri secondo le tue risorse o altri fattori.
AJ Henderson
2014-02-21 03:01:17 UTC
view on stackexchange narkive permalink

Non viene aggiunto dopo l'hash. Viene aggiunto prima dell'hash, quindi l'hash è completamente diverso per ogni salt.

Non è

  hash abcd = defgstore 123defg (per utenti con 123 salt) e 456defg (per utenti con 456 salt) 

È

  hash 123abcd = ghij hash 456abcd = klmn  
Queste ultime due frasi mi hanno impiegato del tempo per analizzarle :-)
@YolandaRuiz - ha provato a ripulirlo un po '
Il mio cervello si è sciolto per un po ', ma ora vedo cosa hai fatto lì. ;-)
Potrebbe rendere le cose più chiare se dicessi "un utente ha la password abcd con salt 123; l'altro ha la password abcd con salt 456. Quindi per il tuo secondo esempio, aggiungi una riga" store 123ghij e 456klmn ".
Anti-weakpasswords
2014-02-21 09:39:34 UTC
view on stackexchange narkive permalink

Per gli hash delle password, è necessario utilizzare qualcosa come PBKDF2 / RFC2898 / PKCS5v2, Bcrypt o Scrypt, che ti consentono di selezionare una quantità di iterazioni ("fattore di lavoro"), piuttosto di uno solo. PBKDF2, ad esempio, utilizza l'hashing con chiave HMAC con un algoritmo hash ben noto (tipicamente SHA-512, SHA-256 o SHA-1) internamente per un numero di iterazioni, preferibilmente da decine a centinaia di migliaia più in alto che puoi mantenerlo senza che gli utenti si lamentino, essenzialmente.

La ragione del gran numero di iterazioni è rallentare un attaccante, il che a sua volta riduce lo spazio delle chiavi che può attraversare in un determinato periodo , quindi non possono attaccare efficacemente le password migliori. "password" e "P @ $$ w0rd" verranno violate indipendentemente da un attacco offline, ovviamente.

Hai ragione, ogni riga (utente) necessita del proprio sale lungo generato in modo univoco, crittograficamente casuale . Quel sale è conservato in forma di testo in chiaro.

Con PBKDF2, Bcrypt o Scrypt, consiglierei anche di memorizzare il numero di iterazioni (fattore di lavoro) nel database anche in testo in chiaro, quindi è facile modificarlo (personalmente, uso un numero un po 'casuale di iterazioni - se è sempre diverso, allora c'è meno paura di "oh no, un piccolo cambiamento potrebbe rovinare tutto - NON CAMBIARLA MAI PIÙ" dalla direzione o da altri sviluppatori)

Nota che quando usi PBKDF2 come password hashing, non chiedere mai un output maggiore dell'output hash nativo: per SHA-1, sono 20 byte e per SHA-512, sono 64 byte.

Per fornire esempi effettivi di PBKDF2 con due diversi sali :

(PBKDF2 HMAC password di sale iterazioni outputbytes risultati)

  • PBKDF2 HMAC-SHA-512 MyPass vA8u3v4qzCdb 131072 64
    • 2e3259bece6992f012966cbf5803103fdea7957ac20f3ec305d62994a3f4f088f26cc3889053fb59a4e3c282f55e9179695609ee1147cffae1455880993ef874
  • PBKDF2 HMAC-SHA-512 MyPass l6eZQVf7J65S 131072 64
    • 1018ad648096f7814bc2786972eb4091f6c36761a8262183c24b0f4d34abb48073ed2541ee273220915638b46ec14dfb2b23ad64c4aa12f97158340bdc12fc57
    mathrick
    2014-02-26 14:42:59 UTC
    view on stackexchange narkive permalink

    Oltre a quanto detto da tylerl, è importante sottolineare che nelle criptovalute moderne, i sali non vengono utilizzati per proteggere dalle tabelle arcobaleno. Nessuno usa davvero le tabelle arcobaleno. Il vero pericolo è la parallelizzazione:

    • Se non hai sale, o solo un sale statico e ti rubo il tuo DB di un milione di hash, posso buttare tutti i miei core al bruteforcing e ogni core attaccherà un milione di hash contemporaneamente, perché ogni volta che premo una qualsiasi delle stringhe usate come password, vedrò una corrispondenza di hash. Quindi devo esaurire lo spazio di ricerca una volta per decifrare un milione di password. Questa è una scala completamente realistica di perdita di password e un obiettivo abbastanza attraente da lanciare un paio di dozzine di GPU o persino un FPGA personalizzato. Anche se esaurisco solo il 30% inferiore dello spazio di ricerca, me ne andrò comunque con 500.000 password del mondo reale o giù di lì. Quelle password verranno quindi utilizzate per creare il mio dizionario, quindi la prossima volta che qualcuno perde un hash DB, ne decriterò il 90% in poche ore.
    • Se invece ogni password viene sottoposta ad hashing con la propria , sale unico, quindi dovrò attaccare ognuno di loro individualmente, perché anche password identiche avranno hash completamente diversi memorizzati. Ciò significa che potrei forse usare la mia fattoria GPU / FPGA costosa e assetata di energia per attaccare i due obiettivi di alto valore (ad esempio, se Obama fosse il tuo utente, ottenere la sua password sarebbe comunque giustificare la spesa), ma non riceverò diverse centinaia di migliaia di password gratuitamente da questo. Se volessi ottenere l'intero milione di password, dovrei eseguire una ricerca completa a forza bruta un milione di volte.

    Ed è per questo che qualsiasi sale, statico o meno, ti proteggerà dalle tabelle arcobaleno preparate purché non sia ampiamente utilizzato, ma solo sali unici per hash ti proteggeranno dal reale pericolo di utilizzare molta potenza di calcolo parallelo per decifrare tutto subito.

    zakiakhmad
    2014-02-21 09:15:17 UTC
    view on stackexchange narkive permalink

    È più sicuro perché quando più persone hanno la stessa password avranno diversi hash.

    Semplice implementazione utilizzando Python:

      import hashlibpasswordA = '123456'passwordB =' 123456'hashlib.md5 (passwordA) .hexdigest () 'e10adc3949ba59abbe56e057f20f883e'hashlib.md5 (passwordB) .hexdigest ()' e10adc3949ba59abbe56e057f20f883e ' 

    ora aggiungiamo salt:

    pre> saltA = 'qwerty'salbB =' asdfgh'passA = passwordA + saltApassB = passwordB + saltBhashlib.md5 (passA) .hexdigest () '086e1b7e1c12ba37cd473670b3a15214'hashlib.md5 (passB) .hexd988 / code>

    Questa è una versione molto semplificata. Puoi aggiungere il sale dove preferisci. All'inizio / al centro / alla fine della password.

    Salt è molto utile, specialmente quando hai molti utenti, quindi ognuno di loro avrà hash diversi. Ora immagina la probabilità di avere le stesse password per milioni di account, come Facebook o Google o Twitter.

    gnasher729
    2014-02-22 00:07:45 UTC
    view on stackexchange narkive permalink

    In primo luogo, se due utenti utilizzano la password piuttosto debole "baseball", il crack di una password non aiuta affatto il crack della seconda password a causa del salting. Senza salare, hai decifrato due password al prezzo di una.

    In secondo luogo, le tabelle arcobaleno contengono hash precalcolati. Quindi un cracker potrebbe cercare l'hash di "baseball" in un tavolo arcobaleno con un miliardo di voci. Molto più veloce del calcolo degli hash gazillion nella tabella arcobaleno. E questo viene evitato salando.

    E ora una importante: alcune persone hanno buone password, altre hanno password sbagliate. Se hai un milione di utenti e tre utilizzano la stessa password, sai che la password è debole. Senza salatura, hai tre hash identici. Quindi, se qualcuno ruba il tuo database di hash, può immediatamente vedere quali utenti hanno password deboli e concentrarsi sul crack di quelle. Molto più facile decifrare il "baseball" di 1keOj29fa0romn. Senza salare, le password deboli risaltano. Con la salatura, il cracker non ha idea di quali password siano deboli e quali siano difficili da decifrare.

    Kaz
    2014-06-27 01:14:46 UTC
    view on stackexchange narkive permalink

    Il fatto che l'hash sia salato o meno fa la differenza solo se l'aggressore ha l'hash della password. Senza un salt, l'hash può essere attaccato con una tabella arcobaleno: un dizionario precalcolato che associa le password agli hash. Un sale a N bit aumenta il requisito di archiviazione per una tabella arcobaleno e il tempo per calcolare tale tabella di un fattore 2 ** N. Quindi, ad esempio, con un salt a 32 bit, solo una singola voce del dizionario della tabella arcobaleno, ad esempio per la password passw0rd , richiede molti gigabyte di memoria, rendendo una tabella arcobaleno molto costosa utilizzando l'hardware di archiviazione corrente. Quindi, quando è presente un salt, l'attaccante viene ridotto a un attacco di forza bruta sullo specifico set di hash delle password che sono stati ottenuti.

    Tuttavia:

    • per le password deboli , un attacco di forza bruta riuscirà in relativamente poco tempo.
    • password sufficientemente complesse non verranno trovate in una tabella arcobaleno.
    • se l'aggressore ha accesso agli hash, la sicurezza del sistema ha sono già stati compromessi: i sistemi e i protocolli moderni non rivelano gli hash delle password. Se l'aggressore non è in grado di accedere al database delle password, le password possono anche essere memorizzate in testo normale.
    • se un utente malintenzionato deve compromettere il sistema per raggiungere gli hash per invertire le password da esse, le uniche password che hanno valore per l'attaccante sono quelle che vengono riutilizzate per altri domini di sicurezza a cui l'attaccante non ha ancora accesso. Le password che non vengono riutilizzate non hanno alcun valore (e certamente meno valore di altre informazioni sensibili associate agli account).

    Supponiamo che l'utente joewestlake utilizzi la password god1234 . L'attaccante lo inverte immediatamente utilizzando una tabella arcobaleno. (O entro pochi minuti dal cracking utilizzando un attacco di forza bruta, se l'hash è salato, poiché la password è così cattiva.) Ora il problema è che joewestlake utilizza anche god1234 per il suo account Gmail e per l'online banking, oops! Ora l'aggressore legge le e-mail di Joe e impara abbastanza su Joe in modo che possa facilmente rispondere alla domanda "qual era il nome del tuo primo animale domestico" quando accede al servizio di banking online di Joe.

    la logica per i sali è che proteggono in qualche modo gli utenti rendendo le password di sicurezza media più difficili da invertire: password che, senza sale, ci si potrebbe ragionevolmente aspettare che si trovino in una tabella arcobaleno, ma che sono abbastanza forti che costringerli individualmente a forzarli richiede molto tempo. Ma i sali forniscono questo vantaggio solo nel caso in cui gli hash siano compromessi, il che è già una grave violazione della sicurezza e il vantaggio è solo per quegli utenti che riutilizzano le loro password di sicurezza media in altri sistemi.

    Supponiamo che Joe abbia invece utilizzato una password composta da 10 caratteri alfanumerici e simboli casuali. Questo potrebbe ancora essere in un tavolo arcobaleno, ma richiede molto lavoro. Quindi, anche se Joe ha usato la stessa password per Gmail e per l'online banking, è al sicuro, grazie al sale. Il cracker esegue il suo crack a forza bruta forse per diverse ore, forse giorni. Il crack produce numerose password deboli da altri utenti dello stesso sistema che hanno password deboli. L'attaccante è soddisfatto di quella resa e smette di rompersi; La password di Joe non viene mai invertita.

    Inoltre, se la violazione viene rilevata e si consiglia agli utenti (incluso Joe) di modificare le proprie password, Joe ha la possibilità di superare i tentativi di cracking dell'aggressore, anche se l'aggressore persiste nell'attaccare l'intero spazio delle password di media sicurezza che include la password di Joe. Joe lo sa, la password che ha usato sul sistema compromesso è esattamente la stessa della sua password Gmail e bancaria, quindi si affretta a cambiare quelle altre due. Il sale aiuta qui perché fa guadagnare tempo agli utenti che riutilizzano la password per cambiare la propria password. Il sale non aiuterà chi ha password molto deboli che vengono violate in pochi minuti, ma gli utenti di password che impiegano ore o giorni per decifrare hanno una possibilità di combattere.



    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...