¿Cómo evaluar la fuerza de un algoritmo de hash?

11

En el trabajo, el algoritmo de hash que utilizamos para las contraseñas parece estar hecho a medida. Obviamente, esa es una idea bastante mala, pero la administración no parece molesta.

El algoritmo siempre produce cadenas mayúsculas de 20 caracteres. Un aspecto particularmente preocupante de su comportamiento es que las contraseñas similares producen hashes similares: Password1 y Password2 producen hashes que son diferentes en solo 5 caracteres.

El otro problema obvio es que no parece que el algoritmo sea deliberadamente lento, lo que, según me han dicho, deberían ser los buenos algoritmos de hashing ( bcrypt , scrypt ).

¿Cómo se evalúa la fuerza de un algoritmo de hash? ¿Y de qué tipo de ataques deberíamos estar particularmente preocupados por un algoritmo de hash rápido con poca uniformidad?

Tengo acceso a la fuente (aunque lamentablemente no puedo publicarla en un foro público, por razones obvias).

    
pregunta AnonEmployee 26.12.2012 - 21:45
fuente

4 respuestas

11

Un algoritmo de hash fuerte implicaría que cambiar incluso un carácter uno dará como resultado un hash diferente completamente .

Un buen hashing algo tiene estas características:

  • El valor de hash está determinado por los datos que se están copiando
  • La función hash usa todos los datos dados
  • El hash distribuye todos los hashes posibles de manera uniforme entre todos los resultados de hash posibles
  • Si tiene una cadena y toma una cadena muy similar, obtendrá un resultado de hash completamente diferente (el cambio de un solo bit de entrada debería cambiar todos los bits de salida con una probabilidad del 50%. Otro requisito es que el hash sea , en la medida de lo posible, estadísticamente independiente de la entrada, por ejemplo, un alto peso de hamming en la entrada no produce un peso de hamming anormal en la salida. - Polynomial )

Por favor, dígaselo a tu gerencia

no debe ser Dave , y solo use uno de los algoritmos de hash estándar. Si está utilizando los hashes para almacenar contraseñas, use bcrypt . Cuando hasheado una contraseña, también estás preocupado por las sales, bcrypt hace todo eso por ti. Además todo es gratis.

    
respondido por el Lucas Kauffman 26.12.2012 - 22:19
fuente
5

Notando que:

  

contraseñas similares producen hashes similares: Password1 y Password2 producen hashes que son diferentes en solo 5 caracteres

es suficiente para declarar que este algoritmo de "hashing" es basura pura. Lo menos que un algoritmo que pretende ser un "hash" es, al menos, parecer aleatorio . Incluso algoritmos completamente dañados como MD4 o incluso hashes no criptográficos (como CRC32 ) ofrece una salida que es" satisfactoria "con respecto al análisis estadístico simple.

La función hash a la que alude parece seguir la fantasía de Hollywood de "descifrado cercano" (cuando tiene casi la tecla correcta, el texto es casi legible, solo un poco borrosa). Esto es solo un resurgimiento del Mastermind board game .

La seguridad consiste en derrotar a un adversario dedicado, inteligente y malévolo. La función hash en tu trabajo puede ser violada por un chimpancé.

    
respondido por el Thomas Pornin 27.12.2012 - 18:50
fuente
3

Una evaluación profesional es muy complicada y debe ser realizada por expertos en el campo durante mucho tiempo. Dicho esto, no creo que necesite que un experto vea esto: con un algoritmo de hashing rápido con poca uniformidad y tamaño pequeño (20 caracteres en mayúsculas son aproximadamente 94 bits, incluso md5 tiene 128) a los que es vulnerable. tanto ataques de fuerza bruta como ataques de colisión hash.

Su empresa debe cambiar este sistema lo antes posible.

(En realidad, dependiendo de lo malo que sea realmente el algoritmo, puede ser posible revertirlo para que un programa rápido pueda dar las contraseñas correctas de manera inmediata para ciertos hashes. Esto es particularmente terrible ya que rompería todas las contraseñas a la vez).

    
respondido por el us2012 26.12.2012 - 22:17
fuente
1

Una buena función de hashing debe tener lo que se denomina buenas "características de avalancha"; un pequeño cambio en el mensaje produce un cambio grande (y teóricamente impredecible) en el resumen de hash. Tu función hash tiene muy poco efecto de avalancha.

El efecto de avalancha es una de las formas principales en que las funciones hash se resisten a los "ataques de preimagen". Un ataque de preimagen es esencialmente "de-hashing" el resumen; dado un resumen de hash y la función hash, busque un mensaje (por lo general, cualquiera lo hará; a veces hay limitaciones de longitud de mensaje y valor de byte) que generarán el hash de destino. El propósito básico de una función hash es su transformación determinista pero unidireccional, por lo que cualquier algoritmo que pueda encontrar una preimagen en menos de 2 ^ N tiempo, para un resumen hash de N bits, debe tomarse como evidencia de que el hash es fundamentalmente roto.

Caso en punto; el bajo efecto de avalancha significa que los cambios en un resumen de hash, dado un cambio conocido en el mensaje, se pueden rastrear y predecir. Eso permite un enfoque de "búsqueda de objetivos"; dado un mensaje de inicio, haga un pequeño cambio, calcule el hash y vea si está "más cerca" del real (más de los bits correctos establecidos). Los cambios quirúrgicos se pueden usar para moldear el mensaje de trabajo en una imagen previa.

    
respondido por el KeithS 27.12.2012 - 21:57
fuente

Lea otras preguntas en las etiquetas