¿Cuál es el propósito de un Pepper?

19

He estado tratando de averiguar exactamente qué es un pimiento. Las únicas cosas que pude determinar con precisión son que un Pepper:

  • Es teóricamente único de un sitio a otro y está codificado en la fuente del sitio
  • Generalmente es la misma cadena aleatoria y se usa en cada hash

Pero no he podido averiguar su propósito al agregar seguridad a un hash de contraseña.

¿Puede alguien explicarme qué propósito tiene (o tuvo) un pimiento en el proceso de hashing de contraseña?

    
pregunta 04.09.2013 - 07:45
fuente

2 respuestas

25

Un "pimiento" es un valor aleatorio de aplicación secreta que se agrega a una contraseña antes de incluirlo. Esto garantiza que un atacante no tenga forma de descifrar realmente los hashes de la contraseña sin comprometer el valor de la pimienta de una manera u otra. Esto es diferente a una sal que generalmente no es un secreto y se agrega junto con el hash de la contraseña.

Si se hace correctamente, esto puede ser útil para garantizar que un atacante con acceso limitado a sus sistemas no pueda descifrar las contraseñas que almacena. Este es un escenario bastante común. Imagine un atacante que encontró un ataque de inyección SQL que le permite volcar su base de datos de contraseñas. No podrá descifrar esas contraseñas sin el pimiento que se almacena en un archivo de configuración al que no puede acceder.

Dicho esto, no creo que los pimientos se implementen comúnmente. No conozco ninguna biblioteca de hashing de contraseñas que proporcione esto de forma inmediata, y nunca la he usado en mis propias aplicaciones.

    
respondido por el Ayrx 04.09.2013 - 07:51
fuente
15

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.

    
respondido por el Tom Leek 04.09.2013 - 15:48
fuente

Lea otras preguntas en las etiquetas