Qual è lo scopo di un Pepper?

19

Ho cercato di scoprire esattamente cos'è un peperone. Le uniche cose che ho potuto determinare con precisione sono che un Pepper:

  • È teoricamente univoco da sito a sito e hardcoded nella sorgente del sito
  • Di solito è la stessa stringa casuale e usata in ogni hash

Ma non sono stato in grado di capire quale sia lo scopo di aggiungere sicurezza a un hash delle password.

Qualcuno può spiegarmi quale scopo ha (o ha avuto) il pepe nel processo di hashing della password?

    
posta 04.09.2013 - 07:45
fonte

2 risposte

26

Un "pepe" è un valore casuale a livello di applicazione segreto aggiunto a una password prima di eseguirne l'hashing. Ciò garantisce che un utente malintenzionato non abbia modo di violare gli hash delle password senza compromettere il valore del pepe in un modo o nell'altro. Questo è diverso da un sale che di solito non è un segreto e viene aggiunto insieme all'hash della password.

Se fatto bene, questo può essere utile per garantire che un utente malintenzionato con accesso limitato ai tuoi sistemi non sia in grado di decifrare le password memorizzate. Questo è uno scenario abbastanza comune. Immagina un utente malintenzionato che ha rilevato un attacco di SQL injection che gli consente di scaricare il tuo database delle password. Non sarà in grado di decifrare quelle password senza il pepe che è memorizzato in un file di configurazione che non può ottenere.

Detto questo, non penso che i peperoni siano comunemente implementati. Non conosco alcuna libreria di hashing delle password che fornisca questo fuori dalla scatola, e non l'ho mai usata nelle mie applicazioni.

    
risposta data 04.09.2013 - 07:51
fonte
15

Il "pepe" è un valore segreto che si presume essere fuori dalla portata dell'attaccante. Hai hash password perché supponi che l'utente malintenzionato possa dare un'occhiata alle viscere del tuo server (vedi this per una discussione). Il "pepe" aggiunge ulteriore sicurezza se si ritiene che lo scorcio sia parziale : l'autore dell'attacco potrebbe leggere, ad esempio, il contenuto del database (un risultato comune degli attacchi SQL injection), ma non file di configurazione sul server Web stesso.

Senza un pepe, un utente malintenzionato che ottiene la password con hash può "provare le password a casa" perché può ricalcolare lo stesso hash su qualsiasi password potenziale e vedere se il risultato corrisponde a ciò che ha rubato dal server. Ma se il calcolo dell'hash è "pepato", allora l'attaccante non può eseguire l'hash a casa, a meno che non conosca anche il valore del pepe. Crittograficamente parlando, il "pepe" è una chiave segreta e inserendolo nel processo di hashing trasforma la funzione di hash in un MAC . Il pepe è esattamente prezioso quanto segreto, cioè non immaginabile dall'attaccante.

Vedi questa risposta per un primer sull'hash delle password . C'è una sezione su peppering (vicino alla fine). Ricorda che l'hashing della password ha senso solo quando la violazione dell'attaccante è parziale (ha solo una sbirciatina di sola lettura) e il peppering ha senso solo quando la violazione è doppiamente parziale: non solo l'aggressore ha ottenuto solo una sbirciatina di sola lettura, ma quella sbirciatina non era per il contenuto completo del server. Quando si accumulano supposizioni su altre ipotesi, ad un certo punto non è più abbastanza realistico per meritare lo sforzo; questo è il motivo per cui il peppering tende a rimanere raro nella pratica.

"Peppering" entra nel regno di ciò che è fattibile con dispositivi economici simili a HSM , per i quali rende molto senso. Se mirate a una soluzione solo software, l'utilità del pepe è, nel migliore dei casi, discutibile; se fai usi un pepe, almeno fallo bene.

Vale a dire, per una password utente p e il pepe k , calcola HMAC ( p , k ) (calcola il HMAC di p con il pepe k come chiave per HMAC, utilizzare HMAC / SHA-256 se possibile, anche se HMAC / SHA-1 andrebbe bene nella pratica). Quindi , usa l'output HMAC in una normale funzione di hashing della password, completa di sale univoco / casuale e molte iterazioni, come bcrypt o PBKDF2 (no, il peppering non non rimuove il bisogno di un buon sale). HMAC / SHA-256 produce un output binario a 32 byte, che potrebbe essere necessario convertire in caratteri se la libreria bcrypt o PBKDF2 richiede caratteri; Base64 trasformerà 32 byte in 44 caratteri. L'hashing normale è pensato per garantire un certo livello di robustezza se l'hacker riesce a ottenere sia le password con hash che il valore del pepe. Se si combinano HMAC e bcrypt / PBKDF2 come spiegato sopra, quindi, almeno , il "pepe" non renderà il server più debole , che è sempre un rischio quando si fa la crittografia fatta in casa.

    
risposta data 04.09.2013 - 15:48
fonte

Leggi altre domande sui tag