2011-08-23 3 views
7

Есть ли недостаток в этой команде для генерации паролей?Является ли этот генератор паролей предвзятым?

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

После создания несколько паролей с ним, я начал подозревать, что он, как правило, в пользу определенных символов. Конечно, люди хорошо видят шаблоны там, где их нет, поэтому я решил проверить команду на более крупном образце. Результаты приведены ниже.

Из образца 12 000 сгенерированных (12-значных) паролей здесь приведены самые и наименее распространенные письма и сколько раз они появляются.

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 | + 

Так, например, «Я» появляется более чем в 1,5 раза чаще, чем «+».

Является ли это статистически значимым? Если да, то как можно улучшить команду?

+0

очевидно, что это не программирование ?! WTF? как может выглядеть что-то вроде http://stackoverflow.com/questions/55556/password-generation-best-practice (или почти все остальное в столбце справа), пока оно закрыто? –

ответ

7

Да, я думаю, что это будет предвзято. uuencode требует 3 байта для каждого 4 выходных символа. так как вы даете ему 8 байтов, последний байт является дополнением некоторого (неслучайного) вида и который будет смещать 12-й символ (и немного влияет на 11-й).

вы можете попробовать

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

(с 9 вместо 8), а не оставлять его результаты? это не должно иметь такой же проблемы.

пса также, вы больше не нужно уронить «=» отступы, так как это кратно 3.

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

бода это, безусловно, представляется статистически значимым. вы ожидаете естественного изменения sqrt (mean), который (догадки) sqrt (2000) или около 40. Таким образом, три отклонения от этого, +/- 120 или 1880-2120 должны содержать 99% букв - вы видите что-то гораздо более систематическим.

ppps аккуратная идея.

ooops Я только что осознал -m для uuencode заставляет base64 вместо алгоритма uudecode, но та же идея применяется.

+0

Интересно, я проверю это и посмотрю, как он сравнивается. –

+0

Я был в процессе тестирования первого набора значений, когда вы отправили этот ответ; Я просто проверил вашу команду и, похоже, был равномерным (p = 2.2e-16 для вывода первой команды, а p = 0.7911 для второго, оба с использованием тестов chi-square). – bnaul

+0

yay! благодаря! : o) –

Смежные вопросы