¿Qué es una “ salt ” criptográfica?

Soy un principiante en criptografía y busco entender en términos muy simples lo que es un » criptográfico salt » es, cuándo podría necesitar usarlo y por qué debería o no debería utilizarlo.

¿Puedo obtener un método muy simple y una explicación clara (nivel principiante)?

Si conoce alguna referencia sobre el tema, también sería útil.

Respuesta

La razón por la que se usan las sales es que las personas tienden a elegir las mismas contraseñas, y no al azar. Muchas contraseñas que se usan son palabras reales cortas, para que sea fácil de recordar, pero esto también habilita para un ataque.

Como sabrá, las contraseñas generalmente no se almacenan en texto simple, sino en hash. Si no está seguro del propósito de una función hash, lea primero sobre eso.

Ahora, lo que pueden hacer los atacantes es simplemente generar una lista de contraseñas comunes y sus correspondientes hashes. Si se utilizan contraseñas comunes, los hashes que un sitio ha almacenado con la tabla revelarán las contraseñas al atacante.

A salt simplemente se agrega a crea una salida de hash de contraseña única incluso para los usuarios adoptando contraseñas comunes . Su propósito es hacer que los ataques basados en cálculos previos no sean útiles. Si su contraseña se almacena con una sal única, cualquier tabla de hash de contraseña precalculada que tenga como objetivo hash de contraseña sin sal o que tenga como objetivo una cuenta con una sal diferente no ayudará a descifrar la contraseña de su cuenta. Una sal generada aleatoriamente durante mucho tiempo (usando /dev/urandom) se espera que sea globalmente único . Por lo tanto, las sales se pueden utilizar para hacer -Ataques informáticos totalmente ineficaces.

La forma más sencilla de combinar la sal y la contraseña es simplemente concatenarlas, es decir, el valor hash almacenado es Hash(salt||password). contraseña password1 ahora se convierte mágicamente, por ejemplo, en 6$dK,3gCA%Jpassword1 que es poco probable que se encuentre en la tabla de un cracker de contraseñas.

La sal se puede almacenar completamente en claro en la base de datos, junto al valor hash. Una vez que el atacante tiene la base de datos y quiere encontrar las contraseñas, necesita generar la tabla precalculada para cada sal individualmente, una operación costosa.

Otra forma de ayudar a defenderse contra el descifrado de contraseñas fuera de línea es realizar estiramiento de contraseña, es decir. hacer que un hash de contraseña sea más lento de calcular para cualquier persona, incluido el servicio de inicio de sesión y los crackers de contraseñas. Un método utilizado para estirar las contraseñas se logra iterando la función hash muchas veces, es decir, almacenando Hash(Hash(Hash(Hash…(Hash(salt||password)))…).

Otra idea común relacionada con la salazón se llama pimiento . Es decir, otro valor aleatorio concatenado a la contraseña, de modo que el valor almacenado sea Hash(pepper||salt||password). Entonces, la pimienta no se almacena en absoluto . Tanto el servidor de inicio de sesión como el descifrador de contraseñas deben utilizar la fuerza bruta del valor de pimienta desconocido, lo que ralentiza las comparaciones de hash de contraseñas para ambas partes.

De 2013 a 2015 un hash de contraseña La competencia se llevó a cabo para buscar un mejor algoritmo de estiramiento de contraseñas. El ganador fue el algoritmo Argon2 . Se recomienda a los programadores que utilicen Argon2 en lugar de implementar su propio algoritmo .

Comentarios

  • Entonces, esencialmente, cuando solo tiene una o dos contraseñas almacenadas en la base de datos, ¿el uso de salt es efectivamente inútil? Lo que entiendo es que esto solo es útil cuando la cantidad de contraseñas almacenadas en la base de datos no es pequeña.
  • @AbhinavChoudhury: No, defiende contra tablas de arco iris, es decir, tablas precalculadas para un hash específico. Un ejemplo: tome una contraseña » contraseña1 «. Si no ‘ t salt, ‘ almacenará HASH (» contraseña1 «) en su base de datos. Ahora, si un atacante obtiene sus registros y precalculó HASH (*) para todas las contraseñas de 9 caracteres, puede recuperar la contraseña. Si, en cambio, sacó la contraseña, HASH (‘ somesaltforyou ‘ || ‘ contraseña1 ‘) NO estará en la tabla de arco iris de los atacantes (ya que ‘ tiene más de 9 caracteres).
  • » La sal se puede almacenar completamente en claro en la base de datos, junto al valor hash » – – esta parte nunca ha tenido sentido para mí; Me preguntaba si podría ampliar eso
  • El punto de la sal es asegurarse de que el hash no se encuentre en una tabla precalculada. Debe almacenarse para verificar la contraseña (de lo contrario, ‘ sa » pepper «). No se supone que la sal sea » secreta «, solo para que la contraseña sea única. Por supuesto, esto significa que cada contraseña almacenada debe tener su propia sal, única (y aleatoria).

Respuesta

¿Puedes ayudarme a entender qué es una «sal» criptográfica?

En el contexto de la contraseña creación, una «sal» son datos (aleatorios o de otro tipo) añadidos a una función hash para hacer que la salida hash de una contraseña sea más difícil de descifrar.

¿Cuándo debería usarlo?

Siempre.

Por qué ¿debería o no debería utilizarlo?

Siempre debería utilizar un valor de sal con sus funciones hash, por las razones que se explican a continuación.

Es generalmente cierto que las personas eligen contraseñas débiles, y ciertamente es cierto que hay gigabytes de tablas arcoíris disponibles públicamente repletas de valores hash que las representan. Entonces, cuando alguien crea una cuenta en su servicio y selecciona una contraseña para asegurar su identidad, normalmente puede apostar que la contraseña que elijan será 1) común, 2) insegura y 3) disponible para referencias cruzadas en tablas de búsqueda.

