2011-08-23 9 views
7

¿Hay algún error en este comando para generar contraseñas?¿Este generador de contraseñas está sesgado?

head -c 8 /dev/random | uuencode -m - | sed -n '2s/=*$//;2p'

Después de generar un par de claves con ella, empecé a sospechar que tiende a favorecer a ciertos personajes. Por supuesto, las personas son buenas para ver patrones donde no los hay, así que decidí probar el comando en una muestra más grande. Los resultados están abajo.

A partir de una muestra de 12,000 contraseñas generadas (12 dígitos), estas son las letras más comunes y menos frecuentes y cuántas veces aparecen.

TOP 10   BOTTOM 10 

Freq | Char  Freq | Char 
-----|-----  -----|----- 
2751 | I   1833 | p 
2748 | Q   1831 | V 
2714 | w   1825 | 1 
2690 | Y   1821 | r 
2673 | k   1817 | 7 
2642 | o   1815 | R 
2628 | g   1815 | 2 
2609 | 4   1809 | u 
2605 | 8   1791 | P 
2592 | c   1787 | + 

Por ejemplo, 'I' aparece más de 1,5 veces más que '+'.

¿Es esto estadísticamente significativo? Si es así, ¿cómo se puede mejorar el comando?

+0

aparentemente bash no está programando ?! wtf? ¿Cómo puede algo como http://stackoverflow.com/questions/55556/password-generation-best-practice (o casi cualquier otra cosa en la columna a la derecha) permanecer abierto mientras está cerrado? –

Respuesta

7

sí, creo que va a ser parcial. uuencode requiere 3 bytes por cada 4 caracteres de salida. dado que le está dando 8 bytes, el último byte es relleno de algún tipo (no aleatorio) y que va a sesgar el 12º carácter (y también afectará ligeramente al 11º).

Se puede tratar

head -c 9 /dev/random | uuencode -m - 

(con 9 en lugar de 8) en su lugar y publicar los resultados? eso no debería tener el mismo problema

ps También, usted ya no tendrá que caer el "=" padding, ya que es un múltiplo de 3.

http://en.wikipedia.org/wiki/Uuencoding

pps ciertamente parece estadísticamente significativa. esperas una variación natural de sqrt (media), que es (adivinar) sqrt (2000) o aproximadamente 40. Por lo tanto, tres desviaciones de eso, +/- 120 o 1880-2120 deben contener el 99% de las letras: estás viendo algo mucho más sistemático.

ppps idea aseada.

Lamentablemente Me di cuenta de que las fuerzas -m uuencode base 64 en lugar del algoritmo de uudecode, pero la misma idea se aplica.

+0

Interesante, voy a probar eso y ver cómo se compara. –

+0

Estaba en el proceso de probar el primer conjunto de valores cuando publicó esta respuesta; Acabo de probar su comando y parece ser uniforme (p = 2.2e-16 para la salida del primer comando, y p = 0.7911 para el segundo, ambos usan pruebas de chi-cuadrado). – bnaul

+0

yay! ¡Gracias! : o) –

Cuestiones relacionadas