Se ha dejado otra pregunta sobre el sitio web de salting-and-hashing-for-web en el felpudo de StackExchange de Seguridad de la Información.
El enfoque que se menciona a menudo para el manejo de la contraseña del sitio web es usar un lenguaje del lado del servidor para emplear un algoritmo de hashing adecuado (ampliado o diseñado de otra manera para consumir demasiado los recursos informáticos), combinar con un salt al azar, y listo: a contraseña almacenada de forma segura. Estoy simplificando demasiado, por supuesto.
Si bien esto evita que las tablas de base de datos robadas contengan frases de contraseña potencialmente reutilizadas, todavía significa que la contraseña debe enviarse al servidor para que se haga hash, cuyo resultado se compara con el hash almacenado. SSL protege esto durante el transporte, naturalmente, pero todavía hay una ventana de la frase de contraseña de texto simple para que se realice el hash.
¿Qué pasa si el hashing tuvo lugar en el lado del cliente? El usuario seguiría usando una frase de contraseña que no coincide con el resultado final almacenado, y un individuo experto en tecnología que omita el JavaScript y envíe un hash directamente no lograría nada. Además, el hashing del lado del servidor podría implementarse para clientes que carecen de JavaScript. Al hacer esto, la carga del servidor se reduce y un servidor comprimido de forma encubierta aún no obtendría ninguna contraseña a medida que el sitio continuaba ejecutándose.
TL; DR: El único problema que puedo ver es que no se puede confiar en la asignación al azar del cliente para la sal. ¿Es esta la única razón por la que este enfoque no se recomienda más ampliamente?