Gli umani sono piuttosto terribili nel generare dati casuali. Chiedete a una persona di darvi un numero casuale compreso tra 1 e 20, otterrete molti più 7 e 17 rispetto ad altri numeri poiché percepiamo che questi numeri sono più "casuali". (Fonte: link )
I computer d'altra parte sono deterministici e in quanto tali non possono generare veri dati casuali da soli. Quindi vengono usati generatori pseudocasuali che sono equazioni leggermente complesse. Quelle equazioni hanno bisogno di un seme che dovrebbe essere in qualche modo casuale. Per generare questo seme ecco alcuni metodi:
- Alta risoluzione della misurazione del tempo (spesso cicli di clock) al momento dell'esecuzione
- Input dell'utente, spesso dai topi, le buone implementazioni utilizzano l'incapacità umana di controllare perfettamente i topi
- Generatore di casualità esterna, ci sono dispositivi esterni che utilizzano un processo chimico o fisico non deterministico o alcuni parametri ambientali che fluttuano molto per generare dati casuali.
Quindi per rispondere alle tue domande.
Does adding a random character to a pseudo-randomly generated password improve entropy significantly?
L'aggiunta di caratteri a una password anche quando non perfettamente distribuita uniformemente aumenta l'entropia. È significativo? Questo dipende in gran parte dalla lunghezza della password, vedi il commento di Anonymous Coward su questa risposta per una spiegazione.
Does this mean password generators, such as the one built into Keepass, suck?
Questo dipende completamente dal modo in cui il seme viene generato. Non so come lo fa Keepass ma ci sono sicuramente generatori di password che usano ottimi metodi di generazione dei semi (a volte combinazioni di metodi).
would it help for the user to manually enter a character or two in the generated password?
Supponendo che la password risultante rimanga della stessa lunghezza, dipende dal tuo punto di vista. Come ho detto, gli umani sono dei generatori di casualità molto cattivi e di conseguenza questo ridurrebbe teoricamente l'entropia della password. Tuttavia aggiunge ulteriori variabili al processo di generazione della password che, se correttamente implementato, potrebbe aumentare la forza della password contro gli attacchi diretti all'algoritmo pseudocasuale e al processo seme.
Modifica: rispondi al commento
How could a human adding 1 or 2 random characters (in a random position of the existing password) decrease entropy?
Suppongo che intendi sostituire 1 o 2 caratteri casuali come ho spiegato sopra, nel rispondere alla domanda per il titolo, aggiungere solo caratteri casuali (anche se non distribuiti uniformemente) aumenterà sempre l'entropia.
Quindi esaminiamo nuovamente il processo di generazione dei dati casuali:
- ottieni un seme
- usa il seme come input per il generatore pseudocasuale
- ottieni l'output dal generatore pseudocasuale (e usalo da qualche parte)
- usa l'output come prossimo input per il generatore pseudocasuale (questo è il più delle volte eseguito dietro le schermate del generatore pseudocasuale)
- ripeti dal passaggio 3
Un processo piuttosto semplice e dato che un computer è deterministico, le uniche incognite di alcuni attaccanti sono il seme e il numero di volte in cui il processo viene iterato prima che l'output venga utilizzato per la password specifica che stiamo cercando di violare.
Se si guarda a questo processo ci si potrebbe chiedere perché non sempre si calcoli un seme e lo si usi come dati casuali, alla fine il seme è ciò che rende il processo casuale. Allora, qual è il lavoro del generatore pseudocasuale? La sua funzione è duplice, in primo luogo consente di generare più dati casuali da un seme. Questo è importante perché i semi buoni sono costosi. Avanti e forse ancora più importante crea dati casuali uniformemente distribuiti. E questo è molto importante in quanto il seme (diciamo quando stiamo usando una misurazione del tempo) avrà spesso una struttura.
Ora, quando sostituisci 2 caratteri di questi dati casuali distribuiti uniformemente con dati casuali distribuiti in modo meno uniforme (ricorda i 7 e i 17), stai riducendo l'entropia della password. Tuttavia, ciò non significa necessariamente che la password è più difficile da interrompere, poiché crea uno sconosciuto in più al sistema accanto al numero en di iterazioni.
Tuttavia come side-note da un punto di vista teorico si potrebbero usare quei 2 caratteri di input dell'utente per aiutare a creare il seed che potrebbe aumentare l'entropia nel sistema, a seconda del precedente metodo seed e di cos'altro è usato per creare il seed .