¿Las implicaciones de seguridad de usar un algoritmo para alargar y eliminar contraseñas antes de usarlas?

1

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.

    
pregunta JNF 28.07.2016 - 08:24
fuente

1 respuesta

1

Yo diría que no agrega mucho. Base64 es solo una codificación, no agrega ninguna entropía a su contraseña.

También es rápido de calcular, por lo que no ralentizará un ataque de fuerza bruta.

Lo único que puede evitar es un ataque contra una mesa de arco iris universal que no tomó en cuenta la base64, pero tal vez alguna mesa de arco iris por ahí tuvo esto en cuenta. No sería más complicado calcularlo como una tabla de arco iris estándar. La única manera buena de prevenir un ataque a la mesa del arco iris es usar sal.

Además, siempre asuma que la sal es conocida. El propósito es evitar que las tablas del arco iris no ataquen la fuerza bruta. La mejor manera de prevenir ataques de fuerza bruta es usar un proceso de hashing lento como bcrypt.

    
respondido por el Matthieu 28.07.2016 - 09:20
fuente

Lea otras preguntas en las etiquetas