In se stesso dovrebbe essere abbastanza sicuro come concetto, ma in generale non si dovrebbe fare affidamento su JavaScript per qualsiasi tipo di sicurezza. È banalmente facile fare iniezioni e intercettazioni su qualsiasi codice JavaScript e fare matematica complessa in JavaScript può facilmente attivare lo 'script di stop' o qualsiasi altro controllo di script di script del browser in modo che gli sviluppatori tendano a ridurre il più possibile la sicurezza o addirittura a rompere qualsiasi convenzione solo così la loro 'pagina sicura' può funzionare - che a sua volta porta a tutti i tipi di problemi.
Ma mettendo da parte questo, ci sono due potenziali problemi che vedo con questa particolare implementazione:
1. L'elenco delle parole è troppo piccolo: seleziona a caso 12 parole fuori dal pool con solo 1626 parole che rendono semplici ~ 7.42x10 ^ 29 combinazioni possibili assumendo che il random sia veramente casuale. Questo è abbastanza inferiore a 128 bit di entropia (~ 3.4x10 ^ 38) - in realtà quasi mezzo miliardo di volte inferiore, quindi anche con l'assunzione di casualità reale o utilizzando le strutture crittografiche del browser si ottengono al massimo 99 bit di entropia. Aumentare l'elenco di parole a ~ 8400 parole o scegliere 17 parole anziché 12 se si punta a 128 bit.
(Ignora questa parte, si applica solo alla generazione di passaggi univoci.)
2. Affidarsi all'utente per generare seme sufficientemente sicuro può facilmente rompere qualsiasi sicurezza. Gli utenti sono per definizione pigri e farli muovere il mouse può finire in ripetuti movimenti left-right su una piccola area (di solito vicino al campo 'generate password') che può essere sfruttato per ridurre la probabilità di scegliere alcune delle combinazioni a caso. Aggiungerei almeno un controllo delta ( if(Math.abs(lastX - e.pageX) < 20 || Math.abs(lastY - e.pageY)) return;
...) per costringere gli utenti a spostare il mouse un po 'più a caso. Non sarebbe male usare alcune delle statistiche del browser oltre alla nuova data da aggiungere al seme.