Hola tios!
Antes de iniciar la propuesta que pretendo dialogar, hago un repositorio de historia sobre lo que yo tengo entendido, primeramente hace unos dias atras, yo y una amiga (bien maja la xhica por cierto

) navegando por la red descubrimos un website que guardaba contraseñas del usuario en cookies tipo hashes md5. Ella me cuestiono que como yo sabia que ese metodo de encriptacion iba por MD5, le expuse que las hashes md5 son literalmente distintas eh inclusive las hashes SHA son considerablemente distintas en cuanto a su demostracion visual refiere, conozco que utilizando estos tipos de mecanismos no ayudan mucho y muchas personas de hecho ya contienen una linea de expresion de tablas para todas estas funciones de hashes, igualmente podrian ser mostradas a los usuarios en modo texto, ahora expongo la idea donde quiero llegar;
Si obtuvieramos la facilidad de utilizar funciones hash con claves en vez de las tipicas sin claves, esto haria el proceso mas dificil de resolver para un atacante, aunque suene mas simple de lo que verdaderamente es pero piensenlo primeramente si usaran una clave constante para todos los usuarios, entonces seria efectiva solo si el usuario no pudiese encontrar el hash de cualquier caracter mostrado, y ya no pudiendo podran optar por tratar todas las claves que dara como resolucion el resultado de la hash, cuando esten persiguiendo la contraseña actual, y asi el cracker tendria tu clave como sea, y solo habra perdido un minimo tiempo para obtener la clave, y desde este punto de vista se decide que es una funcion hash sin clave... pero si consideramos hacer algo que dependa en el chequeo de nombre de usuario, si tu metodo de construir una clave de usuario esta comprometida, podria nuevamente ser un hash sin clave nuevamente.. Y he aqui que simplemente tendras un hash guardado, y simplemente se genera una clave generica que no depende de nada para cada usuario y ya asi sea guardada, se puede entonces asumir que si algun cracker obtiene las hashes, el/ella tambien tendra la lista de claves, entonces la unica solucion a su problema de tener todas estas claves, es que tambien tenga que el usuario tenga 2 contraseñas, y 2 hashes guardadas, la primera hash sera la primera contraseña que utilizara la segunda contraseña como clave, y dejamos la segunda hash hecha en reverso.
Ahora probablemente este no sea el mejor metodo, a como expuse solo se me ha ocurrido esta ideologia en mi cabeza, pero luego tambien pense que si se procede asi se generaran enormes hashes para evitar colisiones. pero esa es la idea central de guardar 2 hashes, no estoy segura si esto convertiria todo en mas seguro o mas propenso al cracker, pero sea cual sea el caso se debera tener una hash enorme para evitar colisiones.
Pero son solo mis ideas, si alguien quiere exponer mejores seria muy apreciado de mi parte.
Nota: Todo este ideal de crear hashes con claves, viene del conocimiento de saber que las funciones hashes en estos dias son tan identificables incluso visualmente. Y como existen tan pocas, es mas facil para las personas tener expresiones en tablas para las mas seguras, mientras las menos seguras son mas faciles de crackear, se que me captais.. Se que las expresiones en las tablas no contienen todos los valores de las hashes, pero las mas comunes, especialmente las relacionadas con contraseñas no pueden defenderse de esto, estoy conversando sobre aplicar seguridad no precisamente obligar a los usuarios a utilizar complejas contraseñas para todo, es lo que se que podemos hacer como programadores libres, asi no habra necesidad de obligar a los usuarios a usar contraseñas de mas de 6 digitos mezclados entre numeros y caracteres.