2010-05-04 13 views
8

Después de leer el tema "Is MD5 really that bad", estaba pensando en una mejor solución para generar hashes. ¿Hay mejores soluciones como Adler, CRC32 o SHA1? ¿O están también rotos?Si MD5 está roto, ¿cuál es la mejor solución?

+5

Hashes con qué propósito? – Gumbo

+0

@gumbo buen punto, porque incluso con una aplicación de seguridad las colisiones no son siempre significativas. Por ejemplo, las colisiones no afectan la integridad de un hmac. – rook

Respuesta

9

CRC32 es probablemente lo peor que podría usar para contraseñas (además de tal vez crc16 :). Las comprobaciones de redundancia cíclica son para detectar si un mensaje ha sido dañado por causas naturales, es trivial generar colisiones usando nada más que álgebra. SHA0 y SHA1 también están rotos, aunque a diferencia de md5() nadie ha generado una colisión SHA1, pero se cree que es computacionalmente factible con nuestra tecnología actual.

Se debe usar cualquier miembro de la familia SHA-2. Sha-256 es bueno, SHA-512 es probablemente más de lo que necesita. NIST es la celebración de la competición SHA-3 ahora mismo y esto se terminará en algún momento de 2012. (madeja por la victoria!)

+0

+1 por mencionar la competencia SHA-3 ... Tengo algunas dudas sobre Skein ...;) [Descargo de responsabilidad: ¡podría estar predispuesto!] – Krystian

+0

@krystian su madeja derecha ha golpeado algunos baches y ha sido reparada. Estoy ansioso por ver cómo se desarrolla esto. – rook

+0

En cuanto al rendimiento, Skein es bastante rápido en plataformas de 64 bits, pero apesta en sistemas de 32 bits, especialmente en aquellos sistemas integrados donde el rendimiento es más importante (por ejemplo, enrutadores o terminales de pago a prueba de manipulaciones). BMW y SHABAL parecen ser mucho más rápidos y más amigables para sistemas con restricciones duras en el tamaño del código. –

4

Si usted está buscando una función hash criptográfica, Adler y CRC32 son muy mala idea. SHA-1 también está roto, pero de una manera mucho menos peligrosa que MD5. Sin embargo, esto probablemente cambie en el futuro.

En este momento la única opción sensata parece ser usar SHA-256, posiblemente truncando el resumen a la longitud deseada.

+0

-1 truncamiento es una mala idea. Aunque así es como se crea sha-384 desde sha-512 y se crea sha-224 desde sha-256. Esto es un desperdicio de computación y solo se ahorran unos pocos bytes. – rook

+2

@The Rook: Es cierto en general, pero tenía algunos casos específicos en mente. Si puede permitirse almacenar el hash completo, es la mejor opción y esto debería hacerse. Pero si necesita exactamente 160 bits del resumen (reemplazando SHA-1 en alguna base de código no flexible), entonces es mejor usar SHA-2 truncado que dejar SHA-1. – Krystian

+0

estoy de acuerdo con esa afirmación. Es el menor de dos males. – rook

2

SHA1 tiene algunos ataques teóricos pero AFAIK todavía no hay nada práctico que le permita romperlo todavía.

SHA2 parece que se mantiene estable por ahora.

Cuestiones relacionadas