|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Pavel Ammosov 2:5020/52 04 Sep 2001 03:08:05 To : Igor Nikolayev Subject : Re: crypt -------------------------------------------------------------------------------- PA>> Твоя подпрограмма шифрует пароль, используя однононаправленную функцию PA>> crypt() -- perldoc -f crypt, man 3 crypt. IN>Да, с этим было все ясно. :) Просто хотелось понять, для чего все эти IN>навороты. salt - чтобы расширить пространство результатов, новый алгоритм на базе MD5 в принципе для того же. Смысл в том, чтоб атакующей было сложно для всех возможных вариантов рассчитать значения хеш-функции. IN>>> насколько она эффективна, и какие есть другие варианты криптования. PA>> Твой вариант неэффективен: неправильно инициализируется rand(). IN>Я так понял, что она вообще не работает, т.к. следующая функция IN>выполняет точно такое же кодирование. IN>sub crypt_passwd { IN> my ($passwd, $salt) = (@_, '$1$'); IN> return(crypt($passwd,$salt)); IN>} PA>> Hу и еще может проблема, если ты станешь применять ее на старых PA>> машинах, где crypt не умеет MD5. IN>Что он не умеет? 8) crypt(3) изначально использовал вариант DES для хеш-функции: пароль длиной восемь символов преобразовывался путем отбрасывания старшего бита у символов в 56-битную последовательность, которой многократно шифровалась строка из нулей или пробелов. (Фольклорные воспоминания тут расходятся:) К 90м стало ясно, что мощности современных компьютеров позволяют перебрать все пространство результатов оригинальной хеш-функции за относительно короткий промежуток времени и был предложен вариант crypt() на основе MD5 (The Message Digest Algorithm 5, RFC 1321). crypt() выбирает алгоритм на основе значения salt: если salt начинается с $1$ и восьми символов за ним, то используется MD5, иначе - старый DES-вариант. то есть: print crypt('foobar', 'sa') - старый вариант, должен выдать "sa.O78kJU2dJ." print crypt("foobar", "$1$neatsalt") - новый вариант, должен выдать "$1$neatsalt$8xMLlwmLTqccLK7z4Jk/U/" Если вместо этого у тебя получается "$1E5xYAq.nezk", значит твой crypt() не поддерживает новый алгоритм. Именно такой случай я имел ввиду, когда писал про старые машины. PA>> sub crypt_password($) { IN>Спасибо, но у меня есть два вопроса. Во-первых, зачем у названия IN>функции стоит ($)? Прототип функции. см. perlsub. IN>Так ничего не работает. Как это? У тебя perl 4, чтоль? -- Pavel Ammosov O \ apavel@aha.ru __ ) http://isabase.philol.msu.ru/~apavel/ ) wget -O - isabase.philol.msu.ru/~apavel/key.asc|pgp -fka O / --- FIDOGATE 4.4.0-snp10 * Origin: Zenon N.S.P. news server (2:5020/52.0) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/28407c6884b81.html, оценка из 5, голосов 10
|