Supponiamo che io usi MT19937 per scegliere parole casuali da (ad esempio) l'elenco di parole Diceware . So che MT19937 non è considerato un PRNG crittograficamente sicuro, ma Wikipedia suggerisce che la debolezza è piuttosto poco interessante per questo scopo:
The algorithm in its native form is not cryptographically secure. The reason is that observing a sufficient number of iterations (624 in the case of MT19937, since this is the size of the state vector from which future iterations are produced) allows one to predict all future iterations.
Dal momento che sembra piuttosto improbabile che io abbia bisogno di qualcosa come molte iterazioni per generare una passphrase strong, non vedo come un utente malintenzionato potrebbe sfruttare questa debolezza, supponendo che la mia password sia protetta in modo sicuro e salata agli standard del settore (ad esempio PBKDF2 con 10k + round e un unico sale per account). Sembra che questo sia considerato solo un punto debole perché rende MT19937 inadatto per l'uso in protocolli crittografici di lunga durata e in altre situazioni in cui un utente malintenzionato potrebbe osservare plausibilmente molte iterazioni.
Poiché MT19937 ha un periodo molto più lungo del numero di passphrase possibili, intuitivamente sembra che dovrebbe essere sicuro per questo tipo di utilizzo. Ma non mi piace fare affidamento sull'intuizione.
La mia ingenua stima dell'entropia della passphrase è log2 (N! / (N - r)!) per N = il numero di parole nel dizionario e r = il numero di parole nella passphrase (stiamo campionando senza sostituzione ; se si campiona con la sostituzione, i numeri aumentano un po ', ma non di molto, e non voglio una passphrase con parole ripetute comunque). Questo è allo stesso tempo abbastanza grande da essere poco pratico da attaccare e sostanzialmente più piccolo di 19937 bit per valori ragionevoli di N e r (ad esempio N = 2 ^ 12 e r = 5 ), quindi sembra sicuro. Ma non ho tenuto conto dell'uso di MT19937 perché non so come farlo.
Esistono attacchi noti o ragionevolmente probabili su passphrase generate, salate e hash in questo modo? In particolare, la conoscenza del PRNG utilizzata ci consente di ridurre significativamente l'entropia?