Современный брутфорс и безопасный логин
2 октября 2011
Оказывается, любой печатный восьмисимвольный пароль в домашних условиях ломается перебором всех комбинаций за три с половиной дня. Это при том, что хеширован он вполне современным sha256. Всего несколько лет назад на такой перебор могли уйти годы, а то и вся жизнь.
Что же теперь делать?
- Можно и нужно сделать лимит на количество попыток ввода пароля. По достижении лимита можно, например, просить ввести капчу. Однако, если произойдёт «утечка» базы данных, что, конечно, бывает не так часто, но бывает, ограничение не поможет.
- Хорошим решением будет в дополнение сделать вычисление хеша более ресурсоёмкой операцией. Пользователь не заметит, а вот для взломщика перебор станет, если не невозможным, то, как минимум, финансово невыгодным. Реализуется, например, при помощи bcrypt. Выглядеть это может примерно как здесь.
Комментарии RSS по email OK
Интересное решение по ссылке
Salt наше все
Ещё есть http://www.openwall.com/phpass/
Я не особо силен в криптографии, но я так понимаю чем короче хеш на выходе - тем сильнее его неустойчивость к коллизиям, а это сильно облегчает взлом. (особенно учитывая специфику алгоритмов, в википедии есть пару примеров таких коллизий).
А ещё можно в цикле 1000 (или 10 000) раз хешировать пароль
White-Shadow, Соль от перебора не спасает.
Максим, верно, хотя от перебора безколлизионный хеш не спасёт.
Spider, тоже вариант. Главное — сделать операцию дорогой.
Чтобы не бояться утечки базы, надо использовать схему, в которых по информации из базы в принципе невозможно произвести вход. Пример http://david-m.livejournal.com/1227846.html (и ссылки).
Sam, что имеешь в виду - если значение соли известно?)
yareg, нет, в любом случае. Соль спасает лишь от использования готовых rainbow table и частично от словарей. При переборе всё равно, есть там соль или нет.
Sam, даже если соль неизвестна? Как-то слабо в это верится :) Фактически в данном случае можно сказать, что это не соль, а просто длинный пароль, разве нет? Т.е. 8 символов пароль + 32 символа соль, итого 40 символов. Даже с современными мощностями этого многовато для перебора
Spider, а в каком случае вам может быть неизвестна соль?
Давид Мзареулян, мне или брутфорсеру?
Вам-брутфорсеру. Опишите ситуацию, в которой Вам надо что-то отбуртфорсить, но соль неизвестна.
Эммм.... ну, например, за счёт SQL-инъекции стянул хеши паролей из базы. А соль хранится в файле конфигурации, к которому у меня нет доступа
Одна соль на все пароли? А какой в ней смысл тогда?
Смысл как раз в том, что она никому неизвестна :)
P.S. Согласен, что security via obscurity — не очень хорошо. Но я просто привёл пример когда соль спасает
Одно из основных назначений соли — сделать разными хэши одинаковых паролей.
Это смотря какой алгоритм. Фиксрованная соль сейчас используется гораздо чаще.
Когда в vBulletin'е встретил рандомно генерирующуюся соль - э то выглядело как конкретная паранойя...
Рандомная соль, хранящаяся вместе с хэшем — это, вообще-то, стандартное решение.
даже если соль лежит рядом с хэшем, без кода сложно сказать каким образом оно "посолено".
к тому же что мешает комбинировать соль в базе и соль в конфиге? при чем метод соления для статической соли и той что вместе с хэшем может быть разный...
ну а если и код и база свободно доступны...
White-Shadow Ну конечно, security through obscurity — наше всё. Непонятно только, зачем тогда вообще пароли хэшировать.
так я и не хеширую бывает...
идея на тему по приведенный ссылке, уязвима к брутфорсу достаточно знать N и функцию хэша (и врят ли в этом случает это будет что ресурсоемкое, и это все известно имея только доступ к базе, все остальное есть на клиенте), она защищает как раз от MIM атак, а не от утечки базы...
так что если рассматривать устойчивость при доступе на чтение в базу вариант с солью - безопаснее.
К брутфорсу (угадыванию пароля, вероятно?) уязвима любая схема, в которой источник ключа — пользовательская голова. Но, по крайней мере, если у юзера хороший (трудно подбираемй) пароль, то данная схема его защитит. А пароль qwerty никаким алгоритмом защитить невозможно… На самом деле, это и есть основная проблема, а не то, как солить хэши.
Мой ответ брутфорсерам: sha-512 + salt + secret_key Пароль и соль хранятся в базе, ключ хранится на диске сервера (спрятан в скриптах). Для sha-512 на данный момент не существует "радужных таблиц", а брутфорс такого пароля даже при известных соли и ключе равен около 10^64 лет на домашнем компутере(с использованием GPU).. я хз сколько это на человеческом языке.
Только еще надо помнить об ограничениях страны на битность шифрования, а то могут и за жопу взять))