Questo generatore di password è sicuro?

2

È richiesta l'entropia a 128 bit

link

Con tutti i nuovi browser (Chrome, Firefox, IE 11) utilizza crypto.getRandomValues che dovrebbe essere sicuro, ma con IE 10 (e versioni precedenti) utilizza l'input casuale del mouse dall'utente combinato con Math.random

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

Quanto è sicura la seconda parte?

    
posta user12480 19.03.2014 - 05:22
fonte

2 risposte

2

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.

    
risposta data 19.03.2014 - 10:05
fonte
1

Il secondo metodo si basa su questa libreria: link

È doloroso leggere quel codice, ma penso di poter confermare che è almeno abbastanza buono per il lavoro. Le parti importanti sono che vi è un ampio pool di entropia, il codice assicura che venga raccolta abbastanza entropia, la funzione di sbiancamento decifra decentemente l'entropia acquisita, il generatore casuale è imparziale e utilizza una parte sufficientemente grande del pool di entropia.

Di gran lunga la maggiore preoccupazione potenziale per quel sito sarebbe la mancanza di HTTPS, il che significa che il login in ogni caso dovrebbe essere considerato abbastanza buono per un sito di bassa sicurezza.

    
risposta data 19.03.2014 - 13:58
fonte

Leggi altre domande sui tag