Una forma segura de acortar un hash

11

Si quiero guardar un hash de un cierto número de bits, pero mi algoritmo de hash me da más bits de los que necesito, ¿cuál es la forma más segura de acortarlo?

Debería:

  • Simplemente elimine los primeros o últimos bits
  • XOR los primeros o últimos bits con la parte que guardo
  • Haz otra cosa

¿Importa cómo lo estoy acortando, o depende del algoritmo hash que estoy usando? ¿Esto reduce la seguridad del hash (ej .: es un hash de 128 bits recortado a 64 bits peor que un hash de 64 bits del mismo algoritmo)?

    
pregunta Runemoro 20.08.2015 - 19:59
fuente

2 respuestas

17

Simplemente truncar un hash es la forma común y aceptada de acortarlo. No necesitas hacer nada sofisticado.

Hay muchas preguntas aquí y en crypto.stackexchange sobre si hacer esto reduce la fuerza del hash (consulte la lista de preguntas relacionadas en la parte inferior). La respuesta es que No, truncar un hash no reduce su fuerza (aparte de lo obvio que más corto los hashes tienen más colisiones ).

De acuerdo con la respuesta de @ Reid en [2] y la respuesta de @ ThomasPornin en [3], la idea de truncar hashes es totalmente compatible con NIST, de hecho, SHA-224 solo es SHA-256 truncado, SHA-384 es solo SHA -512 truncado, etc.

PREGUNTAS RELACIONADAS

[1] hash truncado para la autenticación de mensajes?

[2] ¿Está truncando un hash SHA512 a los primeros 160 bits tan seguro como usar SHA1?

[3] ¿Debo usar los primeros o últimos bits de un hash SHA-256?

    
respondido por el Mike Ounsworth 20.08.2015 - 21:47
fuente
0

Sí, acortar un hash reduce la seguridad del hash. Una parte importante de la seguridad de un algoritmo de hash es la resistencia a la colisión de los algoritmos. Esto significa que si hash ThingToHash1 el resultado (con suerte) no coincidirá con el hash para ninguna otra entrada. Al truncar el hash, aumenta la probabilidad de una colisión porque solo un subconjunto de la salida de algoritmos de hash debe colisionar con la salida de otra entrada. Sin embargo, si la colisión ocasional es aceptable y no es perjudicial para la seguridad de su aplicación, está bien hacerlo. Por ejemplo, git acepta hashes de confirmación truncados para identificar confirmaciones específicas.

    
respondido por el Justin Moore 20.08.2015 - 20:25
fuente

Lea otras preguntas en las etiquetas