Por ejemplo, la contraseña Nowayin1 cuando se aplica el hash a través de MD5 es 6f367d65bc74b88e21fb9959487ffa3a y obviamente no es una buena opción. Incluso si se ve bien (y no es así), el hecho de que el hash MD5 de la contraseña aparezca en bases de datos abiertas lo hace inútil.

Pero eso es solo MD5 de 128 bits. ¿Qué pasa con algo? más fuerte, como SHA1 (160 bits) o incluso Whirlpool (512 bits)?

El mismo problema.

Por ejemplo, P @ $$ word con SHA1 es 1e69e0a615e8cb813812ca797d75d4f08bdc2f56 y 1qazXSW @ hash con bañera de hidromasaje está 0bf7545b784665d23b9c174ca03688a405f05b048e9d6c49bfc2721a1fa872bbd6576273d002e56d7c2a9c378efe607af36eea9d708a776e6f60ecb26e081cdf .

El problema raíz con todas estas contraseñas, y miles de millones más como ellas, es el hecho de que sus hashes de uso común se han convertido en de conocimiento común.

Una contraseña salt cambia eso.

Si se agrega un valor aleatorio (la sal) a la contraseña seleccionada por el usuario, entonces el hash SHA1 1e69e0a615e8cb813812ca797d75d4f08bdc2f56 ya no revelaría P @ $$ como contraseña del usuario, porque el valor hash en la tabla del arco iris ya no coincidiría con él.

Y no tomaría mucho. Un pequeño valor aleatorio de 16 bits, por ejemplo, produciría 65.536 variantes de cada valor hash en las tablas de búsqueda. Así que una base de datos de 15 mil millones de entradas ahora necesitaría más de 983 mil millones de hashes para contabilizar la sal.

Entonces, ese es el punto de salar sus hashes, para frustrar las tablas de búsqueda y arco iris. Pero no «No cuelgue su sombrero en un hachís salado, porque los piratas informáticos no perderán mucho tiempo usando tablas de arco iris para averiguar sus contraseñas.

Usarán un sistema de clúster de cinco servidores con 25 GPU con Hashcat que puede grabar 350 mil millones de suposiciones por segundo, descifrando hashes para cada contraseña imaginable de ocho caracteres que contenga letras mayúsculas y minúsculas, números y caracteres especiales, en poco menos seis horas. (Y eso fue en 2012.)

