Хорошо, давайте посмотрим на реальные цифры:
Одна Nvidia 9800GTX может вычислить 350 миллионов хэшей MD5 в секунду. При такой скорости все пространство клавиш строчных и прописных буквенно-цифровых символов будет заполнено за 7 дней. 7 символов, два часа. Применение соли удвоит или утроит это время в зависимости от вашего алгоритма.
Дешевые современные графические процессоры легко могут похвастаться миллиардом хэшей MD5 в секунду. Решительные люди обычно связывают около 6 из них и получают 6 миллиардов в секунду, что делает 9-символьное пространство ключей устаревшим за 26 дней.
Обратите внимание, что здесь я говорю о грубой силе, поскольку атаки по прообразу могут применяться или не применяться после этого уровня сложности.
Теперь, если вы хотите защититься от профессиональных злоумышленников, нет никаких причин, по которым они не могут получить 1 триллион хэшей в секунду, они просто будут использовать специализированное оборудование или ферму из нескольких дешевых машин с графическим процессором, в зависимости от того, что дешевле.
И бум, ваше 10-символьное пространство ключей выполняется за 9,7 дня, но тогда 11-символьные пароли занимают 602 дня. Обратите внимание, что на этом этапе добавление 10 или 20 специальных символов в список разрешенных символов приведет только к увеличению времени взлома 10-символьного пространства ключей до 43 или 159 дней соответственно.
Видите, проблема с хешированием паролей в том, что оно только сокращает время до вашей бесполезной гибели. Если вы хотите что-то действительно надежное, но все же такое же наивное, как хранимые хешированные пароли, выбирайте PBKDF2.
Тогда есть еще одна проблема, будет ли пользователь использовать этот «надежный» пароль, который вы заставили его использовать на всех своих других сайтах? Если он не сохранит их в файле мастер-паролей, то наверняка сделает это. И эти другие сайты не будут использовать те же сильные алгоритмы хеширования, которые используете вы, что противоречит цели вашей системы. Я действительно не понимаю, почему вы хотите, чтобы ваши хэши были очень надежными, если это не для того, чтобы пользователи не использовали один и тот же пароль на нескольких сайтах; если злоумышленник имеет доступ к вашим хэшам, вы, скорее всего, уже проиграли.
С другой стороны, как я буду повторять и повторять снова людям, задающим вопросы о том, насколько «безопасна» их схема хеширования, просто используйте клиентские сертификаты, и все ваши проблемы решены. Для пользователей становится невозможным использовать одни и те же учетные данные на нескольких сайтах, злоумышленники не могут взломать ваши учетные данные, не изменив их, пользователи не могут легко украсть свои учетные данные, если они хранят их на смарт-карте и т. д. и т. д.
Чтобы наивно ответить на ваш вопрос: надежный пароль поддерживается только надежным алгоритмом хеширования.
person
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o
schedule
17.11.2009