En criptografía , un pimiento es un secreto que se agrega a una entrada, como una contraseña, durante el hash con una función de hash criptográfica . Este valor se diferencia de una sal en que no se almacena junto con un hash de contraseña, sino que la pimienta se mantiene separada en algún otro medio, como un módulo de seguridad de hardware. [1] Tenga en cuenta que el NIST nunca se refiere a este valor como pimienta, sino más bien como sal secreta . Un pimiento es similar en concepto a una sal o una clave de cifrado. Es como una sal en el sentido de que es un valor aleatorio que se agrega a un hash de contraseña, y es similar a una clave de cifrado en el sentido de que debe mantenerse en secreto.
Un pimiento desempeña un papel comparable a una sal o una clave de cifrado , pero mientras que una sal no es secreta (simplemente única) y se puede almacenar junto con la salida hash, una pimienta es secreta y no debe almacenarse con la salida. El hash y la sal generalmente se almacenan en una base de datos, pero un pimiento debe almacenarse por separado para evitar que el atacante lo obtenga en caso de una violación de la base de datos. [2] Cuando la sal solo tiene que ser lo suficientemente larga para ser única por usuario, un pimiento debe ser lo suficientemente largo para permanecer en secreto de los intentos de fuerza bruta para descubrirlo (NIST recomienda al menos 112 bits).
Historia
La idea de una sal específica para un sitio o servicio, además de una sal por usuario, tiene una larga historia, con Steven M. Bellovin proponiendo un parámetro local en una publicación de Bugtraq en 1995. [3] En 1996 Udi Manber también describió la ventajas de tal esquema, calificándolo de sal secreta . [4] El término pimienta se ha utilizado de varias formas por analogía con la sal, pero no siempre de la misma forma. Por ejemplo, cuando se habla de un esquema de desafío-respuesta , la pimienta se ha utilizado para una cantidad similar a la sal, aunque no se ha utilizado para el almacenamiento de contraseñas, [5] se ha utilizado para una técnica de transmisión de datos en la que se debe adivinar una pimienta, [ 6] e incluso como parte de bromas. [7]
El término pimienta se propuso para un parámetro secreto o local almacenado por separado de la contraseña en una discusión sobre la protección de las contraseñas de los ataques de las tablas de arco iris . [8] Sin embargo, este uso no se popularizó de inmediato, por ejemplo, Fred Wenzel agregó soporte al código hash de contraseñas de Django para admitir un almacenamiento basado en una combinación de bcrypt y HMAC con nonces almacenados por separado sin usar el término, [9] uso se ha vuelto más común. [10] [11] [12]
Tipos
Hay varios tipos diferentes de pimiento:
En el caso de un pimiento secreto compartido, una sola contraseña comprometida (a través de la reutilización de contraseña u otro ataque) junto con la sal de un usuario puede conducir a un ataque para descubrir el pimiento, volviéndolo ineficaz. Si un atacante conoce una contraseña de texto plano y la sal de un usuario, así como el algoritmo utilizado para codificar la contraseña, descubrir el pimiento puede ser una cuestión de forzar brutalmente los valores del pimiento. Esta es la razón por la que NIST recomienda que el valor secreto sea de al menos 112 bits, de modo que descubrirlo mediante una búsqueda exhaustiva sea intratable. El pimiento debe generarse de nuevo para cada aplicación en la que se implemente, de lo contrario, una violación de una aplicación daría lugar a una reducción de la seguridad de otra aplicación. Sin el conocimiento del pimiento, otras contraseñas en la base de datos serán mucho más difíciles de extraer de sus valores hash, ya que el atacante tendría que adivinar la contraseña y el pimiento.
Un pimiento agrega seguridad a una base de datos de sales y hashes porque, a menos que el atacante pueda obtener el pimiento, romper incluso un solo hash es intratable, sin importar cuán débil sea la contraseña original. Incluso con una lista de pares (sal, hash), un atacante también debe adivinar el pimiento secreto para encontrar la contraseña que produce el hash. La especificación NIST para una sal secreto sugiere el uso de una función de contraseña-Based de derivación de claves (PBKDF) con un aprobado función seudo-aleatoria tal como HMAC con SHA-3 como la función hash de la HMAC. La recomendación del NIST también es realizar al menos 1000 iteraciones del PBKDF y un mínimo adicional de 1000 iteraciones utilizando la sal secreta en lugar de la sal no secreta.
Pimienta única por usuario
En el caso de un pimiento que es único para cada usuario, la compensación es ganar seguridad adicional a costa de almacenar más información de forma segura. Poner en peligro un hash de contraseña y revelar su pimienta secreta no tendrá ningún efecto sobre otros hash de contraseña y su pimienta secreta, por lo que cada pimienta debe descubrirse individualmente, lo que aumenta en gran medida el tiempo necesario para atacar los hash de contraseña.
Pimienta seleccionada al azar
En el caso de un pimiento seleccionado al azar que no se guarda en absoluto, hay que redescubrirlo cada vez que se necesite. Esto significa que un algoritmo para verificar una contraseña necesitaría efectivamente forzar el pimiento cada vez. Por esta razón, los algoritmos que implementan esto no querrían usar un valor grande para el pimiento, ya que la verificación debería ser razonablemente rápida. [ cita requerida ]
Ver también
Referencias
- ^ "Publicación especial NIST 800-63B" . Junio de 2017. Sección 5.1.1.2 . Consultado el 13 de octubre de 2018 .
... los verificadores DEBEN realizar una iteración adicional de una función de derivación de claves utilizando un valor de sal que es secreto y conocido solo por el verificador ...
- ^ a b Akhawe, Devdatta. "Cómo Dropbox almacena de forma segura sus contraseñas" . dropbox.tech . Consultado el 4 de noviembre de 2020 .
- ^ Bellovin, Steve (16 de abril de 1995). "algoritmo de hash passwd" . seclists . Consultado el 11 de noviembre de 2020 .
- ^ Manber, Udi (1996). "Un esquema simple para hacer que las contraseñas basadas en funciones unidireccionales sean mucho más difíciles de descifrar" . Computadoras y seguridad . 15 (2): 171-176. doi : 10.1016 / 0167-4048 (96) 00003-x . Consultado el 11 de noviembre de 2020 .
- ^ Blake, Ross; Jackson, Collin; Miyake, Nick; Boneh, Dan; Mitchell, John (2005). "Autenticación de contraseña más sólida mediante extensiones del navegador" . Simposio de seguridad de USENIX : 17–32 . Consultado el 11 de noviembre de 2020 .
- ^ Lars Schoening (25 de enero de 2006). "Transmisión de datos sólo hash (Pepper)". Grupo de noticias : sci.crypt .
- ^ cyrusthevirus (7 de junio de 2007). "Hechos de Bruce Schneier". Grupo de noticias : it.test .
La mayoría de la gente pone sal a su hachís. Bruce sal y pimientos suyos.
- ^ Webster, Craig (3 de agosto de 2009). "Asegurar contraseñas con sal, pimienta y arco iris" . Ladrando Iguana . Consultado el 11 de noviembre de 2020 .
- ^ Wenzel, Fred (12 de marzo de 2011). "Historial de django-sha2 / django_sha2 / bcrypt_auth.py" . Github . Consultado el 11 de noviembre de 2020 .
- ^ [email protected] (30 de mayo de 2012). "Generación de Salt para cifrado mediante golang" . golang-nuts (lista de correo).
- ^ Duong, tailandés (5 de septiembre de 2020). "Por qué desea cifrar los hashes de contraseña" . vnhacker blogspot . Consultado el 11 de noviembre de 2020 .
- ^ @ Sc00bzT (18 de septiembre de 2020). "Pepper utiliza para significar" una sal no criptográfica " " (Tweet) - a través de Twitter .
- ^ "Ataque de fuerza bruta en contraseñas UNIX con computadora SIMD" (PDF) . Agosto de 1999.