Questa è più una questione filosofica.
Supponiamo che tu stia cercando di scegliere una buona password per un particolare servizio online, ad esempio il servizio di e-banking della tua banca. Ora la banca ha alcune restrizioni sulle password consentite: puoi solo utilizzare (lettere minuscole) lettere e (decimale) cifre e il la password può essere lunga fino a 6 caratteri . Quindi, qual è un "buon" modo per selezionare una password del genere?
Si potrebbe fare quanto segue (chiamare questo schema 1 ): selezionare casualmente 6 caratteri dall'insieme [a-z0-9] con probabilità uniforme. Questo schema ha lo svantaggio di poter produrre password "deboli" come quelle che contengono solo lettere o solo cifre (c'è una probabilità del 14,2% [1] che ciò accada).
Quindi ecco un'altra idea (chiama questo schema 2 ): seleziona in modo casuale (e uniforme) una lettera, una cifra e 4 caratteri dall'insieme [a-z0-9]. Quindi usa una permutazione casuale di questi 6 caratteri come password. Questo garantisce che la password abbia caratteri di entrambe le classi (lettere e cifre).
Quindi la domanda è: quale dei due schemi produce password "migliori"?
Da un lato, il secondo schema produce password che saranno probabilmente più resistenti ai semplici attacchi di forza bruta. D'altra parte, il primo schema consente rigorosamente più combinazioni rispetto al secondo: 2 ^ 31.0 [2] vs 2 ^ 30.8 [3]; infatti il set di password dello schema 1 è un superset di quelli dello schema 2.
Nota: sto osservando questo dal punto di vista della parte che genera la password e non la parte che imposta la politica della password.
[1] (26 ^ 6 + 10 ^ 6) / 36 ^ 6 = 0.142
[2] log2 (26 ^ 6) = 31.0
[3] log2 (36 ^ 6-26 ^ 6-10 ^ 6) = 30,8 cioè tutte le combinazioni di 6 caratteri, esclusi quelli con sole lettere (26 ^ 6) e quelli con solo cifre (un altro 10 ^ 6 )