Salt es una cadena aleatoria que se utiliza para mitigar los ataques de diccionario.
+-------+------------+-----------------------+
| id | salt | hashed_pw |
+-------+------------+-----------------------+
| user1 | 9060d63fe0 | hash(pass19060d63fe0) |
| user2 | 39b3cdd660 | hash(pass239b3cdd660) |
+-------+------------+-----------------------+
Pepper es una cadena fija que es más secreta que la sal, y esto mitiga los ataques de fuerza bruta en contraseñas con sal.
¿Un pimiento está simplemente concatenado al principio o al final de una contraseña con sal? ¿Está concatenado a la contraseña con sal, que luego se vuelve a hash?
Los pimientos no deben simplemente ser concatenados porque su objetivo es hacer imposible el forzamiento de la carne bruta. También debe ser hash.
Supongamos que las contraseñas abcd1234
y salt 9060d63fe0
. Si esos dos hash con bcrypt
con round 9
, el resultado será $2a$09$T.FYSHNRG5W.EiS3ieAU/OqdnNLXtou3yZk98/ZJ0Y7JXAoFlVWKS
.
Si de alguna manera el hacker brute fuerza la contraseña y logra encontrar el valor abcd12349060d63fe0
, el hacker sabrá que el valor de sal es 9060d63fe0
y la contraseña es abcd1234
porque salt está almacenado en la base de datos.
Pero supongamos que se aplica un pimiento. pimienta abab4321
, contraseña abcd1234
y sal 9060d63fe0
. Si el hacker logra con éxito las fuerzas brutas.
y encontrado abab4321abcd12349060d63fe0
, el hacker no podrá saber qué parte es el pimiento y cuál es la contraseña.
Los pimientos se pueden aplicar antes de hacer este tipo de hash:
+-------+------------+-----------------------------+
| id | salt | hashed_pw |
+-------+------------+-----------------------------+
| user1 | 9060d63fe0 | hash(pepperpass19060d63fe0) |
| user2 | 39b3cdd660 | hash(pepperpass239b3cdd660) |
+-------+------------+-----------------------------+
O después de hash como este
+-------+------------+--------------------------------------+
| id | salt | hashed_pw |
+-------+------------+--------------------------------------+
| user1 | 9060d63fe0 | hash(pepper + hash(pass19060d63fe0)) |
| user2 | 39b3cdd660 | hash(pepper + hash(pass239b3cdd660)) |
+-------+------------+--------------------------------------+