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?
Respuesta
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!)
+1 por mencionar la competencia SHA-3 ... Tengo algunas dudas sobre Skein ...;) [Descargo de responsabilidad: ¡podría estar predispuesto!] – Krystian
@krystian su madeja derecha ha golpeado algunos baches y ha sido reparada. Estoy ansioso por ver cómo se desarrolla esto. – rook
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. –
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.
-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
@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
estoy de acuerdo con esa afirmación. Es el menor de dos males. – rook
- 1. ¿Cuál es la mejor solución para un problema embarazosamente paralelo?
- 2. ¿Cuál es la mejor solución de VCS para Windows?
- 3. ¿Cuál es la mejor solución para OpenID con Django?
- 4. Encuadernación de casillas de verificación: ¿cuál es la mejor solución?
- 5. ¿Cuál es la mejor solución de Wiki para Django?
- 6. ¿Cuál es la mejor estructura de solución MVC3?
- 7. ¿cuál es la solución alternativa para paymentWithProductIdentifier?
- 8. System.IO.Exception: Pipe está roto
- 9. Genéricos, polimorfismo, interfaces: ¿cuál es la solución?
- 10. ¿Cuál es la mejor manera de saber si JQuery está disponible?
- 11. C# en VS2005: ¿cuál es la mejor manera de verificar si una cadena está vacía?
- 12. En C#, ¿cuál es la mejor forma de comprobar si un conjunto de datos está vacío?
- 13. ¿Cuál es la mejor manera de utilizar CoffeeScript con Django si está desarrollando en Windows?
- 14. ¿Cuál es la mejor manera de detectar si un servidor proxy está disponible?
- 15. ¿Cuál es la solución para onchange con entradas de archivo?
- 16. ¿Cuál es la solución? Todos hacen
- 17. ¿Cuál es la mejor manera de comparar cadenas hash? (PHP)
- 18. ¿Este bloqueo doble está roto?
- 19. ¿Cuándo es la covarianza de C++ la mejor solución?
- 20. ¿Cuál es la mejor manera de usar SVN en la solución de Visual Studio 2010?
- 21. ¿Cuál es la tasa de choque para md5?
- 22. ¿Cuál es la diferencia entre usar MD5.Create y MD5CryptoServiceProvider?
- 23. ¿Está realmente roto el cronómetro?
- 24. ¿Cuál es la mejor opción?
- 25. ¿Qué solución es mejor para la autenticación social de Django?
- 26. Fecha de Javascript DATE y C#: ¿cuál es la mejor solución?
- 27. ¿Cuál es la mejor solución para la agrupación de conexiones de bases de datos en python?
- 28. Cuál es la mejor práctica para la solución alternativa de Multi-Herencia en C#
- 29. ¿Cuál es la mejor manera de verificar si la vista es visible en la ventana?
- 30. ¿Cuál es la mejor solución para convertir información RichTextFormat a HTML en C#?
Hashes con qué propósito? – Gumbo
@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