¿Mejor función de digestión de propósito general?
Pregunta
Al escribir una aplicación nueva promedio en 2009, ¿cuál es la función de compendio más razonable para usar, en términos de seguridad y rendimiento? (¿Y cómo puedo determinar esto en el futuro, según cambien las condiciones?)
Cuando similar < a href = "https://stackoverflow.com/questions/184089/what-is-the-strongest-hashing-algorithm-commonly-available-today"> questions were preguntado anteriormente, las respuestas han incluido SHA1, SHA2, SHA-256, SHA-512, MD5, bCrypt y Blowfish.
Me doy cuenta de que, en gran medida, cualquiera de estos podría funcionar, si se usa de manera inteligente, pero prefiero no tirar un dado y elegir uno al azar. Gracias.
Solución
Sigo las pautas de NIST / FIPS :
15 de marzo de 2006: la familia SHA-2 de funciones hash (es decir, SHA-224, SHA-256, SHA-384 y SHA-512) pueden ser utilizado por las agencias federales para todos aplicaciones que utilizan hash seguro algoritmos Las agencias federales deben Deje de usar SHA-1 para digital firmas, sellado de tiempo digital y otras aplicaciones que requieran resistencia a la colisión tan pronto como Práctico, y debe utilizar el SHA-2. Familia de funciones hash para estos aplicaciones después de 2010. Después de 2010, Las agencias federales pueden usar SHA-1 solamente para las siguientes aplicaciones: autenticación de mensajes basada en hash códigos (HMACs); derivación clave funciones (KDFs); y número aleatorio generadores (RNGs). Independientemente de su uso, NIST fomenta la aplicación y diseñadores de protocolo para utilizar el SHA-2 Familia de funciones hash para todos los nuevos aplicaciones y protocolos.
Otros consejos
Dices " función de compendio " ;; presumiblemente eso significa que desea utilizarlo para calcular resúmenes de " long " mensajes (no solo hashing " mensajes " " " " " como contraseñas). Eso significa que bCrypt y opciones similares están fuera; están diseñados para ser lentos para inhibir los ataques de fuerza bruta en las bases de datos de contraseñas. MD5 está completamente roto, y SHA-0 y SHA-1 están demasiado debilitados para ser una buena elección. Blowfish es un cifrado de flujo (aunque se puede ejecutar en un modo que produce resúmenes), por lo que tampoco es una buena elección.
Eso deja varias familias de funciones hash, incluyendo SHA-2, HAVAL, RIPEMD, WHIRLPOOL y otras. De estos, la familia SHA-2 es la más analizada por criptoanálisis, por lo que sería mi recomendación para uso general. Recomendaría SHA2-256 o SHA2-512 para aplicaciones típicas, ya que esos dos tamaños son los más comunes y es probable que SHA-3 los admita en el futuro.
Realmente depende de para qué lo necesites.
Si necesita seguridad real, ya que la capacidad de encontrar una colisión podría comprometer fácilmente su sistema, usaría algo como SHA-256 o SHA-512, ya que son muy recomendados por varias agencias.
Si necesita algo que sea rápido y se pueda usar para identificar algo de manera única, pero no existen requisitos de seguridad reales (es decir, un atacante no podría hacer nada desagradable si encontrara una colisión) entonces usaría algo como MD5.
MD4, MD5 y SHA-1 han demostrado ser más fáciles de romper, en el sentido de encontrar una colisión a través de un método de ataque de cumpleaños, de lo esperado. RIPEMD-160 está bien considerado, pero con solo 160 bits, un ataque de cumpleaños solo necesita 2 ^ 80 operaciones, por lo que no durará para siempre. Whirlpool tiene excelentes características y parece ser el más fuerte del lote, aunque no tiene el mismo respaldo que SHA-256 o SHA-512, en el sentido de que si hubo un problema con SHA-256 o SHA-512, Es más probable que lo averigüe a través de los canales adecuados.