Подтвердить что ты не робот

Безопасно ли хранить пароли с помощью MD5CryptoServiceProvider в С#?

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

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

Это безопасно? Я слышал, что MD5 был "сломан".

Если нет, можете ли вы рекомендовать альтернативный хэш-метод для использования (конкретный класс .NET Framework)?

4b9b3361

Ответ 1

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

См. wiki

Ответ 2

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

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

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

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

Ответ 3

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

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

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

Эта статья Матасано, Что вам нужно знать о схемах безопасного пароля, есть хорошее чтение именно по этой теме.

Ответ 4

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

Ответ 5

Хранение пароля хэширования лучше, так как он скрывает пароль от посторонних глаз DBA.

Кроме того, да, 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). Резюме, это "криптографически сломанный"