Esto es más una cuestión filosófica.
Suponga que está tratando de elegir una buena contraseña para un servicio en línea en particular, digamos el servicio de banca electrónica de su banco. Ahora el banco tiene algunas restricciones en las contraseñas que permite: usted puede solo usar (minúsculas) letras y (decimales) dígitos , y la contraseña puede tener hasta 6 caracteres . Entonces, ¿qué es una "buena" manera de seleccionar una contraseña de este tipo?
Uno podría hacer lo siguiente (llame a este esquema 1 ): seleccione al azar 6 caracteres del conjunto [a-z0-9] con probabilidad uniforme. Este esquema tiene la desventaja de que puede producir contraseñas "débiles", como aquellas que contienen solo letras o solo dígitos (hay un 14.2% [1] de probabilidades de que esto suceda).
Aquí hay otra idea (llame a este esquema 2 ): seleccione al azar (y de manera uniforme) una letra, un dígito y 4 caracteres del conjunto [a-z0-9]. Luego use una permutación aleatoria de estos 6 caracteres como contraseña. Esto garantiza que la contraseña tendrá caracteres de ambas clases (letras y dígitos).
Entonces, la pregunta es, ¿cuál de los dos esquemas produce "mejores" contraseñas?
Por un lado, el segundo esquema produce contraseñas que probablemente serán más resistentes a los ataques de fuerza bruta simples. Por otro lado, el primer esquema permite estrictamente más combinaciones que el segundo: 2 ^ 31.0 [2] vs 2 ^ 30.8 [3]; de hecho, el conjunto de contraseñas del esquema 1 es un superconjunto de los del esquema 2.
Nota: estoy viendo esto desde la perspectiva de la parte que genera la contraseña y no la parte que establece la política de contraseña.
[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, es decir, todas las combinaciones de 6 caracteres, excepto las que tienen solo letras (26 ^ 6) y las que tienen solo dígitos (otros 10 ^ 6 )