Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > безопасность паролей?


Автор: gcc 6.7.2008, 01:16
какой лучший метод зашифрование паролей?
я нашел хэширование
но в гугле нашел, что его можно перебрать как-то...  smile 

ну и еще нашел в cpan что можно безопастно захэшировать методом добавление символов к самому хэшу и еще используя кодировку utf8-16  к хэшу  или к паролю smile 

поможет в данном случае использовать зашифрованное соединение  https ?

но если получиться вынуть этот хэш из бд, то как сделать чтобы не узнали пароль, 
возможно каким-то сертификатом?  smile 

и еще как сделать чтобы можно было восстановить пароль, если пользоватль забудет его,  отправить его на анонимный email можно, метод хэш тут не получиться?
можно сделать "секретный вопрос", но ответ на него можно забыть, тоже или вынуть из таблицы  smile 


скажите кто какой метод использует? хэш md5 лучше всего или нет?  smile  smile 


Автор: Nab 6.7.2008, 02:12
Столько вопросов, и все об одном и том же....

Немножко правил хорошего тона, при работе с паролями.

1. Никогда не хранить паролей пользователей. НИКОГДА.
2. Хранить нужно хеш, чем длиннее, ем лучше. Стандартный crypt подойдет запросто, MD5 или SHA1 не столь важно.
3. Если чел забыл пароль, генерировать новый и отправлять на мыло. В базе временно сохранить   новый пароль и ждать подтверждения от клиента.
4 В идеале даже не генерировать пароль и не отсылать на мыло.  А на мыло отсылать временный урл, сложный и длинный. Пройдя по которому чел сам сможет изменить себе пароль. При этом ему еще и капчу желательно показать.
5. Не хранить пароли или хеши в куках. Использовать механизм сессий.
6. HTTPS хорошо и правильно. Рекомендуеться к использованию.

Добавлено через 3 минуты и 50 секунд
Ну про правила самих паролей я ниче не сказал. Пароль из хеша можно получить в обозримом времени или случайно, или по словарю. Методом тупого перебора не так просто. 
Так что нужно или самомуу генерировать неудобочитаемые пароли. Или заставлять пользователей генерировать их с соблюдением разных правил и условий, на длину, на набор символов, и т.д.

Автор: gcc 6.7.2008, 02:59
спасибо за ответ! 

в гугле достаточно написать "расшифровка md5"
писали что рашифровывает на мощных машинах  от 12 часов до недели, тогда лучше в открытом виде держать  smile 

MD5 inside - для расшифровки, На AMD AthlonXP 1700+ (1466 МГц) скорость перебора - ~3,6 миллиона паролей/cек.. 
http://forum.vingrad.ru/forum/topic-107432/anchor-entry819794/0.html
http://forum.xakep.ru/m_1024319/tm.htm
http://passcracking.ru/index.php

а можно зашифровать сертификатом ssl или другим... защитить его веб сервером и системой (запретить просмотр/копирование скрипта в котором этот сертифкат буде и потсавить раздел в read only)

или "забить" и использовать md5 128bit ?

Автор: tolkien 6.7.2008, 06:06
1. ненадо использовать чистое MD5. Лучше сделать связку симметричный алгоритм + MD5. Или еще лучше симметричный алгоритм + сжатие + MD5. Еще лучше симметричный алгоритм + сжатие + MD5 + cжатие + МD5 + симметричный алгоритм + MD5. )) никто никогда не расшифрует.

2. Перебрать пароли легко на дексторпе. Но их еще надо проверять. А вот твой дестоп может за 1 сек выполнить 3 мииллионов запросов к серваку? 

Автор: KSURi 6.7.2008, 12:17
Ну если есть гарантия, что пароли не являются слабыми (например они выставляются скриптом, а не пользователем), то чистого md5 в принципе хватит имхо. На перебор пароля из 16 символов (буквы разного регистра и спецсимволы) могут уйти годы.

Ну и не стоит забывать про всякие вариации типа
Код

md5_hex(md5_hex($input . $some_constant))


Добавлено через 5 минут и 14 секунд
Цитата(tolkien @  6.7.2008,  06:06 Найти цитируемый пост)
2. Перебрать пароли легко на дексторпе. Но их еще надо проверять. А вот твой дестоп может за 1 сек выполнить 3 мииллионов запросов к серваку?  

Эм... А это зачем? В смысле зачем делать запросы к серверу? Подбор пароля происходит таким образом:
программа берет слово из словаря (или составляет строку сама, если происходит атака перебором) и получает ее хэш, а полученный хэш сравнивается с данным. Так вот если хэши совпадут, то пароль успешно подобран.

