stringtranslate.com

Sal (criptografía)

En criptografía , una sal son datos aleatorios que se alimentan como una entrada adicional a una función unidireccional que codifica datos , una contraseña o frase de contraseña . [1] La salazón ayuda a defenderse contra ataques que utilizan tablas precalculadas (por ejemplo, tablas arcoíris ), al aumentar enormemente el tamaño de la tabla necesaria para un ataque exitoso. [2] [3] [4] También ayuda a proteger las contraseñas que aparecen varias veces en una base de datos, ya que se utiliza una nueva sal para cada instancia de contraseña. [5] Además, la salazón no supone ninguna carga para los usuarios.

La forma en que normalmente se realiza el salting es generando un nuevo salt aleatoriamente para cada contraseña. El salt y la contraseña (o su versión después de la extensión de la clave ) se concatenan y se envían a una función hash criptográfica , y el valor hash de salida luego se almacena con el salt en una base de datos. No es necesario cifrar la sal, porque conocerla no ayudaría al atacante. [5]

La salazón se utiliza ampliamente en ciberseguridad, desde las credenciales del sistema Unix hasta la seguridad de Internet .

Las sales están relacionadas con los nonces criptográficos .

Ejemplo

Sin sal, contraseñas idénticas se asignarán a valores hash idénticos, lo que podría facilitar que un pirata informático adivine las contraseñas a partir de su valor hash.

En su lugar, se genera un salt y se agrega a cada contraseña, lo que hace que el hash resultante genere valores diferentes para la misma contraseña original.

Luego, la sal y el hash se almacenan en la base de datos. Para probar posteriormente si la contraseña que ingresa un usuario es correcta, se puede realizar el mismo proceso en ella (agregando el salt de ese usuario a la contraseña y calculando el hash resultante): si el resultado no coincide con el hash almacenado, no podría tener ha sido la contraseña correcta que se ingresó.

En la práctica, un salt generalmente se genera utilizando datos existentes, como la identificación de un usuario. Si en su lugar se crea un salt completamente aleatorio, se almacena en el hash (por ejemplo, anteponiéndolo, añadiéndolo, reemplazando cada enésimo carácter con él, etc.) para que el sistema pueda recuperarlo más tarde.

Errores comunes

Reutilización de la sal

Usar la misma sal para todas las contraseñas es peligroso porque una tabla precalculada que simplemente tiene en cuenta la sal la inutilizará.

La generación de tablas precalculadas para bases de datos con sales únicas para cada contraseña no es viable debido al costo computacional que implica hacerlo. Pero, si se utiliza una sal común para todas las entradas, crear una tabla de este tipo (que tenga en cuenta la sal) se convierte en un ataque viable y posiblemente exitoso. [6]

Debido a que la reutilización de salt puede hacer que los usuarios con la misma contraseña tengan el mismo hash, descifrar un solo hash puede hacer que otras contraseñas también se vean comprometidas.

Longitud de sal

Si un salt es demasiado corto, un atacante puede precalcular una tabla de cada salt posible adjunto a cada contraseña probable. El uso de una sal larga garantiza que una mesa de este tipo sea prohibitivamente grande. [7] [8]

Beneficios

Para comprender la diferencia entre descifrar una sola contraseña y un conjunto de ellas, considere un archivo con los usuarios y sus contraseñas hash. Digamos que el archivo no tiene sal. Luego, un atacante podría elegir una cadena, llamarla attempt[0]y luego calcularla hash(attempt[0]). Un usuario cuyo hash almacenado en el archivo puede hash(attempt[0])tener o no contraseña attempt[0]. Sin embargo, incluso si noattempt[0] es la contraseña real del usuario, se aceptará como si lo fuera, porque el sistema solo puede verificar las contraseñas calculando el hash de la contraseña ingresada y comparándolo con el hash almacenado en el archivo. Por lo tanto, cada coincidencia descifra una contraseña de usuario y la posibilidad de una coincidencia aumenta con la cantidad de contraseñas en el archivo. Por el contrario, si se utilizan sales, el atacante tendría que calcular , comparar con la entrada A, luego comparar con la entrada B, y así sucesivamente. Esto evita que cualquier intento de descifrar varias contraseñas, dado que se evita la reutilización de salt. [9]hash(attempt[0] || salt[a])hash(attempt[0] || salt[b])

Salts también combate el uso de tablas precalculadas para descifrar contraseñas. [10] Una tabla de este tipo podría simplemente asignar contraseñas comunes a sus hashes, o podría hacer algo más complejo, como almacenar los puntos de inicio y fin de un conjunto de cadenas hash precalculadas . En cualquier caso, la salazón puede defenderse del uso de tablas precalculadas al alargar los hashes y hacer que se extraigan de conjuntos de caracteres más grandes, lo que hace menos probable que la tabla cubra los hashes resultantes. En particular, una tabla precalculada necesitaría cubrir la cadena [salt + hash]en lugar de simplemente [hash].

El moderno sistema de contraseñas ocultas , en el que los hashes de contraseñas y otros datos de seguridad se almacenan en un archivo no público, mitiga en cierta medida estas preocupaciones. Sin embargo, siguen siendo relevantes en instalaciones de múltiples servidores que utilizan sistemas centralizados de administración de contraseñas para enviar contraseñas o hashes de contraseñas a múltiples sistemas. En tales instalaciones, la cuenta raíz en cada sistema individual puede ser tratada como menos confiable que los administradores del sistema de contraseñas centralizado, por lo que vale la pena garantizar que la seguridad del algoritmo de hash de contraseñas, incluida la generación de valores salt únicos, sea adecuado. [ cita necesaria ]

