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.