¿Es seguro este generador de contraseñas?

2

Se requiere entropía de 128 bits

enlace

Con todos los navegadores nuevos (Chrome, Firefox, IE 11) usa crypto.getRandomValues que deberían ser seguros, pero con IE 10 (y versiones anteriores) usa entradas de mouse aleatorias del usuario combinadas con Math.random

$("html").on("mousemove", function(e) {
            var seed = [e.pageX, e.pageY, +new Date];
            PassPhraseGenerator.push(seed);

¿Qué tan segura es la segunda parte?

    
pregunta user12480 19.03.2014 - 05:22
fuente

2 respuestas

2

En sí mismo, debería ser bastante seguro como concepto, pero en general no se debe confiar en JavaScript para ningún tipo de seguridad. Es trivialmente fácil hacer inyecciones e intercepciones en cualquier código de JavaScript y hacer cálculos complejos en JavaScript puede desencadenar fácilmente el 'stop script' o cualquier otro control de seguridad del script del navegador, por lo que los desarrolladores tienden a reducir la seguridad tanto como sea posible o a romper francamente cualquier convención solo para que su 'página segura' pueda funcionar, lo que a su vez conduce a todo tipo de problemas.

Pero dejando eso a un lado, hay dos problemas potenciales que veo con esta implementación en particular:

1. La lista de palabras es demasiado pequeña: escoge 12 palabras al azar del grupo con solo 1626 palabras, lo que hace meras combinaciones posibles de ~ 7.42x10 ^ 29 suponiendo que el azar es verdaderamente aleatorio. Eso es bastante inferior a 128 bits de entropía (~ 3.4x10 ^ 38); de hecho, es casi 500 millones de veces menor, por lo que incluso con la suposición de una aleatoriedad real o el uso de las instalaciones de cifrado del navegador, se obtienen al menos 99 bits de entropía. Aumente la lista de palabras a ~ 8400 palabras o elija 17 palabras en lugar de 12 si apunta a 128 bits. (Ignore esta parte, se aplica solo a la generación de pases únicos).

2. Confiar en el usuario para generar una semilla suficientemente segura puede romper fácilmente cualquier seguridad. Los usuarios son, por definición, perezosos, y hacer que muevan el mouse puede terminar en un movimiento repetitivo de izquierda a derecha en un área pequeña (generalmente cerca del campo 'generar contraseña') que se puede aprovechar para reducir la probabilidad de elegir algunas de las combinaciones. al azar. Agregaría al menos un chequeo delta ( if(Math.abs(lastX - e.pageX) < 20 || Math.abs(lastY - e.pageY)) return; ...) para forzar a los usuarios a mover el mouse un poco más al azar. No estaría mal usar algunas de las estadísticas del navegador aparte de la nueva Fecha para agregarlas también a la semilla.

    
respondido por el BeagleEagle 19.03.2014 - 10:05
fuente
1

El segundo método se basa en esta biblioteca: enlace

Es un dolor leer ese código, pero creo que puedo confirmar que al menos es lo suficientemente bueno para el trabajo. Las partes importantes son que hay un grupo de entropía bastante grande, el código garantiza que se recoja suficiente entropía, la función de blanqueamiento codifica decentemente la entropía reunida, el generador aleatorio es imparcial y utiliza una parte suficientemente grande del grupo de entropía. / p>

Por mucho, la mayor preocupación potencial para ese sitio sería la falta de HTTPS, lo que significa que, en cualquier caso, el inicio de sesión solo debe considerarse lo suficientemente bueno para un sitio de baja seguridad.

    
respondido por el aaaaaaaaaaaa 19.03.2014 - 13:58
fuente

Lea otras preguntas en las etiquetas