Хочу сделать такую штуку на одном сайте:
Регистрация: юзер вводит имя-пароль, на сайте сохраняем имя и соответствующий ему зашифрованный пароль.
Логин: юзер заходит на сайт, вводит пароль, хэш-функцией генерируем хэш введенного пароля и сравниваем с тем, что хранится на сайта. Хэши совпали - открываем сессию и входим на сайт.
Как я понял после гугления, если злоумышленник получил доступ к базе с хэшами, у него есть возможность
1 подобрать пароль долго и тупо перебирая
2 уже быстрее поиском по базам хэшей
3 войти под чужим аккаунтом введя другой пароль найдя коллизию
Вот думаю, какой хэш функцией шифровать пароли - sha1 или md5, чтобы у злоумышленника было меньше шансов на успех по пунктам 1 и 3? Противоядие от пункта 2 как я понял - только хитрый пароль.
Вроде как sha1 - мой выбор, но хотелось бы услышать комментарии если я где-то ошибся.
Что выбрать для шифрования - sha1 или md5?
- Victor Gr.
- Неотъемлемая часть форума
- Сообщения: 891
- Зарегистрирован: 13 авг 2004, 15:39
- Откуда: Минск
- Контактная информация:
- Serzh
- Увлекающийся
- Сообщения: 111
- Зарегистрирован: 04 апр 2004, 00:57
- Откуда: Менск
- Контактная информация:
У данным выпадку патрэбна ўжываць не "амаль", а даўно. Для MD5 знойдзены алгарытм пошука каалізій. Правільны адказ - SHA1.myst писал(а):MD5 уже несколько раз почти скомпрментировали, SHA1, вроде как, нет.
Для супрацьстаяння гэтаму існуе "соль". Сэнс такі:sm писал(а):Противоядие от пункта 2 как я понял - только хитрый пароль.
hash = SHA1 ( соль + пароль )
Соль ствараецца для кожнага карыстальніка выпадкова і разам з хэшам захоўваецца ў базе. У выніку нават карыстальнікі з аднолькавымі паролямі будуць мець розныя выніковыя хэшы.
Увага: пры карыстанні слабой хэш-функцыяй (функцыяй, дзе знойдзены алгарытм пошука каалізій, напрыклад MD5) выкарыстанне солі губляе ўсялякі сэнс.
P.S. Шыфраванне і хэшіраванне гэта зусім розныя рэчы! =)
Строго говря построить сообщение, удовлетворяющее конкретному хэшу (из базы) не то же самое, что сгенерить два сообщения с одинаковым хэшем (для чего есть навалом прог). Вроде бы, это называется нестрогой и строгой стойкостью хэш функции.Serzh писал(а):У данным выпадку патрэбна ўжываць не "амаль", а даўно. Для MD5 знойдзены алгарытм пошука каалізій. Правільны адказ - SHA1.myst писал(а):MD5 уже несколько раз почти скомпрментировали, SHA1, вроде как, нет.
Для супрацьстаяння гэтаму існуе "соль". Сэнс такі:sm писал(а):Противоядие от пункта 2 как я понял - только хитрый пароль.
hash = SHA1 ( соль + пароль )
Соль ствараецца для кожнага карыстальніка выпадкова і разам з хэшам захоўваецца ў базе. У выніку нават карыстальнікі з аднолькавымі паролямі будуць мець розныя выніковыя хэшы.
Увага: пры карыстанні слабой хэш-функцыяй (функцыяй, дзе знойдзены алгарытм пошука каалізій, напрыклад MD5) выкарыстанне солі губляе ўсялякі сэнс.
P.S. Шыфраванне і хэшіраванне гэта зусім розныя рэчы! =)
Второе условие - гораздо слабее. В случае с MD5 учитываются статистические особенности блочной структуры хеширующей структуры (то есть ясно какие части исходных сообщений с бОльшей вероятностью надо менять, чтобы получить коллизии).
Насколько я знаю, на данный момент не существует (сравнительно) эффективного алгоритма поиска сообщения, дающего заданный MD5 хэш.