Действительно ли безопасно снабдить пароли, хешированные MD5CryptoServiceProvider в C#?

Мы храним хешированные пароли в таблице базы данных.

Мы предварительно ожидаем каждый пароль со случайным соленым значением и хешем с помощью MD5CryptoServiceProvider.

Действительно ли это безопасно? Я услышал, что MD5 был "поврежден".

В противном случае можно ли рекомендовать альтернативному методу хеша использовать (определенный класс платформы.NET)?

17
задан frankadelic 24 February 2010 в 21:17
поделиться

5 ответов

Я думаю, что SHA256, SHA512 более безопасны при этот момент :)

См. wiki

8
ответ дан 30 November 2019 в 12:27
поделиться

Безопасность хеш-функции в основном зависит от длины ее вывода (дайджеста сообщения): более длинный дайджест дает большую устойчивость к конфликтам. Парадокс дня рождения говорит нам, что в среднем вы ожидаете найти коллизию из работы функции квадратного корня из размера дайджеста: другими словами, учитывая 128-битный дайджест, злоумышленник будет ожидать попадания в paydirt после 2 ^ 64 испытания.

MD5 не одобряется криптографическим сообществом в течение нескольких лет, потому что он имеет только 128-битный дайджест, а также есть некоторые интересные криптоаналитические результаты, которые могут эффективно снизить его надежность. SHA1 (160-битный дайджест) был предпочтительной альтернативой, но даже тогда начинает казаться, что этого недостаточно для хорошо мотивированного противника, и есть также некоторые интересные результаты в исследовательском сообществе. Семейство SHA-2 (размер вывода от 224 до 512 бит) в настоящее время являются предпочтительными хэш-функциями, широко используемыми. NIST проводит активный исследовательский конкурс, чтобы найти преемника SHA-2, но у нас не будет нового стандарта до 2012 года или около того.

Теперь, в конкретном случае хранения паролей, я замечу, что вы используете соль. Это настоятельно рекомендуемая практика; без соли вы были бы уязвимы для атаки радужного стола. Я считаю, что это оставляет вам только возможность грубой силы; здесь и появляется keylength.com .Он объединяет рекомендации по размерам ключей и дайджестов от всего криптографического сообщества и дает ожидаемые сроки безопасности для различных алгоритмов с учетом текущей вычислительной мощности и с учетом закона Мура. Подумайте, какие активы вы защищаете и как долго вам нужен пароль, чтобы оставаться в безопасности (например, у вас есть политика принудительной смены пароля?), И это должно в значительной степени ответить на вопрос о том, какой размер дайджеста вам нужен.

Конечно, лучшее в мире хранилище паролей не поможет вам, если ваши пользователи будут использовать пароли, которые легко угадать. Вы даете своим пользователям советы по созданию надежных паролей? Рассматривали ли вы измеритель надежности пароля или аналогичный?

11
ответ дан 30 November 2019 в 12:27
поделиться

С солью MD5 намного безопаснее, чем без нее, но лучше использовать один из хешей SHA, например SHA256Managed.

3
ответ дан 30 November 2019 в 12:27
поделиться

Нет, вы не должны использовать MD5. Но вы также не должны использовать один раунд какой-либо хеш-функции общего назначения, независимо от того, насколько она криптографически защищена! Ни MD5, ни SHA-1, ни SHA-2, ни SHA-3.

Почему? Потому что хеш-функции общего назначения разработаны так, чтобы быть быстрыми . А скорость - это именно то, что вам не нужно в хеш-паролях. Быстро означает, что когда злоумышленники получают вашу базу данных, они могут запустить против нее простую атаку по старому словарю в разумные сроки.

Что вам нужно, так это медленный . Самый простой способ быть медленным - это повторить быструю хеш-функцию тысячи раз - это то, что делает схема паролей на основе MD5 и SHA-1, используемая для хранения паролей в UNIX-подобных системах (это не просто один раунд MD5 или SHA-1. ). Другой способ - использовать криптографический примитив, который работает медленно - это то, что делает схема паролей bcrypt.

В этой статье Матасано Что нужно знать о схемах защищенных паролей есть хорошее чтение именно по этой теме.

7
ответ дан 30 November 2019 в 12:27
поделиться

Хешированный пароль лучше хранить, так как он скрывает пароль от посторонних глаз администраторов баз данных.

Кроме того, да, MD5 был взломан, но до сих пор используется. Если вас беспокоит MD5, лучше используйте SHA-1 (ссылка MSDN здесь ). Это алгоритм хеширования, аналогичный MD5, но более сильный. Вы можете использовать хеширование SHA-1 до 512 бит.

Вот пример, сделанный на VB.NET ( http://www.obviex.com/samples/hash.aspx ).

Вот почему Министерство внутренней безопасности США заявляет, почему люди должны отказаться от MD5 ( http://www.kb.cert.org/vuls/id/836068 ). Резюме: он "криптографически взломан"

2
ответ дан 30 November 2019 в 12:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: