Tengo una pregunta sobre el hashing de contraseñas. Esta no es una pregunta sobre el método MEJOR POSIBLE de hashing de contraseñas, sino más bien una pregunta más útil sobre qué es suficiente para hash una contraseña sin que las tablas estándar del arco iris sean un problema.
Déjame delinear un escenario hipotético. Tiene una aplicación que está diseñada sin sales únicas, y por cualquier motivo de diseño, sería una gran modificación cambiar la aplicación para que funcione con una sal única para cada usuario individual. Entonces, en lugar de reescribir una gran parte de la aplicación, estamos buscando una forma de hash de contraseñas que sea más segura que un SHA1 puro (o cualquier algoritmo de hash estándar), pero que no implique sales únicas.
Daré dos ejemplos de soluciones que no involucran sales únicas. Cada uno tiene la ventaja obvia de representar una tabla de arco iris para un SHA1 puro (o cualquier otro algoritmo de hashing estándar) inútil. Sin embargo, cada uno tiene la desventaja de poder crear una tabla de arco iris para esa estrategia en particular. Pero si lo piensas bien, usar una sal única tiene la misma vulnerabilidad, si tuvieras que apuntar a un solo usuario.
La idea más simple es tener un solo salt para todas las contraseñas codificadas. El segundo es llegar a un algoritmo más complicado, como dividir una contraseña en dos por un conjunto definido de reglas, hacer hashing en cada una, luego hashing la concatenación de los dos hashes parciales y almacenarlos. Esto se puede extender a cualquier algoritmo que desee.
¿Este método es suficiente para la mayoría de las aplicaciones? Obviamente, ninguno de los dos es tan seguro como una sal única para cada usuario, pero si estaba apuntando a un usuario específico, no parece ni más ni menos seguro si conoce la sal para ese usuario en particular.
¿Eso es correcto? ¿Y es una solución viable para algunos (o quizás la mayoría) de los casos?