¿Cuándo es perjudicial para el hachís?

Prólogo
Este texto será uno de los capítulos reescritos para el manual sobre protección de la información del Departamento de Ingeniería de Radio y Sistemas de Control, así como, a partir de este código de capacitación, el Departamento de Protección de Información del Instituto de Física y Tecnología de Moscú. El tutorial completo está disponible en github (ver también versiones preliminares ). En Habrir planeo subir nuevas piezas "grandes", en primer lugar, para recopilar comentarios y observaciones útiles, y en segundo lugar, para dar a la comunidad más material general sobre temas útiles e interesantes.

Una función hash criptográfica confiable convierte el texto sin formato en texto de una longitud determinada. Esto asegura la "persistencia": la dificultad de restaurar el primer y el segundo prototipo. O, en lenguaje sencillo sobre la primera propiedad, la dificultad de obtener dicho texto, cuyo valor para la función hash será igual al especificado.

La complejidad de la recuperación se entiende como el hecho de que para encontrar el primer prototipo [una función hash criptográfica confiable], se requiere completar un promedio de al menos 2n1operaciones hash donde n- el número de bits en la salida de la función hash criptográfica. Tomando una función hash moderna con un gran tamaño de salida (a partir de 256 bits), el desarrollador del sistema de información está seguro de que es imposible restaurar los datos originales del valor de la función hash. Muy a menudo tiene razón.

Pero hay un conjunto importante de casos en los que, a pesar de la confiabilidad de la función hash, restaurar la imagen inversa o incluso el texto fuente no es un problema. Este es el caso cuando el uso de una función hash no tiene sentido. Este es el caso cuando se puede buscar el número de variantes del texto fuente .

Ejemplo: número de teléfono . Diferentes números de teléfono con el prefijo "+7" y 10 dígitos son 1010 aprox233. Los dispositivos modernos que están optimizados para iterar sobre valores hash clasifican millones de hash por segundo. Esto significa que el cálculo de los valores de las funciones hash para todos los números de teléfono posibles con un prefijo no es más que unos pocos segundos.

Ejemplo: número de tarjeta de crédito (PAN, número de tarjeta de pago ). A menudo, el número de la tarjeta está enmascarado, revelando los primeros 4 (6) y / o los últimos 4 dígitos, mientras oculta el resto. Hay 16 dígitos en la tarjeta. ¿Es posible descifrar los números de la tarjeta para ocultarlos al atacante? No Si un atacante recibió 8 dígitos de 16 (los primeros 4 y los últimos 4), así como el valor de la función hash del número completo de la tarjeta, entonces puede recuperar el número completo en menos de un segundo. Para hacer esto, tendrá que resolver todo 108 aprox226Opciones de número.

Un ejemplo interesante con una dirección de correo electrónico . Parece que por el valor de una función hash confiable, es imposible restaurar la dirección original. El número de diferentes variantes de 8 letras latinas y 10 dígitos ya da 368 aprox241opciones para los nombres de los buzones sin tener en cuenta los diferentes dominios de los servicios de correo ( @mail.ru , @gmail.com , etc.). Si toma otros caracteres permitidos, además de alargar la dirección, hay aún más opciones. Pero ... Hasta 2006, el proyecto Blue Frog (Blue Frog) funcionó, lo que ofrecía a sus usuarios protección antispam. Utilizó notificaciones automáticas de los proveedores sobre el correo no deseado enviado desde sus servidores, lo que obligó a los anunciantes a negarse a enviar correo no deseado a al menos las direcciones que participaron en el proyecto. Para comprender si el cuadro pertenece al participante o no, se distribuyó un archivo con una lista de valores de la función hash criptográfica de la dirección de buzón de cada miembro.

Se asumió que los spammers verificarán cada una de sus direcciones para enviar anuncios en esta lista y excluirán las coincidencias encontradas. Sin embargo, la presencia de un archivo con los valores de la función hash permitió a los atacantes hacer exactamente lo contrario: identificar a los participantes del proyecto y enviarles flujos reforzados de mensajes sin sentido para negarse a usar el proyecto Blue Frog. Algún tiempo después de este ataque (así como otros, incluidos los ataques DDoS en los servidores), el proyecto dejó de funcionar.

Como antes, el uso de cualquier sal que viene con el valor de la función hash no afecta el tiempo de enumeración (pero aún protege contra ataques de diccionario).

Posibles soluciones para los casos descritos.

  1. Hash no los valores en sí, sino la concatenación del valor original y algunos secretos almacenados por separado. Por ejemplo, no en la tabla de la base de datos (junto con los valores de las funciones hash), sino en la configuración del servidor de aplicaciones. Con un éxito similar, en lugar de hash, puede usar la función de cifrado de bloque en alguna clave secreta.
  2. Utilice funciones hash que no solo sean confiables, sino también lentas en informática. Tanto para el criptoanalista como para el usuario legal. Un ejemplo de tales funciones es PBKDF2, bcrypt, scrypt, Argon2, para lo cual, al llamar a una función, también indicamos el número de iteraciones hash. Sin embargo, si aumentar la longitud de la salida de la función hash en solo un bit (de 256 o 512) aumenta la complejidad del ataque del criptoanalista por un orden binario (por un factor de dos), entonces aumentar el número de iteraciones para la función hash PBKDF2 duplicará la complejidad de los ataques en solo dos tiempos Es decir, obtener un valor hash incluso para un usuario legal se vuelve costoso en términos de recursos informáticos y energía gastada.

Epílogo
El autor estará agradecido por los hechos y otros comentarios sobre el texto.

Source: https://habr.com/ru/post/477416/


All Articles