¿Por qué se marca esta contraseña aleatoria diciendo que es demasiado simplista / sistemática?

37

¿Cómo se M1uG*xgRCthKWwjIjWc*010iSthY9bucdetecta la cadena aleatoria como demasiado simplista / sistemática para una contraseña de acuerdo con passwd y cracklib-check ? Pruébelo en su máquina y vea

echo "M1uG*xgRCthKWwjIjWc*010iSthY9buc" | cracklib-check

Tenga en cuenta que esta no es mi contraseña, sino otra cadena generada aleatoriamente desde el mismo generador de contraseñas aleatorias que produce el mismo resultado.

BeowulfNode42
fuente
3
DiceM1uG*xgRCthKWwjIjWc*010iSthY9buc: OK
rici
Resulta que solo algunas versiones detectan esto como simple. Vea la respuesta de slm para más información sobre esto.
BeowulfNode42
¿Por qué no usas /dev/urandompara generar una contraseña?
devnull
@devnull: no estoy seguro de lo que tenía en mente, pero agregó 2 métodos a mi A sobre cómo generar contraseñas.
slm

Respuestas:

59

Dado que cracklib es de código abierto, la respuesta se puede encontrar en el código fuente .

"Demasiado simplista / sistemático" significa que hay demasiados caracteres precedidos por uno de sus vecinos alfabéticos. Por lo tanto, "ab" o "ba" se consideran malos, pero "ac" o "ca" están bien ya que se omite b.

Antes de este parche del 02-03-2010 , permite como máximo cuatro caracteres que exhiban este rasgo. Por ejemplo, "bar12345" fallaría, porque los caracteres "a", "2", "3", "4" y "5" son vecinos alfabéticos de los caracteres anteriores.

slm descubrió en su respuesta que M1uG*xgRCthKWwjIjWc*010iSestaba bien, mientras M1uG*xgRCthKWwjIjWc*010iStque no lo está. Analicemos Estos son los caracteres que cracklib-check cree que son indicaciones de una contraseña sistemática:

M1uG*xgRCthKWwjIjWc*010iS
               ^^    ^^

que está por debajo del máximo de cuatro, pero sumando t:

M1uG*xgRCthKWwjIjWc*010iSt
               ^^    ^^  ^

lo empuja por encima del límite, ya que T sigue a S (parece que la prueba no distingue entre mayúsculas y minúsculas).

El parche cambia el límite máximo, por lo que depende de la longitud total de la contraseña, para evitar falsos positivos como este.

Waxwing
fuente
1
¿No debería 010 contar como 3 ya? Gran respuesta sin embargo.
John V.
1
Gran respuesta y gracias por proporcionar el código fuente exacto diff. Por cierto, ¿hay alguna razón por la que este archivo se llame fascista.c?
Laurent
@ this.lau_ - Supongo: en.wikipedia.org/wiki/Fascism
slm
Algo gracioso hablar de "más pequeño" y "más grande" con respecto a los personajes, ¿no? Bueno, aunque sé que se trata de valores ASCII, puede que no sea demasiado obvio. - Entonces, ¿por qué no explicarlo de una manera más simplista? Ningún personaje debe ser seguido por su vecino directo o predecesor. Por lo tanto, ni "ab" ni "ba" están permitidos, pero "ac" o "ca" lo harían ya que se omite b.
syntaxerror
¿Hay alguna razón por la que no puede ser uno más pequeño o más alto pero puede ser el mismo ( Ww)?
Jeroen Vannevel
31

En Fedora 19

Cuando lo ejecuto me sale bien. Estoy en Fedora 19.

$ echo 'M1uG*xgRCthKWwjIjWc*010iSthY9buc' | cracklib-check
M1uG*xgRCthKWwjIjWc*010iSthY9buc: OK

Aquí está la información de la versión:

$ rpm -qfi /usr/sbin/cracklib-check | grep -E "Version|Release"
Version     : 2.8.22
Release     : 3.fc19

NOTA: También lo probaría con comillas simples en lugar de dobles qutoes, ya que se trata de *que se estén expandiendo de manera extraña en usted.

CentOS 5 y 6

Probar su ejemplo en CentOS 6 estuvo bien, obtuve un OK, pero falló como lo describió en CentOS 5.9.

$ echo 'M1uG*xgRCthKWwjIjWc*010iSthY9buc' | cracklib-check
M1uG*xgRCthKWwjIjWc*010iSthY9buc: it is too simplistic/systematic

Información de la versión:

$ rpm -qfi /usr/sbin/cracklib-check | grep -E "Version|Release"
Version     : 2.8.9                  
Release     : 3.3

¿Un insecto?

En lo que te has topado parece ser un error. Si toma su cadena y ejecuta más y más de su cadena cracklib-check, notará que cuando llegue al 26 ° carácter, comenzará a fallar:

# 25    
$ cracklib-check <<<"M1uG*xgRCthKWwjIjWc*010iS"
M1uG*xgRCthKWwjIjWc*010iS: OK

# 26
$ cracklib-check <<<"M1uG*xgRCthKWwjIjWc*010iSt"
M1uG*xgRCthKWwjIjWc*010iSt: it is too simplistic/systematic

Profundizando en esto si cambio el último personaje de a tpara decir vque continúa funcionando.

$ cracklib-check <<<"M1uG*xgRCthKWwjIjWc*010iSvhY9b"
M1uG*xgRCthKWwjIjWc*010iSvhY9b: OK

Entonces parece que en la versión de cracklib-checkse está colgando en la subcadena Sth.

Definitivamente hay algo extraño en los trozos de la cadena que ha proporcionado. Si tomo la pieza del extremo de la cola y omito la parte frontal, también puedo hacer que esta parte falle.

$ cracklib-check <<<"jIjc*010Sth"
jIjc*010Sth: it is too simplistic/systematic

¡Esa misma cadena también causa problemas en Fedora 19 y CentOS 6!

ACTUALIZACIÓN # 1

Basado en la muy buena investigación de @ waxwing , ahora sabemos que la heurística utilizada se disparó si> 4 caracteres eran demasiado adyacentes entre sí. Se introdujo un parche que cambió esta heurística para que se tuviera en cuenta la longitud total de la contraseña considerada para eliminar estos falsos positivos.

Conclusiones?

Según algunas de mis pruebas limitadas, parece que hay algunas heurísticas extrañas en juego aquí. Ciertas cadenas que aparentemente estarían bien lo están tropezando.

Si está tratando de codificar esto, sugeriría concluir la generación y evaluación de una contraseña y luego salir del ciclo una vez que se ha generado una contraseña que apacigua cracklib-check.

O al menos sugeriría actualizar a una versión más nueva que incluya las soluciones que @maxwing menciona en su respuesta.

Alternativas de contraseña de generación

pwgen

También agregaré que generalmente uso pwgenpara generar contraseñas. Eso podría ser útil para usted aquí también.

$ pwgen -1cny 32
iWu0iPh8aena9raSoh{v6me)eh:eu6Ei
urandom

También puede utilizar un poco de magia con secuencias de comandos tr, /dev/urandomy foldpara obtener una contraseña aleatoria de muy alta calidad.

$ tr -dc '[:graph:]' </dev/urandom | fold -w 32 | head -n 1
;>$7\`Hl$=zn}R.b3h/uf7mY54xp}zSF

El foldcomando puede controlar la longitud. Como alternativa, también puedes hacer esto:

$ echo $(tr -dc '[:graph:]' </dev/urandom | head -c 32)
/_U>s[#_eLKAl(mrE@oo%X~/pcg$6-kr
slm
fuente
Lo estaba ejecutando en CentOS 5.5 con cracklib-2.8.9-3.1.src.rpm. En cualquier caso, ¿cómo puede una cadena aleatoria tan larga ser demasiado simple?
BeowulfNode42
@ BeowulfNode42 - no lo es. Parece que has encontrado un error, o al menos una limitación de la implementación.
slm
Extraño. Sin embargo, una cadena como Tm7U:n=@*+4$*gf$6hOngEHJ;mnh$+R6está perfectamente bien en la misma máquina.
BeowulfNode42
1
Las comillas dobles hacen impedir la expansión pegote. Las comillas simples son todavía una mejor idea de que, en caso de que la cadena contiene signos de dólar, acentos abiertos, etc.
Dennis
2
"Se introdujo un parche ..." También se debe tener en cuenta que el parche en cuestión no es de ninguna manera reciente (a diferencia de lo que pueda
parecer