Che cosè un “ salt ” crittografico?

Sono un principiante della crittografia e cerco di capire in termini molto semplici cosa sia un ” crittografico salt ” indica quando potrei aver bisogno di usarlo e perché dovrei o non dovrei usarlo.

Posso ottenere un molto semplice e una spiegazione chiara (livello principiante)?

Se conosci dei riferimenti sullargomento, anche quelli sarebbero utili.

Risposta

Il motivo per cui vengono utilizzati i sali è che le persone tendono a scegliere le stesse password, e non a caso. Molte password usate là fuori sono brevi parole reali, per renderlo facile da ricordare, ma anche questo consente un attacco.

Come forse saprai, le password generalmente non sono memorizzate in chiaro, ma piuttosto sottoposte ad hashing. Se non sei sicuro dello scopo di una funzione hash, per favore leggi prima su questo.

Ora, ciò che gli aggressori possono fare è semplicemente generare un elenco di password comuni e gli hash corrispondenti. Se vengono utilizzate password comuni, se vengono utilizzate password comuni, gli hash che un sito ha memorizzato nella tabella rivelerà le password allattaccante.

A salt viene semplicemente aggiunto a rendere unico loutput dellhash della password anche per gli utenti adottare password comuni . Il suo scopo è rendere inutili gli attacchi basati sul pre-calcolo. Se la tua password è memorizzata con un salt univoco, qualsiasi tabella hash password precalcolata che abbia come target hash di password non salati o che abbia come target un account con un salt diverso non aiuterà a decifrare la password del tuo account. Un salt lungo generato in modo casuale (utilizzando /dev/urandom) dovrebbe essere globalmente unico . Pertanto i sali possono essere utilizzati per creare pre -attacchi di computer totalmente inefficaci.

Il modo più semplice per combinare il sale e la password è semplicemente concatenarli, cioè il valore hash memorizzato è Hash(salt||password). password password1 ora diventa magicamente, ad esempio, 6$dK,3gCA%Jpassword1 che è improbabile che si trovi nella tabella di un password cracker.

Il sale può essere memorizzato completamente in chiaro nel database, accanto al valore hash. Una volta che laggressore ha il database e desidera trovare le password, deve generare la tabella precalcolata per ogni sale individualmente, unoperazione costosa.

Un altro modo per difendersi dal cracking delle password offline è eseguire estensione della password, ad es. rendere un hash della password più lento da calcolare per qualsiasi persona, inclusi il servizio di accesso e i cracker di password. Un metodo utilizzato per estendere le password si ottiene ripetendo più volte la funzione hash, ad esempio memorizzando Hash(Hash(Hash(Hash…(Hash(salt||password)))…).

Unaltra idea comune relativa alla salatura è chiamata pepper . Ovvero, un altro valore casuale concatenato alla password, in modo tale che il valore memorizzato sia Hash(pepper||salt||password). Il pepe quindi non viene affatto memorizzato . Sia il server di accesso che il cracker della password devono forzare brute force il valore unknown pepper, rallentando i confronti dellhash delle password per entrambe le parti.

Dal 2013 al 2015 un password hashing si è tenuto un concorso per cercare un migliore algoritmo di estensione delle password. Il vincitore è stato lalgoritmo Argon2 . Si consiglia ai programmatori di utilizzare Argon2 invece di implementare il proprio algoritmo .

Commenti

  • Quindi, essenzialmente, quando hai solo una o 2 password memorizzate nel database, luso di salt è effettivamente inutile? Quello che capisco è che questo è utile solo quando il numero di password memorizzate nel database non è piccolo.
  • @AbhinavChoudhury: No, si difende dalle tabelle arcobaleno, cioè tabelle precalcolate per un hash specifico. Un esempio: prendi una password ” password1 “. Se non ‘ sale, ‘ memorizzi HASH (” password1 “) nel tuo database. Ora, se un utente malintenzionato ottiene i tuoi record e ha precalcolato HASH (*) per tutte le password di 9 caratteri, può recuperare la password. Se invece hai salato la password, HASH (‘ somesaltforyou ‘ || ‘ password1 ‘) NON sarà nella tabella arcobaleno degli aggressori (poiché ‘ contiene più di 9 caratteri).
  • ” Il sale può essere archiviato completamente in chiaro nel database, accanto al valore con hash ” – – questa parte non ha mai veramente avuto senso per me; Mi chiedevo se potessi approfondire questo argomento
  • Il punto del sale è assicurarsi che lhash non si trovi in una tabella precalcolata. Deve essere memorizzato per verificare la password (altrimenti ‘ sa ” pepper “). Il salt non dovrebbe essere ” segreto “, solo per rendere la password univoca. Questo ovviamente significa che ogni password memorizzata deve avere il proprio salt univoco (e casuale).

Risposta

Puoi aiutarmi a capire cosè un “sale” crittografico?

Nel contesto della password creazione, un “sale” sono dati (casuali o altro) aggiunti a una funzione hash per rendere più difficile da decifrare loutput con hash di una password.

Quando potrei aver bisogno di usarlo?

Sempre.

Perché dovrei o non dovrei usarlo?

Dovresti sempre usare un valore salt con le tue funzioni hash, per i motivi spiegati di seguito.

In genere è vero che le persone scelgono password deboli, ed è certamente vero che ci sono gigabyte di tabelle arcobaleno disponibili pubblicamente piene zeppe di valori hash che le rappresentano. Quindi, quando qualcuno crea un account sul tuo servizio e seleziona una password per proteggere la propria identità, in genere puoi scommettere che la password scelta sarà 1) comune, 2) non sicura e 3) disponibile per riferimenti incrociati nelle tabelle di ricerca.