Las técnicas como el estiramiento de claves que hacen que los hash se ejecuten más lentamente se pueden usar para compensar la velocidad de dicho hardware, lo que hace que los ataques de diccionario y de fuerza bruta sean demasiado lentos para que valgan la pena. , pero el hardware es cada vez más rápido.

ACTUALIZACIÓN 2018:

Las mejores prácticas actuales incluyen el cifrado seguro de sus contraseñas con Argon2i (preferido sobre scrypt), una función de memoria que es muy resistente a FPGA, GPU de varios núcleos y módulos ASIC dedicados que se utilizan para descifrar fácilmente contraseñas no extendidas. En la implementación de PHP7 de Argon2, la sal se maneja internamente por usted.

Respuesta

Voy a intentar responder una parte de su pregunta que hasta ahora se ha descuidado:

cuándo podría necesitar usarlo y por qué debería / no debería usarlo.

La respuesta corta es que, como aficionado, no debería utilizar la criptografía a un nivel que requiera tratar directamente con las sales.

Por ejemplo, el bcrypt el algoritmo de hash de contraseñas utiliza sales internamente. Pero no expone ese hecho a los desarrolladores que lo usen; simplemente pasa la contraseña a bcrypt (y, opcionalmente, un parámetro que establece el «nivel del esfuerzo de la CPU «necesario para generar el hash) y devuelve el hash. Cuando necesites validar si una contraseña es correcta, pasas bcrypt tanto la contraseña como el hash generado previamente. Indicará si la contraseña fue o no la que se usó para generar el hash.

No siga el consejo dado aquí y trate de hash sus propias contraseñas usando un salt. Es un detalle de implementación de bajo nivel, y si se encuentra trabajando en un nivel en el que se necesitan este tipo de cosas, está trabajando en un nivel de abstracción demasiado bajo. La criptografía es muy difícil de hacer correctamente, e Internet está absolutamente plagado de desarrolladores bien intencionados «esquemas de hash de contraseñas completamente inseguros».

Respuesta

Citando “ Ref. examen 70-486 Desarrollo de aplicaciones web ASP.NET MVC 4 (MCSD): Desarrollo de aplicaciones web ASP.NET MVC 4 ” por William Penberthy, Pearson Education, 15 de septiembre de 2013:

La salazón es un proceso que fortalece el cifrado de archivos y los hash, lo que los hace más difíciles de romper. La salazón agrega una cadena aleatoria al principio o al final del texto de entrada antes de cifrar o cifrar el valor. Al intentar romper una lista de contraseñas, por ejemplo, los piratas informáticos deben tener en cuenta la sal, así como la posible información de la contraseña antes de poder romper en la aplicación. Si a cada valor que se está salando se le asigna un valor de sal diferente, la capacidad de crear una tabla de posibles valores de contraseña para un pa El programa para descifrar espadas se vuelve difícil de manejar.

Respuesta

Una sal es una número aleatorio que se necesita para acceder a los datos cifrados, junto con la contraseña.

Si un atacante no conoce la contraseña y está tratando de adivinarla con un ataque de fuerza bruta, entonces cada contraseña que intenta debe probarse con cada valor de sal.

Entonces, para una sal de un bit (0 o 1), esto hace que el cifrado sea dos veces más difícil de romper de esta manera. Una sal de dos bits lo hace cuatro veces más difícil, una sal de tres bits ocho veces más difícil, etc. ¡Puedes imaginar lo difícil que es descifrar contraseñas con un cifrado que usa una sal de 32 bits!

Comentarios

  • No. Por lo general, se supone que el atacante conoce la sal. En este caso, más allá de un umbral bajo, salt no mejora la seguridad.
  • » Se supone que Salt es conocido por el atacante » – > ¿Quién está asumiendo esto?
  • @Mike: ¿Quién? Alguien dice » Siempre debes asumir que el atacante conoce la sal. «. Los usuarios de otra página dicen » Las sales son públicas » y luego dice » que las sales son conocidas, porque ‘ es el uso estándar de la industria de la palabra salt. » Otro dice » que la sal es de conocimiento público, o al menos debería tratarse como pública conocimiento. «.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *