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