Hashes de datos superpuestos - hace que sean más fáciles de descifrar incluso cuando ninguno de ellos está craqueado

3

Diga que tengo cadenas: stringA, StringB, stringC.

Y hago dos hashes: HashA = sha256 (stringA + stringB) HashB = sha256 (stringB + stringC)

Por el bien del argumento, sugiero sha256, pero responder a la pregunta de forma genérica es igual de bueno.

No soy un matemático fuerte, pero supongo que sí, y estoy tratando de revertir los hashes anteriores, y supe por un algoritmo en el código que hay una cadena B (aún desconocida para mí) que es la parte posterior de cadena que va a HashA y la parte anterior de HashB.

¿Puedo reducir el número de permutaciones requeridas, para averiguar qué cadena B podría haber sido, ya que para que los dos hashes puedan dar las respuestas que hacen, de la entrada superpuesta, si no reduce el espacio de entrada? ¿Necesitas fuerza bruta?

es decir, son los hashes más débiles debido a este comportamiento de tener los datos dentro de ellos solapados.

Para mayor claridad: Si stringA, stringB, stringC y stringD son secretos.

Y un atacante obtiene todo el código / algorthm, etc., excepto las cadenas, y tiene:

caso A: hashA = sha256 (stringA + stringB) y hashB = (stringB + stringC)

o caso B: hashC = sha256 (stringA + stringB) y hashD = (stringC + stringD)

Tengo la sospecha de que en el caso A es más fácil construir datos de origen para que coincidan con los hash que en el caso B, pero no conozco las matemáticas suficientes para respaldar mi sospecha.

Más claridad : suponga que las cadenas están saladas, aunque con la misma sal por registro y hashes para ese registro, y que el atacante conoce las sales. Las sales se pueden asumir como prefijadas antes de 'stringx + stringY' a través de mi texto si lo desea.

Gracias.

    
pregunta pacifist 23.01.2014 - 06:44
fuente

2 respuestas

1

Intentaré ponerlo en palabras simples.

Ok, primero es primero, el hashing es un algoritmo de una sola manera . Solo se puede pasar del origen al hash y nunca del hash al origen. Quiero decir, la cadena de hash no tiene toda la información original, por lo que no podemos extraerla. La única forma de adivinar si una información coincide con un hash es mezclar la información y compararla con el hash original. E incluso de esta manera nunca estaremos seguros ya que dos cadenas de hash pueden chocar.

[Editar después de su aclaración] El CaseB es claramente más seguro:

  1. Considere que en el caso A, solo necesitará forzar la fuerza bruta todo el espacio una vez, la segunda vez necesitará forzar la fuerza bruta solo la mitad del espacio (solo la parte StringC).
  2. En CaseB, necesitarás fuerza bruta dos veces.

El espacio completo en el Caso B es N ^ (longitud (a) + longitud (b)) + N ^ (longitud (c) + longitud (d), el espacio completo en el caso A es N ^ (longitud (a) + longitud (b) + N ^ (longitud (c)) donde N es el número de caracteres válidos.

Pero no habrá accesos directos para encontrar "StringB" en el caso A simplemente porque se usa al calcular todos los hashes. Deberá aplicar fuerza bruta a lo largo de StringA o junto con StringB (y luego deberá saber la longitud exacta de cada string, etc.)

Solo como una nota al margen ... Estoy pensando que puede estar refiriéndose a un problema con el cifrado en modo de cifrado de bloque ECB, ese será un problema diferente y tendrá una respuesta muy diferente. Considere echar un vistazo a esta página de wikipedia.

    
respondido por el kiBytes 23.01.2014 - 08:13
fuente
1

Desde su respuesta anterior a mi pregunta:

  1. No sabemos la longitud de la cadena.
  2. No tenemos valor de ningún literal de cadena.
  3. Queremos deducir los valores de cadena de los valores de hash conocidos, el algoritmo y el hecho de que la cadena B se superpone.

Hecho:

  1. Tenemos que recurrir al método de ataque de fuerza bruta para calcular Hash para los valores de prueba de stringA, stringB y stringC para comparar con los valores de hash conocidos.

Asunciones:

Desde que mencionó las palabras clave "contraseña" & "sal" permite asumir lo siguiente:

  1. El límite de contraseña es de 8 caracteres.
  2. 52 alfabetos en inglés (mayúsculas y minúsculas), 0-9 dígitos y '!', '@', '#', '$', '%', '^', '&', '* ',' (',') 'son valores permitidos.
  3. El valor de sal contiene 43 caracteres.
  4. 52 alfabetos en inglés (mayúsculas y minúsculas), 0-9 dígitos son valores permitidos.
  5. stringA y stringC son contraseñas, mientras que stringB es salt.

Deducción:

  1. Para hashA de fuerza bruta
    • Para una contraseña de 8 caracteres con (52 + 10 + 10) = 72 posibles valores repetitivos, tendremos 72 ^ 8 permutaciones.
    • Para 43 caracteres de sal con (52 + 10) = 62 posibles valores repetitivos, tendremos 62 ^ 43 permutaciones.
    • Total de posibilidades = (62 ^ 43) X (72 ^ 8)

2. Ahora permite Brute Force the hashB

  • Para una contraseña de 8 caracteres con (52 + 10 + 10) = 72 posibles valores repetitivos, tendremos 72 ^ 8 permutaciones.
  • Para 43 caracteres de sal con (52 + 10) = 62 posibles valores repetitivos, tendremos 62 ^ 43 permutaciones.
  • Total de posibilidades = (62 ^ 43) X (72 ^ 8)

Pero oye, espera un minuto ... ¿No sabíamos que la cadena B se superpone? Sí, lo hicimos, pero no hace mucha diferencia, ya que en cualquier caso tenemos que probar cada valor de stringB con stringC para hashB de fuerza bruta.

Conclusion:

Conocer los valores de hash y el hecho de que parte de la cadena se superpone en diferentes cadenas fuente no facilita la vida por la sencilla razón de que tendremos que realizar fuerza bruta en los datos de fuente individuales - par de valores hash resultantes.

'Avalanche Effect' ... ¿suena alguna campana? No ...?

Prueba :

Vaya a este enlace

A pesar de que la entrada 2 y la entrada 3 difieren en un solo carácter, el valor de hash resultante se adhiere a la propiedad de defensa contra el ataque de preimagen y no revela nada sobre la aparente similitud entre los datos de origen.

Como resultado, el atacante tendrá que probar todos los valores de caracteres posibles para cada lugar del personaje.

Espero que esto ayude!

PS: perdonen el enfoque pedante, pero he tratado de mantener el escenario lo más simplista y teórico posible. Y no hace falta decir que si encuentra que la respuesta es incorrecta por cualquier medio, no dude en notificarlo.

    
respondido por el DA12C 917 23.01.2014 - 10:42
fuente

Lea otras preguntas en las etiquetas