Ad esempio, la password Nowayin1 quando lhashed tramite MD5 è 6f367d65bc74b88e21fb9959487ffa3a e ovviamente non è una buona scelta. Anche se può sembrare a posto (e non lo è), il fatto che lhash MD5 della password appaia nei database aperti lo rende inutile.

Ma questo è solo un MD5 a 128 bit. Che dire di qualcosa più forte, come SHA1 (160 bit) o anche Whirlpool (512 bit)?

Stesso problema.

Ad esempio, P @ $$ word con SHA1 è 1e69e0a615e8cb813812ca797d75d4f08bdc2f56 e 1qazXSW @ hash con idromassaggio è 0bf7545b784665d23b9c174ca03688a405f05b048e9d6c49bfc2721a1fa872bbd6576273d002e56d7c2a9c378efe607af36eea9d708a776e6f60ecb26e081cdf .

Il problema principale con tutte queste password, e miliardi di altre simili, è il fatto che i loro hash comunemente usati sono diventati di dominio pubblico.

Una password salt cambia questa impostazione.

Se un valore casuale (il sale) è stato aggiunto alla password selezionata dallutente, quindi lhash SHA1 1e69e0a615e8cb813812ca797d75d4f08bdc2f56 non rivelerà più P parola come password dellutente, perché il valore hash nella tabella arcobaleno non lo corrisponderebbe più.

E non ci vorrebbe molto. Un piccolo valore casuale a 16 bit, ad esempio, produrrebbe 65.536 varianti di ciascun valore con hash nelle tabelle di ricerca. Quindi un database di 15 miliardi di voci ora richiederebbe più di 983 miliardi di hash per tenere conto del sale.

Quindi, questo è il punto in cui salare gli hash, per contrastare la ricerca e le tabelle arcobaleno. Ma non “Non appendere il cappello a un hashish salato, perché gli hacker non sprecheranno molto tempo a usare le tabelle arcobaleno per capire le tue password.

Useranno un sistema cluster a 25 GPU a cinque server che esegue Hashcat che può bruciare 350 miliardi di tentativi al secondo di cracking hash per ogni immaginabile password di otto caratteri contenente lettere maiuscole e minuscole, numeri e caratteri speciali, appena sotto sei ore. (E questo era nel 2012.)

