Sé que MD5 es el algoritmo de hashing más vulnerable
Bueno, técnicamente (somos técnicos por aquí) hay peores algoritmos que MD5.
y particularmente vulnerable a las colisiones
Sí, la gente puede crear un hash deseado con un texto plano diferente. Es probable que esto no ocurra al azar, pero podría ocurrir de manera maliciosa.
Pero la vulnerabilidad de colisión no es muy arriesgada y alguien podría usar eso como una ventaja, pero eso es por pura suerte.
No pura suerte. Existen técnicas para encontrar un texto simple que produce un MD5 deseado. Ese es un buen tema para una pregunta diferente.
Bien, digamos que almaceno contraseñas utilizando MD5.
Auch. La razón principal por la que no debería usar MD5 es porque se trata de un hash de propósito general (rápido) .
Debería utilizar un Hash de contraseña (lento) como
-
Se suele recomendar BCrypt , pero asegúrese de ejecutar un hash SHA-2 rápido en los datos de entrada, por lo que BCrypt no truncará las contraseñas súper largas
- PBKDF2 pero eso es menos resistente a GPU porque tiene menos requisitos de memoria.
- SCrypt es mejor que BCrypt si tiene un factor de trabajo suficientemente alto. De lo contrario es peor contra las GPUs. (de nuevo, debido a requisitos de memoria más altos o más bajos)
- El ganador de la Competición de hash de contraseñas puede ser incluso mejor que el mencionado anteriormente, pero aún no ha superado la prueba del tiempo, por lo que No lo uses todavía. Se llama Argon2 y tiene configuraciones de Factor de trabajo separadas para el tiempo de CPU y la carga de memoria. (bonito!)
- Se puede usar SHA-2 repetitivo en lugar de PBKDF2 (aún no es resistente a GPU), pero esto es más difícil de implementar la repetición de manera eficiente (es decir, para ser resistente a la fuerza bruta) porque SHA-2 es en realidad un Propósito General (Rápido ) Hash.
La mayoría de estas opciones generan sal aleatoria de forma predeterminada, ¡pero debes verificar si este es el caso!
Es mejor incluir un poco de Pepper (~ 72 bits de entropía) antes de la Contraseña antes del hash. Pepper puede ser el mismo para todos sus usuarios, pero debe almacenarse en un archivo fuera de la base de datos para que no se pueda encontrar ese componente a través de Inyección SQL.
Asegúrese de que su factor de trabajo requiera aproximadamente 100 ms (con la protección DoS adecuada) en su hardware de destino (sabiendo que los atacantes usarán un hardware más rápido para la fuerza bruta)
Por supuesto, ninguna cantidad de hash protegerá a password
s débil, así que incluya los requisitos de seguridad de la contraseña.
vulnerabilidad de colisión ... ¿hay alguna forma en que el atacante pueda usar esto como una ventaja?
En el contexto del almacenamiento de hash de contraseñas, esto probablemente no ayude al atacante.