Автор: Nab 6.7.2008, 15:28
Цитата(KSURi @  6.7.2008,  12:17 Найти цитируемый пост)
Ну если есть гарантия, что пароли не являются слабыми (например они выставляются скриптом, а не пользователем), то чистого md5 в принципе хватит имхо. На перебор пароля из 16 символов (буквы разного регистра и спецсимволы) могут уйти годы.

16 символов это стандартный хеш,  пароль может быть от 1 до бесконечности символов. Его MD5 хеш всегда будет 16 символов. В том то и прикол.

А насчет пароля то да. Ведь проверяеться то хеш а не пароль. Поэтому если хеш случайным образом совпал на совсем другом пароле, то он и сработает smile И пофиг что пароли разные.

Тут может обезопасить и многократно усложнить задачу двойное хеширование одного и тогоже пароля. Тогда вероятность совпадения результирующего хеша для двух разных пароолей будет числом с таким количеством нулей, что огого smile

Автор: KSURi 6.7.2008, 18:40
Raw хэш будет 16 байт длиной, однако чаще всего используется его hex представление, которое всегда равно 32 байтам ([a-f0-9]) по длине (потому что в raw виде там могут присутствовать непечатные символы). Однако то, что хэш всегда будет 16 или 32 байта не значит, что сложность пароля от этого уменьшится.

Автор: gcc 8.7.2008, 00:44
Код
    $st->execute("$hh"); 


достаточно написать такой запрос чтобы, не было инъекции?? 
было написано где-то в статье что достаточно!

+ https и тогда пароли не узнать?

дело в том что многие програмыы пароли зашифровывают по разному... potfix, proftp... 

а могут mysql ломануть? чтобы в таблицу зайти? 


а может поставить в xen или jail?

еще хотел посмотреть в сторону openldap, но времени много займет

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


еще хотел спросить, никто не видел статью, как безопсано элетронные деньги передвать и хранить?  smile 

Автор: Nab 8.7.2008, 03:03
Мде, такая каша в голове.... :(

Вам же предложили рабочие варианты, а вы снова на своей волне... 

Или чукча не читатель, чукча писатель?

Вы бы постарались нормально сформулировать свою мысль, и изложить ее доходчиво. Авось ктото и ткнул бы носом конкретнее. А то бардак в голове и в словах :(

Автор: gcc 8.7.2008, 03:33
сори, но если узнают хэш или пароль, то значит что не правильный код или не правильно настронно  программное обеспечение!

а вот этого достаточно чтобы не было инъекции + https?   smile 
Код

    $st->execute("$hh"); 



я могу разшифровать свой пароль!! хотя я поставил больше сиволов, ну я так понял что он теперь за год расшифрует? или я что-то не понял?

Код

#!/usr/local/bin/perl
                            
    use Digest::MD5::Reverse;
    print "Data is ".reverse_md5("7fa8282ad93047a4d6fe6111c93b308asdf")."\n"; #хэш я изменил, поставьте свой
    # Data is foo




зашифровывал так:
Код

    $user_vars{'pass'} = md5_hex($user_vars{'pass'});

я не правильно зашифровывал?


вот еще варинты шифрование


Код

 use PerlIO::via::MD5;

 PerlIO::via::MD5->method( 'hexdigest' ); # default, return 32 hex digits
 PerlIO::via::MD5->method( 'digest' );    # return 16-byte binary value
 PerlIO::via::MD5->method( 'b64digest' ); # return 22-byte base64 (MIME) value

 open( my $in,'<:via(MD5)','file' )
  or die "Can't open file for digesting: $!\n";
 my $digest = <$in>;


Код



 $method = PerlIO::via::MD5->method;  # obtain current setting
 PerlIO::via::MD5->method( $method ); # set new digest method




Код

  use Digest::MD5;
    javascript: void(0);
    $md5 = Digest::MD5->new;
    $md5->add('foo', 'bar');
    $md5->add('baz');
    $digest = $md5->hexdigest;
    
    print "Digest is $digest\n";


Код

Raw хэш будет 16 байт длиной, однако чаще всего используется его hex представление, которое всегда равно 32 байтам ([a-f0-9]) по длине (потому что в raw виде там могут присутствовать непечатные символы). Однако то, что хэш всегда будет 16 или 32 байта не значит, что сложность пароля от этого уменьшится.


а что такое Raw хэш  ?

Автор: biophreak 8.7.2008, 09:25
Raw-хеш - это хеш строки, в "сыром" виде, т.е., как сказал KSURi - содержит еще и непечатаемые символы, а то что привыкли видеть мы - это тот же хеш, только в 16-ричном виде smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)