La seguridad de la contraseña de 'programación' es realmente difícil: lo que quieres es un número que te diga qué tan difícil es para un atacante adivinar la contraseña.
Por lo general, una buena aproximación es observar la cantidad de contraseñas posibles que resultaría del uso del mismo algoritmo de generación, operando bajo el supuesto de que el atacante conoce el algoritmo de generación y que la contraseña se selecciona aleatoriamente entre todos los resultados posibles de este algoritmo.
Esto es fácil de obtener, si define el algoritmo usted mismo y le da al usuario una contraseña fija y generada. Luego puede hacer un cálculo a lo largo de las líneas de "10 caracteres seleccionados al azar de un conjunto de 62 caracteres" = 839299365868340224 posibilidades ~ 59.5 bits de entropía.
Desafortunadamente, muchos sitios permiten que el usuario elija la contraseña y luego las cosas se ponen difíciles. Ahora ni tú ni el atacante conocen el algoritmo de generación. El atacante tiene que conformarse con la siguiente cosa más inteligente: probar un par de algoritmos razonables y todas las contraseñas generadas para cada algoritmo (omitir duplicados). Con sensatez, el atacante comenzaría con algoritmos comunes (como "nombre de un miembro de la familia") y / o aquellos que generan solo un pequeño número de contraseñas posibles ("PIN de 4 dígitos").
Ahora, para obtener una comprensión numérica de la seguridad de la contraseña resultante, no puede simplemente mirar el número total de contraseñas posibles, sino que también debe tener en cuenta el orden en que un atacante las intentaría. Algo a lo largo del líneas de un promedio ponderado del número de contraseñas por algoritmo y la probabilidad de que se use ese algoritmo.
Hay un concepto estrechamente relacionado llamado complejidad de Kolmogorov: describe el contenido de información de una cadena como la longitud del programa más corto (en algún lenguaje de programación genérico) que puede recrear la cadena. Ejemplo: "aaaaa" y "abcdefghijklmnopqrstuvwxyz" tienen aproximadamente la misma complejidad de 3 si nuestro idioma permite decir cosas como "5 * a" y "a-z", mientras que "oabuf" tendría una complejidad de 5.
Un atacante inteligente intentaría contraseñas para aumentar la complejidad de Kolmogorov, por lo que estaría en casa si pudiera calcularlo. Desafortunadamente, no puedes .
En general, el mejor enfoque para la seguridad de contraseñas es brindar consejos útiles a los usuarios sobre cómo elegir una buena contraseña, consulte este estudio . Este documento recomienda el método de frase de contraseña: tome una oración y use las primeras letras de todas las palabras. Esto da buena memorabilidad y seguridad.
Otro buen método es el método XKCD , también conocido como elemento básico de batería de caballo correcto (el cómic también ofrece una buena ilustración de mis comentarios sobre múltiples algoritmos arriba).
Dado que no puede calcular razonablemente la seguridad de la contraseña sin conocer el algoritmo, y generalmente no puede conocer el algoritmo, sugeriría abstenerse de tratar de hacerlo. Tener un medidor de fuerza de contraseña que no funcione enviará las señales equivocadas a sus usuarios (por ejemplo, la mayoría de los medidores de fuerza de contraseña subestiman enormemente la fuerza de las contraseñas de XKCD). En su lugar:
- Dar consejos sobre cómo elegir una buena contraseña
- No le dificulte el uso de una buena contraseña (por ejemplo, al tener límites arbitrarios en la longitud y el conjunto de caracteres; de todos modos, va a marcar la contraseña, ¿no?)
- Use cracklib en el lado del servidor para eliminar las contraseñas catastróficamente malas.