Panel de la demostración - sitio intencionalmente vulnerable con fines educativos (Unidad 4, Seguridad Informática - UNPAZ)
Centro de control MODO: VULNERABLE

Almacenamiento de contraseñas

A02 - Fallas criptográficas. Nunca se guarda la contraseña en texto plano; pero cómo se hashea importa muchísimo.

Hashes guardados de cada usuario

UsuarioMD5 sin salt (inseguro)bcrypt con salt (seguro)
Profe (victima) 6cae5deced2f4f510040013690d96267 $2a$10$RQR9kGrw5jX3//fGGqnzGOKwmJrfIpeDp0CteL0fpNy13MUlMY7Z6
Admin 5f4dcc3b5aa765d61d8327deb882cf99 $2a$10$afFFWYmqx01IZ8icLGZQeurC4w6Z6UzOza53cSpbdCyhd2EeFgfaW
Carla 5f4dcc3b5aa765d61d8327deb882cf99 $2a$10$6Ynb0T9KcEanjl1bsO9FkeGtJhYZdnLsx.i4M2Kc0DPX8uqzl7Zw6

Fijate que dos usuarios con la misma contraseña tienen el mismo MD5 (se nota el patrón), pero distinto bcrypt gracias al salt aleatorio por usuario.

Diccionario / rainbow table

Precalcular el MD5 de contraseñas comunes y buscar coincidencias es instantáneo:

Contraseña comúnMD5
123456e10adc3949ba59abbe56e057f20f883e
password5f4dcc3b5aa765d61d8327deb882cf99
primavera6cae5deced2f4f510040013690d96267
admin21232f297a57a5a743894a0e4a801fc3
qwertyd8578edf8458ce06fbc5bb76a58c5ca4

Por qué bcrypt: es lento a propósito (factor de costo) y usa salt por usuario, lo que vuelve inútiles las rainbow tables y carísimos los ataques de diccionario.