Salt è una stringa casuale utilizzata per mitigare gli attacchi del dizionario.
+-------+------------+-----------------------+
| id | salt | hashed_pw |
+-------+------------+-----------------------+
| user1 | 9060d63fe0 | hash(pass19060d63fe0) |
| user2 | 39b3cdd660 | hash(pass239b3cdd660) |
+-------+------------+-----------------------+
Pepper è una stringa fissa che è più segreta di quella salt e attenua gli attacchi di forza bruta sulle password salate.
Is a pepper simply concatenated to the beginning or end of a salted password? Is it concatenated to the salted password, which is then hashed again?
I peperoni non dovrebbero semplicemente essere concatenati perché il loro obiettivo è rendere impossibile la forzatura bruta. Anche questo deve essere sottoposto a hash.
Assumiamo la password abcd1234
e salt 9060d63fe0
. Se quei due sono stati sottoposti a hash con bcrypt
con round 9
, il risultato sarà $2a$09$T.FYSHNRG5W.EiS3ieAU/OqdnNLXtou3yZk98/ZJ0Y7JXAoFlVWKS
.
Se in qualche modo la bruta hacker forza la password e riesce a trovare il valore abcd12349060d63fe0
, l'hacker saprà che il valore salt è 9060d63fe0
e la password è abcd1234
perché sale è memorizzato sul DB.
Ma supponiamo che venga applicato un pepe. pepe abab4321
, password abcd1234
e sale 9060d63fe0
. Se l'hacker ha successo con le forze brute
e ha trovato abab4321abcd12349060d63fe0
, l'hacker non sarà in grado di sapere quale parte è il pepe e quale è la password.
I peperoni possono essere applicati prima dell'hashing in questo modo:
+-------+------------+-----------------------------+
| id | salt | hashed_pw |
+-------+------------+-----------------------------+
| user1 | 9060d63fe0 | hash(pepperpass19060d63fe0) |
| user2 | 39b3cdd660 | hash(pepperpass239b3cdd660) |
+-------+------------+-----------------------------+
O dopo l'hashing come questo
+-------+------------+--------------------------------------+
| id | salt | hashed_pw |
+-------+------------+--------------------------------------+
| user1 | 9060d63fe0 | hash(pepper + hash(pass19060d63fe0)) |
| user2 | 39b3cdd660 | hash(pepper + hash(pass239b3cdd660)) |
+-------+------------+--------------------------------------+