Нам необходим алгоритм хэширования паролей, совместимый с FIPS 140-2 и FIPS 140-3. (FIPS 140-3 вступил в силу 22.09.2009. Тестирование начнется 22.09.2020. Тестирование FIPS 140-2 продолжится как минимум до 22.09.2021, а может и позже. Поэтому мы хотим соблюдатьFIPS 140-2 и FIPS 140-3.)
Мы выбрали Rfc2898DeriveBytes
, он же PBKDF2. Однако, если мы предоставим HashAlgorithmName.SHA256
конструктору Rfc2898DeriveBytes
, то под классом HMACSHA256
будет использоваться SHA256CryptoServiceProvider
. (См. Справочный источник .) Этого достаточно для достижения соответствия FIPS 140-2.
Однако мы хотим использовать класс SHA256Cng
, поскольку этоSHA-2 следующего поколения на основе BCrypt, который, как я предполагаю, позволил бы нам достичь соответствия FIPS 140-3.
(я знаю, что я делаю много предположений здесь, и я определенно неэксперт по безопасности.)
Кто-нибудь знает, возможно ли использовать Rfc2898DeriveBytes
с SHA256Cng
? Если нет, то каков наилучший способ хеширования паролей PBKDF2 с помощью фундаментальных алгоритмов, совместимых с FIPS 140-3?