Domanda Gestione delle password, come e dove salvare il salt?

giovy2707

Utente Electrum
27 Giugno 2019
96
38
62
103
Sto creando (un pò per esercitarmi per l'esame di Programmazione Object Oriented, e un pò per diletto) un programma che ha, tra le altre cose, un meccanismo di gestione degli account, cioè sullo stesso programma ci possono essere account multipli.

Il problema nasce dal fatto che quando genero l'hash delle credenziali aggiungo anche un salt per aumentare la sicurezza (si, lo so che è un pò superfluo, però volevo implementare questa chicca).

Il problema è: dove lo salvo il salt?

Cioè... se genero un hash casuale per ogni utente, ogni volta che l'utente effettua l'accesso andrà aggiunta alla password anche l'hash.

Potrei usare un singolo hash per tutte le password ma non mi sembra molto sicura come cosa...

ChatGPT consiglia di salvare gli hash in un file cifrato, però volevo sapere se qualcuno più navigato sa consigliarmi qualche tecnica migliore per la gestione delle password.
 
Potrei usare un singolo hash per tutte le password ma non mi sembra molto sicura come cosa...

Quando il salt è lo stesso per tutti (statico) viene anche detto pepper.

ChatGPT consiglia di salvare gli hash in un file cifrato, però volevo sapere se qualcuno più navigato sa consigliarmi qualche tecnica migliore per la gestione delle password.

ChatGPT dice assurdità, il salt non è un elemento segreto, puoi salvarlo tranquillamente insieme al digest finale della password o in un apposito campo nel database.

Precisando che non sono "superflui", a cosa servono effettivamente salt e pepper in crittografia? Il pepper serve a rendere inutili le rainbow table generiche per un dato algoritmo di hash, però non ti protegge nel caso che il cracker prepari una rainbow table dedicata al tuo sito con il pepper corretto. Il salt, essendo dinamico e cambiando per utente, rende totalmente impossibile costruire rainbow table, che il salt sia pubblico o meno poco importa. Più importante è come leghi il salt alla password: non dovresti concatenarlo, meglio usare algoritmi HMAC e se vuoi rallentare ancora di più tentativi di cracking brute force (e dizionario) puoi usare standard come PBKDF2 o scrypt.
 
  • Incredibile
Reazioni: giovy2707