He creado un marcador de JavaScript que, entre otras cosas, base64 codifica mis contraseñas de texto sin formato combinadas con información del nombre de dominio del sitio. La idea es que la salida base64 sea significativamente más larga que su origen, y la información del dominio evita que la misma contraseña genere la misma salida si se reutiliza en un sitio diferente. También puede agregar esto con su propia clave personal, si varias personas utilizan el mismo algoritmo. Mientras tenga resultados predecibles, la idea es que podría usarla para hacer que las contraseñas legibles por humanos sean de una computadora fuerte generada por una. No veo ningún inconveniente en hacer esto, pero no soy un experto en seguridad y tengo la sensación de que no estoy viendo algo que pueda debilitar la seguridad inherente de una buena contraseña. Soy yo Si es así, ¿qué es y se puede arreglar?
Para su consideración, aquí hay una versión simplificada del script que estoy usando que muestra la idea básica:
(function() {
var pwelements = document.querySelectorAll("input[type='password']");
for (var i in pwelements) {
var pw = btoa(pwelements[i].value + window.location.hostname.replace('www.', '').substring(0, 10));
pwelements[i].value = pw;
}
return false;
})();
El uso de este script con la palabra "prueba" en enlace toma el tiempo de crack estimado de 1 segundo a "10000+ Siglos" ( o 98 siglos si usa una super computadora). Obviamente, este tipo de verificadores de contraseñas tienen fallas inherentes, pero sirven para ilustrar la diferencia que espero lograr con esto. Los resultados codificados de "prueba" pasado a través de este algoritmo son "dGVzdHBhc3N3b3JkLms=". Las contraseñas reales suelen producir resultados mucho más largos.
Si este tipo de cosas es una buena idea, ¿es posible crear una versión de este que pueda ser completamente de código abierto pero que no comprometa la seguridad de las contraseñas al usarlo? En este momento, todo esto es reversible si conoce el algoritmo y conoce la salida, lo único que se puede guardar es que si se usó sal específica del usuario, entonces, una vez que haya un hash en el servidor, no debería ser posible ejecutar un ataque a través de este algoritmo para atacar. Forzar el uso de la versión de texto plano (sin saber la sal) ... creo? Creo que la sal serviría como una forma de autenticación de dos factores, pero no estoy seguro de cuán efectivo sería esto. Que yo sepa, al menos no es peor que usar la contraseña original normalmente.
Estoy convencido de que hay una razón por la que es una mala idea, pero no sé qué es.