El "pimiento" es un valor secreto que se supone que está fuera del alcance del atacante. Has truncado las contraseñas porque supones que el atacante podría echar un vistazo a las entrañas de tu servidor (consulta this para una discusión). El "pimiento" agrega seguridad adicional si cree que la visión es parcial : el atacante podría leer, por ejemplo, el contenido de la base de datos (un resultado común de los ataques de inyección de SQL), pero no los archivos de configuración en el propio servidor web.
Sin un pimiento, un atacante que obtiene la contraseña con hash puede "probar las contraseñas en casa" porque puede volver a calcular el mismo hash en cualquier contraseña potencial y ver si el resultado coincide con lo que robó de su servidor. Pero si el cálculo de hash está "salpicado", entonces el atacante no puede calcular los hashes en casa, a menos que también conozca el valor de la pimienta. Hablando criptográficamente, el "pepper" es una clave secreta e insertarlo en el proceso de hashing convierte esa función de hash en un MAC . La pimienta es exactamente tan valiosa como secreta, es decir, no es adivinable por el atacante.
Consulte esta respuesta para obtener una introducción al hashing de contraseñas. . Hay una sección sobre salpicaduras (cerca del final). Recuerde que el hashing de la contraseña solo tiene sentido cuando la infracción del atacante es parcial (solo obtuvo un vistazo de solo lectura), y la especulación solo tiene sentido cuando la infracción es doblemente parcial: no solo el atacante solo obtuvo un vistazo de solo lectura, sino que Ese vistazo no era para el contenido completo del servidor. Al acumular suposiciones sobre otras suposiciones, en algún momento deja de ser lo suficientemente realista como para que valga la pena el esfuerzo; esta es la razón por la que el pimentado tiende a ser raro en la práctica.
"Peppering" entra en el ámbito de lo que es factible con los dispositivos baratos parecidos a HSM , por lo que hace mucho sentido Si apuntas a una solución de solo software, entonces la utilidad del pimiento es, en el mejor de los casos, discutible; Si do usa un pimiento, al menos hazlo bien.
Es decir, para una contraseña de usuario p y la pimienta k , calcule HMAC ( p , k ) (calcula el HMAC de p con el pimiento k como clave para HMAC; use HMAC / SHA-256 si es posible, aunque HMAC / SHA-1 estaría bien en la práctica). Entonces , use la salida HMAC en una función de hashing de contraseña "normal", completa con sal única / aleatoria y muchas iteraciones, como bcrypt o PBKDF2 (no, el salpicado no ni elimina el Necesidad de una buena sal). HMAC / SHA-256 produce una salida binaria de 32 bytes, que puede que necesite convertir a caracteres si su biblioteca bcrypt o PBKDF2 quiere caracteres; Base64 convertirá 32 bytes en 44 caracteres. El "hashing normal" está destinado a garantizar cierto nivel de robustez si el atacante logra obtener las contraseñas de hash y el valor de la pimienta. Si combina HMAC y bcrypt / PBKDF2 como explico anteriormente, al menos , el "pepper" no hará que su servidor sea más débil , lo que siempre es un riesgo Al hacer criptografía casera.