Matías, miembro de este staff, nos ha hecho el favor de crear este enunciado ya que conoce a la perfección el tema.
Solución:
MD5 es un hash unidireccional algoritmo. Hash unidireccional Los algoritmos se utilizan a menudo en criptografía, ya que tienen la propiedad (por diseño) de que es difícil encontrar la entrada que produjo un valor hash específico. Específicamente, es difícil hacer dos entradas diferentes que proporcionen el mismo hash unidireccional. Esos se usan a menudo como una forma de mostrar que una cantidad de datos no se ha alterado intencionalmente desde que se produjo el código hash. Como el MD5 es un hash unidireccional algoritmo el énfasis está en la seguridad sobre la velocidad. Desafortunadamente, MD5 ahora se considera inseguro.
CRC32 está diseñado para detectar cambios accidentales en los datos y se usa comúnmente en redes y dispositivos de almacenamiento. El propósito de este algoritmo no es proteger contra cambios intencionales, sino detectar accidentes como errores de red y errores de escritura en disco, etc. El énfasis de este algoritmo está más en la velocidad que en la seguridad.
Del artículo de Wikipedia sobre MD5 (énfasis mío):
MD5 es un ampliamente utilizado función hash criptográfica
Ahora CRC32:
CRC es un código de detección de errores
Entonces, como puede ver, CRC32 no es un algoritmo hash. Eso significa que no debe usarlo para hashing, porque no fue creado para eso.
Y creo que no tiene mucho sentido hablar de uso común, porque se usan algoritmos similares para diferentes propósitos, cada uno con requisitos significativamente diferentes. No existe un único algoritmo que sea mejor para el uso común; en su lugar, debe elegir el algoritmo más adecuado para su uso específico.
Depende de tus objetivos. Estos son algunos ejemplos de lo que se puede hacer con CRC32 frente a MD5:
Detección de archivos duplicados
Si desea verificar si dos archivos son iguales, la suma de verificación CRC32 es el camino a seguir porque es más rápido que MD5. Pero tenga cuidado: CRC solo le dice de manera confiable si los binarios son diferentes; no te dice si son idénticos. Si obtiene hashes diferentes para dos archivos, no pueden ser el mismo archivo, por lo que puede rechazarlos como duplicados muy rápidamente.
No importa cuál sea tu keys son, la suma de comprobación CRC32 será uno de 2^32 valores diferentes. Suponiendo archivos de muestra aleatorios, la probabilidad de colisión entre los valores hash de dos archivos dados es 1/2^32. La probabilidad de colisiones entre cualquiera de N archivos dados es (N – 1) / 2^32.
Detección de software malicioso
Si la seguridad es un problema, como descargar un archivo y comparar el hash de la fuente con el suyo para ver si los archivos binarios no están dañados, entonces CRC es una mala opción. Esto se debe a que los atacantes pueden crear malware que tendrá la misma suma de comprobación de CRC. En este caso, un resumen MD5 es más seguro: CRC no se creó por motivos de seguridad. Es mucho más probable que dos binarios diferentes tengan la misma suma de verificación CRC que el mismo resumen MD5.
Protección de contraseñas para la autenticación de usuarios
El cifrado síncrono (unidireccional) suele ser más fácil, rápido y seguro que el cifrado asíncrono (bidireccional), por lo que es un método común para almacenar contraseñas. Básicamente, la contraseña se combinará con otros datos (sales), luego se realizará el hash en todos estos datos combinados. Las sales aleatorias reducen en gran medida las posibilidades de que dos contraseñas sean iguales. De forma predeterminada, la misma contraseña tendrá el mismo hash para la mayoría de los algoritmos, por lo que debe agregar su propia aleatoriedad. Por supuesto, la sal debe guardarse externamente.
Para iniciar sesión en un usuario, solo toma la información que le brindan cuando inicia sesión. Utiliza su nombre de usuario para obtener su sal de una base de datos. Luego combina esta sal con la contraseña del usuario para obtener un nuevo hash. Si coincide con el de la base de datos, entonces su inicio de sesión es exitoso. Dado que está almacenando estas contraseñas, deben ser MUY seguras, lo que significa que una suma de verificación CRC está fuera de discusión.
Los resúmenes criptográficos son más costosos de calcular que las sumas de verificación CRC. Además, mejores hashes como sha256 son más seguros, pero más lentos para el hashing y ocupan más espacio en la base de datos (sus hashes son más largos).
Si para ti ha sido provechoso este post, te agradeceríamos que lo compartas con más juniors y nos ayudes a extender esta información.