Как хранить пароли пользователей

Тема в разделе "Статьи", создана пользователем t0wer, 17 авг 2009.

  1. t0wer
    t0wer Guest
    Рано или поздно все задумываются о хранении паролей пользователей. Многие останавливаются на алгоритме md5. Двойном md5, солёном md5 (salt md5) и других его разновидностях... Да, хорошая, длинная соль(salt) и не стандартная комбинация пароль+соль+md5 делает хеш достаточно сложным, что бы его нельзя было найти в базах. Но, если ваш сайт\сервер будет взломан, и будет получен доступ к базе данных и к файлам — брутфорс паролей не станет проблемой.

    Как же с этим бороться?

    Есть несколько простых правил:

    1) Пароль пользователя должен содержать цифры, буквы в разном регистре и спец символы. Кончено заставить пользователей это сделать — не реально. Но у нас есть соль. И она должна содержать спец символы.

    2) Использование разных алгоритмов хеширования. Не нужно зацикливаться на одном md5. Есть куча других алгоритмов, даже если вы думаете, что они не надёжны — оборачивайте их в md5!

    3) Генерация пароля должна быть максимально медленной. Используйте медленные алгоритмы, например md2. Но так как он не надёжен — оборачивайте его в так полюбившийся всем md5. Перебор 1000 паролей на компьютере средней мощности должен занимать больше 1 секунды.

    4) И, наверно сенсационный пункт. Больше относится к п.1. Используйте в символ переноса и конца строки! Я не видел ещё брутов способных его использовать. Да, написать его не проблема, но сам факт...

    5) Сделайте модуль для веб-сервера, который генерирует пароль. Даже имея доступ к вашей базе и файлам, при грамотной настройке прав — до модулей злоумышленник не доберётся.

    (с) Блог mr.The
     
    17 авг 2009
    1 человеку нравится это.
  2. kponoc
    kponoc Guest
    не согласен, варианты типа md5(md5(...)) или sha1(sha1(...)) могут оказаться хуже чем просто md5(...) или sha1(...):эти алгоритмы хэширования имеют коллизии(проще говоря 2 разным словам может соответствовать один и тот же хэш),когда применяется метод типа md5(md5(...)) кол-во колизий может увеличится.
    Для примера, (беру числа из головы, реально они гораздо меньше)
    Пусть имеется x разных слов(паролей)
    применяю 1 раз метод sha1. Пусть в нем 25%(из головы!!!!) коллизий
    в итоге получаю "x" хэшей из которых 25% совпадают т.е y=(х/4) одинаковых паролей. Проще говоря при 1 хэшировании у нас получилось (3х/4) разных паролей и (х/4) одинаковых.Еще раз применим sha1. Т.к у нас (х/4) одинаковых слов, то при хышировании одних и тех эе слов получается столько же (х/4) одинаковых паролей.
    А оставшиеся (3х/4) разных слов опять таки будут иметь 25% колизий, т.е
    (1/4)*(3х/4)=3х/16
    в итоге получим всего x/4+3x/16=4x/16+3x/16=(7x/16)=43,75% одинаковых паролей
    В первом методе было только (х/4)=25%
    Фактически в 2 раза стало все хуже...
    варианты md5(sha1(...)) или (sha1(md5(...))) так же хуже и очевидно выдадут одно и тоже , можете убедиться, проведя аналогичные рассуждения
    Хотя md5 и sha1 сейчас неломаемы кроме как брутофорсить, советую отдать предпочтение sha1 , поскольку число коллизий в нем гораздо меньше и есть шанс...
     
    Последнее редактирование модератором: 21 авг 2009
    21 авг 2009
  3. Koller
    Koller Guest
    Коллизии тут не актуальны. Много ли Вы можете примеров привести реальных коллизий, того же md5? Я думаю, что нет...
    С нынешними мощностями их найти крайне сложно. Посему "втопку"...

    Как хранить пароли? Ставить правила на новые пароли. Чтобы нельзя было ставить 123123. Чтобы нельзя было ставить только цифренные, только буквенные, меньше 8-символьные пароли. Чтобы пароль менялся каждый месяц. Чтобы когда меняется пароль, он должен отличаться от всех 24 предыдущих паролей установленных конкретным пользователем. Ну и не забываем про спец. символы и т.д.

    Какой алгоритм хеширования данных выбрать? А тут, как говорится, на вкус и цвет...
     
    21 авг 2009
  4. kponoc
    kponoc Guest
    я всего лишь написал как делать не надо, а так я с тобой согласен:единственно верный способ защитить юзера:заставить его сделать сложный пароль. Наши заклятые друзья применяют по полной вот такой способ:устанавливается на отдельное устройство программа-генератор ключей:имеется два поля:рандомно генерируемый пароль+уникальный идентификатор этого устройства.При каждом новом использовании пароль обновляется.Если хочеш залогиниться, нужно вставить устройство в комп и с него автоматически прочитается идентификатор, пароль вводиш сам, причем копипаст делать нельзя.Количество ошибочных вводов пароля ограничено.Фактически получается электронный ключ.Самое удивительное то, что все это делается на отдельно поставляемом устройстве, а не на флешке
     
    Последнее редактирование модератором: 21 авг 2009
    21 авг 2009
  5. ~|~евто|-|
    ~|~евто|-| Silentium Новичок
    Симпатии:
    32
    kponoc, вероятностные показатели коллизии невероятно приувеличены.
    Реальную вероятность коллизии в md5 не знаю, но думаю, она врятли больше 0,001%. Это номер раз.
    А номер 2, это то что, соль убивает паразитный эффект от многократного использования ДАЖЕ одного алгоритма хеширования.
    "Посему - "втопку"" :)
     
    21 авг 2009
  6. kponoc
    kponoc Guest
    черт, реально соль не учел, удалите и тот и тот и этот пост...
     
    21 авг 2009
Загрузка...