Безопасность хеш-функции в основном зависит от длины ее вывода (дайджест сообщения): более длинный дайджест дает большее сопротивление столкновению. Парадокс дня рождения говорит нам, что в среднем вы ожидаете найти столкновение из рабочей функции квадратного корня из размера дайджеста: другими словами, при 128-битном дайджесте злоумышленник будет ожидать попадания в paydirt после 2 ^ 64 испытания.
MD5 не одобряется криптографическим сообществом уже несколько лет, потому что он имеет только 128-битный дайджест, а также есть некоторые интересные криптоаналитические результаты, которые могут эффективно снизить его прочность. SHA1 (160-битный дайджест) был предпочтительной альтернативой, но даже тогда он начинает казаться, что он был недостаточно длинным для хорошо мотивированного противника, и в исследовательском сообществе также есть некоторые интересные результаты. Семейство SHA-2 (размеры выходных данных от 224 до 512 бит) являются текущими предпочтительными хеш-функциями, которые широко используются. NIST проводит активный исследовательский конкурс для поиска преемника SHA-2, но у нас не будет нового стандарта до 2012 года или около того.
Теперь, в конкретном случае хранения паролей, я отмечаю, что вы используете соль. Это настоятельно рекомендуемая практика; без соли вы были бы уязвимы для атаки радужного стола. Я полагаю, что это оставляет вас только на атаку грубой силой; Именно здесь приходит keylength.com . Он объединяет рекомендации по размерам ключей и дайджестов по всему криптографическому сообществу и дает ожидаемые временные рамки безопасности для различных алгоритмов, учитывая текущую вычислительную мощность и принимая во внимание закон Мура. Подумайте, какие активы вы защищаете и как долго вам нужен пароль, чтобы оставаться в безопасности (например, у вас есть политика принудительного изменения пароля?), И это должно в значительной степени ответить на вопрос о размере дайджеста, который вам нужен.
Конечно, лучшее хранилище паролей в мире не поможет вам, если ваши пользователи будут использовать легко угадываемые пароли. Предоставляете ли вы своим пользователям советы для надежных паролей? Вы рассматривали измеритель надежности пароля или аналогичный?