Risposta breve
No. Vedi: Non lanciare la tua sicurezza .
Risposta pedante
Hai modificato diversi termini.
Non è un HMAC se la chiave è pubblica
Un HMAC richiede una chiave segreta (a volte chiamata pepe) in contrasto con un sale, che è pubblico . Altrimenti non è un HMAC; è solo un hash.
Un uso comune di un HMAC è quello di creare un'impronta digitale resistente alla manomissione al fine di fornire l'integrità del messaggio. Non è utilizzato per l'archiviazione delle password.
Non pensare che stai parlando di un attacco di dizionario
Lo scopo di utilizzare un hash salato per memorizzare una password non è quello di mitigare gli attacchi del dizionario. Lo scopo è quello di contrastare gli attacchi che utilizzano una tabella arcobaleno . Il sale non influenza un puro attacco al dizionario; l'unica attenuazione consiste nell'utilizzare una password che non è nel dizionario, ad es. richiedendo caratteri speciali o richiedendo password più lunghe.
Penso che tu stia chiedendo ...
Penso che potresti chiedere "È OK utilizzare un algoritmo HMAC con una chiave pubblica (invece di una corretta funzione di hashing della password, come BCrypt ) per memorizzare un hash della password?" In tal caso, la risposta è ancora NO . È necessario utilizzare algoritmi di hashing della password, non altri algoritmi di hashing , per password hashing, perché hanno caratteristiche specifiche del problema. Ad esempio, sono volutamente lenti e / o forniscono parametri che consentono di specificare il numero di iterazioni richieste, il che aumenta la potenza di calcolo richiesta per gli attacchi di dizionario e può renderle molto più difficili rispetto agli hash ordinari che funzionano con un singolo passaggio.
Va bene usare l'ID utente come salt?
Mi dispiace, no. Causa alcuni problemi:
- Crea un problema se l'utente cambia il suo ID (l'hash deve essere ricalcolato)
- L'ID utente potrebbe non essere abbastanza lungo da contrastare gli attacchi
- Lo stesso ID utente potrebbe essere utilizzato per diversi servizi, rendendo facile per l'hacker sapere se anche la stessa password è stata utilizzata
- L'hacker potrebbe comporre una serie di tabelle arcobaleno in base a un elenco di ID utente comuni.
Inoltre, vedi questo articolo decente sull'argomento , che afferma:
A good rule of thumb is to use a salt that is the same size as the output of the hash function. For example, the output of SHA256 is 256 bits (32 bytes), so the salt should be at least 32 random bytes.