¿Cuál es la función hash segura más rápida recomendada para uso general en x86?

MD5 puede ser rápido pero está roto desde hace mucho tiempo. Incluso dejando la ilustración de un ataque de preimagen secundario para crear certificados de CA no autorizados.

SHA-1 también está roto. Las colisiones se pueden generar con 2 ^ 69 operaciones en lugar de 2 ^ 80. Puede parecer prácticamente imposible, pero criptográficamente este ataque de colisión hace que sea 2048 veces más fácil encontrar uno. Entonces está roto 🙂

Actualmente no hay ataques conocidos contra SHA2-256 y RIPEMD-160.
Ni preimagen ni preimagen secundaria (colisión débil ) o ataques de colisión fuertes.

En realidad, ya tiene la herramienta requerida para probar la velocidad de una función hash criptográfica particular para su plataforma mediante OpenSSL. Bueno, sus opciones están limitadas con los algoritmos admitidos en OpenSSL, pero bueno, ¿realmente quiere usar algún CHF exótico no estándar?

El comando ‘velocidad’ de OpenSSL nos ayudará.
Ejemplo:

$ openssl speed sha256

Puede ver la lista de algoritmos compatibles con el comando:

“velocidad openssl –ayuda”

No solo está obligado a las funciones hash, sino que también puede probar algoritmos de clave simétrica y asimétrica.

Para el lector perezoso, creé una hoja de cálculo y un buen gráfico de barras en abundancia comparando los algoritmos MD5, SHA-1, RIPEMD-160 y SHA2-256 con diferentes entradas de tamaño de bloque. http://spreadsheets.google.com/p…
Los resultados sin procesar están disponibles en http://gist.github.com/446104

La respuesta a su pregunta es RIPEMD-160.
¿Lo usaría si estuviera en tus zapatos? Probablemente no…
SHA2-256 es un estándar y seguirá siéndolo. RIPEMD-160 puede ser lo suficientemente seguro con 160 bits y más rápido que 256 bits SHA2-256, pero es posible que no sea compatible en el futuro o en la plataforma de un tercero.

Mire los gráficos, ejecute sus propias pruebas de velocidad openssl en su plataforma de destino y piense en los tamaños de sus bloques. Mire los resultados nuevamente y decida si vale la pena la aventura …

¿Necesita resistencia a colisiones y resistencia a la preimagen? Luego mire SHA2-256 o los candidatos para la competencia SHA-3 que han avanzado a la segunda ronda.
http://csrc.nist.gov/groups/ST/h

“Más rápido” depende de su hardware y caso de uso; ese enlace tiene implementaciones de muestra para los candidatos SHA-3 que han sido optimizados por los equipos que los proponen para participar en la competencia. Por lo tanto, ese debería ser un buen lugar para comenzar a realizar evaluaciones comparativas.

Si necesita algo listo para usar en Javascript, hay una implementación SHA-2 256 en JavaScript aquí
http://anmar.eu.org/projects/jss

En cuanto a por qué estas recomendaciones, SHA-2 256 aún no tiene ataques conocidos, pero fue diseñado antes de la reciente ola de ataques a las funciones hash. Por lo tanto, el Instituto Nacional de Ciencia y Tecnología está llevando a cabo una competencia para seleccionar un nuevo algoritmo “SHA-3”.

¿Puedes decir más sobre cómo usarás esta función hash? Eso podría ayudar a determinar si necesita una de estas funciones hash o si hay alternativas más simples.

Edite para responder al comentario: OK, en ese caso comience con SHA-2 256. Hay una implementación optimizada en openSSL; Los puntos de referencia de Berk D. Demir son un gran comienzo. Debería funcionar, excepto que la salida de la función es de 256 bits ahora. Si eso causa problemas de rendimiento, edite esta pregunta o haga un seguimiento.