Saltar al contenido

¿Cómo funcionan las funciones hash unidireccionales? (Editado)

Nuestro team redactor ha estado por horas buscando para dar respuesta a tus interrogantes, te regalamos la respuestas de modo que esperamos que sea de mucha ayuda.

Solución:

Dado que hasta ahora todo el mundo simplemente ha definido qué era una función hash, morderé.

Una función unidireccional no es solo una función hash, una función que pierde información, sino una función f por lo cual, dada una imagen y (“SE” o 294 en las respuestas existentes), es difícil encontrar una imagen previa x tal que f(x)=y.

Es por eso que se llaman unidireccionales: puede calcular una imagen pero no puede encontrar una imagen previa para una imagen determinada.

Ninguna de las funciones hash ordinarias propuestas hasta ahora en las respuestas existentes tiene esta propiedad. Ninguno de ellos son funciones hash criptográficas unidireccionales. Por ejemplo, dado “SE”, puede recoger fácilmente la entrada “SXXXE”, una entrada con la propiedad de que X-encode (“SXXXE”) = SE.

No existen funciones unidireccionales “simples”. Tienen que mezclar sus entradas tan bien que no solo usted no reconoce la entrada en absoluto en la salida, pero tampoco reconoce otra entrada.

SHA-1 y MD5 solían ser funciones unidireccionales populares, pero ambas están casi rotas (los especialistas saben cómo crear imágenes previas para imágenes dadas, o casi pueden hacerlo). Hay un concurso en curso para elegir un nuevo estándar, que se llamará SHA-3.

Un enfoque obvio para invertir una función unidireccional sería calcular muchas imágenes y mantenerlas en una tabla asociando a cada imagen la imagen previa que la produjo. Para que esto sea imposible en la práctica, todas las funciones unidireccionales tienen una salida grande, al menos 64 bits pero posiblemente mucho más grande (hasta, digamos, 512 bits).

EDITAR: ¿Cómo funcionan la mayoría de las funciones hash criptográficas?

Por lo general, tienen en su núcleo una única función que realiza transformaciones complicadas en un bloque de bits (un cifrado de bloque). La función debería ser casi biyectiva (no debería asignar demasiadas secuencias a la misma imagen, porque eso causaría debilidades más adelante) pero no tiene que ser exactamente biyectiva. Y esta función se itera un número fijo de veces, lo suficiente para que la entrada (o cualquier entrada posible) sea imposible de reconocer.

Tomemos el ejemplo de Skein, uno de los fuertes candidatos para el contexto SHA-3. Su función principal se repite 72 veces. El único número de iteraciones para las que los creadores de la función saben cómo relacionar a veces las salidas con algunas entradas es 25. Dicen que tiene un “factor de seguridad” de 2,9.

Piense en un hash realmente básico, para la entrada string, devuelve la suma de los valores ASCII de cada carácter.

hash( 'abc' ) = ascii('a')+ascii('b')+ascii('c')
              = 97 + 98 + 99
              = 294

Ahora, dado el valor hash de 294, ¿puede decir cuál es el original string ¿era? Obviamente no, porque ‘abc’ y ‘cba’ (y muchos otros) dan el mismo valor hash.

Las funciones de hash criptográficas funcionan de la misma manera, excepto que, obviamente, el algoritmo es mucho más complejo. Siempre habrá colisiones, pero si sabes string s hashes para h, entonces debería ser muy difícil (“computacionalmente inviable”) construir otro string que también tiene hash para h.

Buscando una analogía simple aquí en lugar de una explicación compleja.

Para empezar, dividamos el tema en dos partes, operaciones unidireccionales y hash. ¿Qué es una operación unidireccional y por qué querría una?

Las operaciones unidireccionales se denominan así porque no son reversibles. La mayoría de las operaciones típicas, como la suma y la multiplicación, se pueden revertir, mientras que la división de módulo no se puede revertir. ¿Por qué es tan importante? Porque desea proporcionar un valor de salida que 1) es difícil de duplicar sin las entradas originales y 2) no proporciona ninguna forma de averiguar las entradas de la salida.

Reversible

Adición:

4 + 3 = 7  

Esto se puede revertir tomando la suma y restando uno de los sumandos.

7 - 3 = 4  

Multiplicación:

4 * 5 = 20  

Esto se puede revertir tomando el producto y dividiéndolo por uno de los factores

20 / 4 = 5

No reversible

División de módulo:

22 % 7 = 1  

Esto no se puede revertir porque no hay ninguna operación que puedas hacer con el cociente y el dividendo para reconstituir el divisor (o viceversa).

¿Puede encontrar una operación para completar donde el ‘?’ ¿es?

1  ?  7 = 22  
1  ?  22 = 7

Dicho esto, las funciones hash unidireccionales tienen la misma calidad matemática que la división de módulo.

¿Porque es esto importante?

Digamos que te di un key a un casillero en una terminal de autobuses que tiene mil casilleros y le pedí que se lo entregara a mi banquero. Siendo el tipo inteligente que eres, sin mencionar sospechoso, inmediatamente mirarías al key para ver qué número de casillero está escrito en el key. Sabiendo esto, he hecho algunas cosas tortuosas; Primero encontré dos números que cuando se dividen usando la división de módulo me da un número en el rango entre 1 y 1000, segundo borré el número original y escribí en él el divisor del par de números, segundo elegí una terminal de bus que tiene un guardia protegiendo los casilleros de los malhechores al permitir que las personas solo prueben un casillero al día con sus key, tercero, el banquero ya conoce el dividendo, así que cuando reciba el key puede hacer los cálculos y calcular el resto y saber qué casillero abrir.

Si elijo los operandos sabiamente, puedo acercarme a una relación uno a uno entre el cociente y el dividendo, lo que te obliga a probar cada casillero porque la respuesta extiende los resultados de las posibles entradas sobre el rango de números deseados, los casilleros disponible en la terminal. Básicamente, significa que no puede adquirir ningún conocimiento sobre el resto, incluso si conoce uno de los operandos.

Entonces, ahora puedo ‘confiar’ en usted para entregar el key a su legítimo propietario sin preocuparse de que pueda adivinar fácilmente a qué casillero pertenece. Claro, podría buscar por la fuerza bruta en todos los casilleros, pero eso llevaría casi 3 años, mucho tiempo para que mi banquero use el key y vaciar el casillero.

Consulte las otras respuestas para obtener más detalles sobre las diferentes funciones hash.

Ten en cuenta recomendar esta sección si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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