Sí, los requisitos de complejidad de las contraseñas reducen el espacio de búsqueda y, por lo tanto, facilitan la adivinación de las contraseñas más sencillas , pero al mismo tiempo puede también aumenta la seguridad . ¿Por qué? Para comprender esto, es necesario comprender que no existe una contraseña segura (o insegura). Una contraseña solo es segura / insegura en relación con nuestras suposiciones en el método de ataque del atacante.
Para entender esto, considera el siguiente ejemplo. Si elige al azar una cadena de letras de 0 <=
length < n
de un alfabeto de tamaño d
, hay exactamente
d^0 + d^1 + ... + d^{n-1} = (d^n - 1)/(d-1)
posibilidades. Si ha seleccionado una cadena de longitud l < n
, y el atacante elige una cadena de longitud n
uniformemente al azar , con probabilidad (d-1)/(d^n - 1)
elegirá su contraseña. Tenga en cuenta que esta probabilidad no depende de la longitud de su contraseña, sino de la longitud máxima que el atacante considera.
Por lo tanto, tenemos una aparente paradoja: cuantas más contraseñas compruebe el atacante, más segura estará tu contraseña . Por supuesto, eso es una tontería. De hecho, si un atacante intenta descifrar su contraseña, no solo elegirá una al azar, sino que las revisará todas en una secuencia.
Entonces, la forma correcta de solicitar la seguridad de su contraseña es: ¿Qué tan probable es que un atacante adivine su contraseña dentro de las conjeturas k?
Si asume que su atacante pasa por todas las contraseñas en orden lexicográfico, la contraseña zzz...z
es objetivamente las contraseñas más seguras, y debe ser utilizada por todos los usuarios. Esto es ridículo, pero tan ridículo como nuestra suposición.
Un enfoque más razonable es asumir que el atacante recorre todas las cadenas de longitud < n
en un orden aleatorio. Con una probabilidad de
1 - (N-1)/N * (N-2)/(N-1) * ... * (N-k)/(N-k+1) = 1 - (N-k)/N
habrá encontrado su contraseña (asumiendo que el atacante sigue adivinando incluso si la ha encontrado), donde
N = (d^n - 1)/(d-1)
es el número de todas las cadenas de longitud < n
.
Nuevamente, este número no depende en absoluto de la longitud l
de su contraseña. Por lo tanto, la contraseña vacía es tan segura como cualquier otra contraseña .
Una vez más, esto es ridículo: el atacante probablemente no será tan estúpido como para probar todas las posibilidades de una manera aleatoria uniforme. Probablemente pasará por un pequeño subconjunto de casos especiales primero (contraseña de longitud pequeña, contraseñas de la misma letra, ...) y luego probará el resto de ellos en un orden aleatorio uniforme.
Para resumir: 'La seguridad de una contraseña' es solo una cantidad subjetiva que le asignas, según tus creencias sobre el atacante. Dado que la mayoría de los usuarios creen que los atacantes deben comprobar primero las "contraseñas simples", éstas son subjetivamente inseguras. Tan inseguro de hecho, que es razonable disminuir un poco el espacio de búsqueda al excluir estas contraseñas.