Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

4 года назад
Открыть в
День 1422. #BestPractices Хеширование Паролей в C#. Начало В системе, которая хранит учётные данные пользователей, нужно уделить особое внимание тому, как хранить пароли. Рассмотрим, как использовать методы хэширования в C# для безопасного хранения паролей пользователей. Хеширование пароля означает применение алгоритма одностороннего шифрования, который создаёт криптографическую строку. Одностороннее шифрование не может быть расшифровано, что делает невозможным вывод исходного пароля из хешированной строки. Алгоритмы хеширования являются детерминированными, т.е. одна и та же входная строка всегда будет давать один и тот же хэш. Сохраняя хешированную версию паролей, мы гарантируем, что учётные данные пользователя останутся в безопасности в случае утечки данных. Злоумышленники не смогут расшифровать хэши для получения оригинальных паролей. Выбор алгоритма Злоумышленник, получивший доступ к хэшам паролей, всё равно может попытаться взломать их методом грубой силы, т.е. перебором каждого потенциального пароля и сравнения полученного хэша с тем, что находится во взломанной базе данных. Вероятность успеха такой процедуры зависит от того, насколько быстро злоумышленник может хешировать набор паролей. Следовательно, алгоритмы хеширования считаются тем более безопасными, чем они дороже для взлома по времени и памяти. По мере того, как всё больше вычислительной мощности становится доступной для широкой публики, алгоритмы хеширования, которые в прошлом считались достаточно безопасными (например, MD5 и SHA), стали небезопасными. Их нельзя использовать их для хеширования паролей. Следующие алгоритмы безопасны. 1. PBKDF2 — стандарт формирования ключа на основе пароля, изначально доступный в среде .NET. В отличие от MD5 или SHA, PBKDF2 повышает защиту пароля от метода грубой силы, добавляя дополнительную сложность. 2. Семейство алгоритмов BCrypt/SCrypt спроектировано так, чтобы интенсивно использовать ЦП и память, особенно новый SCrypt, который очень устойчив к атакам методом грубой силы. 3. Argon2 и его варианты часто считаются лучшим алгоритмом хеширования паролей на рынке, поскольку они предназначены для предотвращения некоторых из самых новых и передовых методов взлома. Хеширования недостаточно: добавляем соль Одним из недостатков алгоритмов хеширования является то, что они всегда производят один и тот же хэш для одного и того же пароля. Т.е. после того, как один хэш пароля был скомпрометирован, вполне может быть, что это затронет более одного пользователя, потому что они решили использовать один и тот же пароль. Также существуют методы, ускоряющие взлом паролей методом грубой силы, такие как предварительно вычисленные хэш-таблицы, радужные таблицы или злоупотребление коллизиями хэшей. Чтобы избежать этого к паролю добавляется соль - случайная часть информации, делающая каждый хэш пароля уникальным. Это значительно усложнит атаки методом грубой силы. Лучшие практики 1. Использовать разные соли для каждого пароля. Общая на всех соль делает этот метод намного менее эффективным. 2. Если возможно, хранить соли паролей отдельно. 3. Соль пароля должна быть трудной для угадывания злоумышленником. Рекомендуется использовать криптографический генератор случайных чисел, такой как RandomNumberGenerator в пакете System.Security.Cryptography. 4. Соль должна быть достаточно длинной. Хорошее эмпирическое правило — сделать её того же размера, что и выходной хэш. Окончание следует… Источник: https://code-maze.com/csharp-hashing-salting-passwords-best-practices/