Существует ли альтернативный алгоритм хеширования для MD5 для систем с поддержкой FIPS?

Всякий раз, когда я пытаюсь использовать MD5 на компьютере с Windows XP, на котором включена поддержка FIPS, я получаю System.InvalidOperationException,

Есть ли альтернативный алгоритм, который я должен использовать вместо MD5 на FIPS?

4 ответа

Решение

MD5 не соответствует FIPS. Вместо MD5 вы можете использовать один из следующих алгоритмов хеширования:

Когда вы применяете FIPS-соответствие в настройках политики безопасности Windows, вы утверждаете, что собираетесь использовать только FIPS-сертифицированные алгоритмы шифрования и хэширования. MD5 не является одним из этих утвержденных алгоритмов хеширования, и поэтому возникает исключение.

Обходной путь прост: выберите другой алгоритм хеширования..NET Framework предоставляет множество других опций в System.Security.Cryptography пространство имен. Выберите один из алгоритмов семейства SHA. Я не могу представить причину, по которой вам пришлось бы использовать MD5, а не одну из альтернатив.

Вы можете использовать MD5Digest от Org.BouncyCastle.Crypto.Digests

MD5Digest hash = new MD5Digest();

public byte[] Hash(byte[] input)
{
     hash.BlockUpdate(input, 0, input.Length);
     byte[] result = new byte[hash.GetDigestSize()];
     hash.DoFinal(result, 0);
     return result;
}

public string Hash(string input)
{
     var data = System.Text.Encoding.Unicode.GetBytes(input);
     hash.BlockUpdate(data, 0, data.Length);
     byte[] result = new byte[hash.GetDigestSize()];
     hash.DoFinal(result, 0);

     return Hex.ToHexString(result).ToUpper();
}

Для целей криптографического хеширования вы можете использовать SHA1, SHA2 или SHA3 с HMAC, если это необходимо.

Если вы хотите использовать MD5 для целей, не связанных с криптографией , это нормально, но вам нужно будет предоставить собственную реализацию. Примеры включают:

  • Хеширование файлов для определения дубликатов
  • Реализации внутренних хеш-таблиц
  • Проверка файлов по их предоставленным хэшам MD5

Последний пункт вызывает сомнения; проверка хэшей SHA1/SHA2 была бы лучше, и это зависит от проверки (например, был ли он поврежден при передаче по сравнению с аутентификацией пакета).

Другие вопросы по тегам