Tecniche come il key-stretching che rallenta lesecuzione degli hash possono essere utilizzate per compensare la velocità di tale hardware, rendendo gli attacchi di dizionario e forza bruta troppo lenti per valerne la pena , ma lhardware continua a diventare sempre più veloce.

AGGIORNAMENTO 2018:

Le migliori pratiche attuali includono lhashing sicuro delle tue password con Argon2i (preferito a scrypt), una funzione che richiede molta memoria che è molto resiliente a FPGA, GPU multiplecore e moduli ASIC dedicati utilizzati per decifrare facilmente passphrase non estese. Nellimplementazione PHP7 di Argon2, il sale viene gestito internamente per te.

Risposta

Cercherò di rispondere a una parte della tua domanda che è stata finora trascurata:

quando potrei aver bisogno di usarlo e perché dovrei / non dovrei usarlo.

La risposta breve è che, come dilettante, non dovresti usare la crittografia a un livello che richiede di trattare direttamente con i sali.

Ad esempio, il bcrypt lalgoritmo di hashing della password utilizza i sali internamente. Ma non espone questo fatto agli sviluppatori che lo utilizzano: devi semplicemente passare la password a bcrypt (e facoltativamente, un parametro che imposta il “livello dello sforzo della CPU “necessario per generare lhash) e restituisce lhash. Quando è necessario verificare se una password è corretta, si passa a bcrypt sia la password che lhash generato in precedenza. Indica se la password è stata o meno quella utilizzata per generare lhash.

Non seguire i consigli forniti qui e provare ad eseguire lhashing delle proprie password utilizzando un salt. È un dettaglio di implementazione di basso livello e se ti ritrovi a lavorare a un livello in cui sono necessarie queste cose, stai lavorando a un livello di astrazione troppo basso. La crittografia è molto difficile da eseguire correttamente e Internet è assolutamente disseminata di sviluppatori ben intenzionati “schemi di hashing delle password fatti in casa completamente insicuri.

Risposta

Citando ” Exam Ref 70-486 Developing ASP.NET MVC 4 Web Applications (MCSD): Developing ASP.NET MVC 4 Web Applications “ di William Penberthy, Pearson Education, 15 settembre 2013:

Salting è un processo che rafforza la crittografia dei file e gli hash, rendendoli più difficili da violare. Salting aggiunge una stringa casuale allinizio o alla fine del testo di input prima di eseguire lhashing o crittografare il valore. Quando si tenta di violare un elenco di password, ad esempio, gli hacker devono tenere conto del sale e delle possibili informazioni sulla password prima di essere in grado di violare nellapplicazione. Se a ciascun valore da salare viene assegnato un valore di sale diverso, la possibilità di creare una tabella di potenziali valori di password per un Il programma di cracking delle parole diventa ingombrante.

Risposta

Un sale è un numero casuale necessario per accedere ai dati crittografati, insieme alla password.

Se un utente malintenzionato non conosce la password e sta cercando di indovinarla con un attacco di forza bruta, allora prova ogni password deve essere provato con ogni valore di sale.

Quindi, per un salt di un bit (0 o 1), questo rende la crittografia due volte più difficile da violare in questo modo. Un sale a due bit lo rende quattro volte più difficile, un sale a tre bit otto volte più difficile, ecc. Puoi immaginare quanto sia difficile violare le password con la crittografia che utilizza un sale a 32 bit!

Commenti

  • No. Di solito si presume che il sale sia noto allaggressore. In questo caso, oltre una soglia bassa, il sale non migliora la sicurezza.
  • ” Si presume che salt sia noto allautore dellattacco ” – > Chi lo sta assumendo?
  • @Mike: Who? Qualcuno dice ” Dovresti sempre presumere che lautore dellattacco conosca il sale. “. Gli utenti di unaltra pagina dicono che ” I sali sono pubblici ” e più tardi dice ” i sali sono noti, perché ‘ è luso standard del settore della parola sale. ” Un altro dice ” il sale è di dominio pubblico, o almeno dovrebbe essere trattato come pubblico conoscenza. “.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *