Рано или поздно все задумываются о хранении паролей пользователей. Многие останавливаются на алгоритме md5. Двойном md5, солёном md5 (salt md5) и других его разновидностях... Да, хорошая, длинная соль(salt) и не стандартная комбинация пароль+соль+md5 делает хеш достаточно сложным, что бы его нельзя было найти в базах. Но, если ваш сайт\сервер будет взломан, и будет получен доступ к базе данных и к файлам — брутфорс паролей не станет проблемой. Как же с этим бороться? Есть несколько простых правил: 1) Пароль пользователя должен содержать цифры, буквы в разном регистре и спец символы. Кончено заставить пользователей это сделать — не реально. Но у нас есть соль. И она должна содержать спец символы. 2) Использование разных алгоритмов хеширования. Не нужно зацикливаться на одном md5. Есть куча других алгоритмов, даже если вы думаете, что они не надёжны — оборачивайте их в md5! 3) Генерация пароля должна быть максимально медленной. Используйте медленные алгоритмы, например md2. Но так как он не надёжен — оборачивайте его в так полюбившийся всем md5. Перебор 1000 паролей на компьютере средней мощности должен занимать больше 1 секунды. 4) И, наверно сенсационный пункт. Больше относится к п.1. Используйте в символ переноса и конца строки! Я не видел ещё брутов способных его использовать. Да, написать его не проблема, но сам факт... 5) Сделайте модуль для веб-сервера, который генерирует пароль. Даже имея доступ к вашей базе и файлам, при грамотной настройке прав — до модулей злоумышленник не доберётся. (с) Блог mr.The
не согласен, варианты типа 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 , поскольку число коллизий в нем гораздо меньше и есть шанс...
Коллизии тут не актуальны. Много ли Вы можете примеров привести реальных коллизий, того же md5? Я думаю, что нет... С нынешними мощностями их найти крайне сложно. Посему "втопку"... Как хранить пароли? Ставить правила на новые пароли. Чтобы нельзя было ставить 123123. Чтобы нельзя было ставить только цифренные, только буквенные, меньше 8-символьные пароли. Чтобы пароль менялся каждый месяц. Чтобы когда меняется пароль, он должен отличаться от всех 24 предыдущих паролей установленных конкретным пользователем. Ну и не забываем про спец. символы и т.д. Какой алгоритм хеширования данных выбрать? А тут, как говорится, на вкус и цвет...
я всего лишь написал как делать не надо, а так я с тобой согласен:единственно верный способ защитить юзера:заставить его сделать сложный пароль. Наши заклятые друзья применяют по полной вот такой способ:устанавливается на отдельное устройство программа-генератор ключей:имеется два поля:рандомно генерируемый пароль+уникальный идентификатор этого устройства.При каждом новом использовании пароль обновляется.Если хочеш залогиниться, нужно вставить устройство в комп и с него автоматически прочитается идентификатор, пароль вводиш сам, причем копипаст делать нельзя.Количество ошибочных вводов пароля ограничено.Фактически получается электронный ключ.Самое удивительное то, что все это делается на отдельно поставляемом устройстве, а не на флешке
kponoc, вероятностные показатели коллизии невероятно приувеличены. Реальную вероятность коллизии в md5 не знаю, но думаю, она врятли больше 0,001%. Это номер раз. А номер 2, это то что, соль убивает паразитный эффект от многократного использования ДАЖЕ одного алгоритма хеширования. "Посему - "втопку""