Otro beneficio (menor) de salt es el siguiente: dos usuarios pueden elegir la misma cadena como contraseña. Sin sal, esta contraseña se almacenaría como la misma cadena hash en el archivo de contraseña. Esto revelaría el hecho de que las dos cuentas tienen la misma contraseña, permitiendo que cualquiera que conozca una de las contraseñas de la cuenta acceda a la otra cuenta. Al agregar dos caracteres aleatorios a las contraseñas, incluso si dos cuentas usan la misma contraseña, nadie puede descubrirlo simplemente leyendo hashes. La salazón también hace que sea extremadamente difícil determinar si una persona ha utilizado la misma contraseña para varios sistemas. [11]

Implementaciones de Unix

Décadas de 1970 y 1980

Las versiones anteriores de Unix usaban un archivo de contraseñas /etc/passwd para almacenar los hash de las contraseñas saladas (contraseñas con el prefijo sales aleatorias de dos caracteres). En estas versiones anteriores de Unix, el salt también se almacenaba en el archivo passwd (como texto sin cifrar) junto con el hash de la contraseña saltada. El archivo de contraseña era de lectura pública para todos los usuarios del sistema. Esto era necesario para que las herramientas de software con privilegios de usuario pudieran encontrar nombres de usuarios y otra información. Por lo tanto, la seguridad de las contraseñas está protegida únicamente por las funciones unidireccionales (cifrado o hash) utilizadas para tal fin. Las primeras implementaciones de Unix limitaron las contraseñas a ocho caracteres y utilizaron un salt de 12 bits, lo que permitía 4.096 valores salt posibles. [12] Este era un equilibrio apropiado para los costos computacionales y de almacenamiento de la década de 1970. [13]

Década de 1980–

El sistema de contraseña oculta se utiliza para limitar el acceso a hashes y salt. La sal es de ocho caracteres, el hash es de 86 caracteres y la longitud de la contraseña es efectivamente ilimitada, salvo errores de desbordamiento de pila.

Implementaciones de aplicaciones web

Es común que una aplicación web almacene en una base de datos el valor hash de la contraseña de un usuario. Sin sal, un ataque de inyección SQL exitoso puede generar contraseñas fácilmente descifrables. Debido a que muchos usuarios reutilizan contraseñas para varios sitios, el uso de salt es un componente importante de la seguridad general de las aplicaciones web . [14] Algunas referencias adicionales sobre el uso de salt para proteger hashes de contraseñas en lenguajes o bibliotecas específicos (PHP, bibliotecas .NET, etc.) se pueden encontrar en la sección de enlaces externos a continuación.

Ver también

Referencias

  1. ^ Fenton, James L.; Grassi, Paul A.; García, Michael E. (junio de 2017). "Publicación especial del NIST 800-63-3" (PDF) . Publicaciones de la serie técnica del NIST .
  2. ^ Anderson, Ross (2020). Ingeniería de seguridad: una guía para construir sistemas distribuidos confiables (Tercera ed.). Indianápolis, Indiana. ISBN 978-1-119-64281-7. OCLC  1224516855.{{cite book}}: Mantenimiento CS1: falta el editor de la ubicación ( enlace )
  3. ^ Godwin, Anthony (10 de septiembre de 2021). "Las contraseñas importan". El encantador de insectos (Blog) . Consultado el 9 de diciembre de 2016 .
  4. ^ Boneh, Dan; Shoup, Víctor (4 de enero de 2020). Un curso de posgrado en criptografía aplicada (PDF) . págs. 693–695.
  5. ^ ab Rosulek, Mike (3 de enero de 2021). "Capítulo 11: Funciones Hash" (PDF) . El placer de la criptografía . págs. 204-205.
  6. ^ "Hashing seguro de contraseñas saladas: cómo hacerlo correctamente". crackstation.net . Consultado el 19 de marzo de 2021 .
  7. ^ Menezes, Alfred J.; Oorschot, Paul C. van; Vanstone, Scott A. (1997). Manual de criptografía aplicada . Prensa CRC. pag. 288.ISBN _ 0-8493-8523-7.
  8. ^ "Hashing seguro de contraseñas saladas: cómo hacerlo correctamente".
  9. ^ "Almacenamiento de contraseñas: serie de hojas de referencia de OWASP". Cheatsheetseries.owasp.org . Consultado el 19 de marzo de 2021 .
  10. ^ "Cómo funcionan las mesas Rainbow". kestas.kuliukas.com .
  11. ^ Puestos, William; Lawrie Brown (2015). Seguridad informática: principios y práctica (Tercera ed.). Bostón. ISBN 978-0-13-377392-7. OCLC  874734678.{{cite book}}: Mantenimiento CS1: falta el editor de la ubicación ( enlace )
  12. ^ Morris, Robert; Thompson, Ken (3 de abril de 1978). "Seguridad de contraseñas: un caso histórico". Laboratorios Bell . Archivado desde el original el 21 de agosto de 2013.
  13. ^ Simson Garfinkel; Gene Spafford; Alan Schwartz (2003). "Cómo Unix implementa las contraseñas". UNIX práctico y seguridad de Internet (3ª ed.). Medios O'Reilly. ISBN 9780596003234.
  14. ^ "Diario ISC: hash de contraseñas". Dshield.org . Consultado el 15 de octubre de 2011 .

enlaces externos