Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 crypt   Igor Nikolayev   03 Sep 2001 15:10:53 
 Re: crypt   Pavel Ammosov   04 Sep 2001 03:08:05 
Архивное /ru.cgi.perl/28407c6884b81.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional