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

Разница между SHA256CryptoServiceProvider и SHA256Managed

Класс .Net SHA256Managed поддерживается во всех версиях рамок, а класс SHA256CryptoServiceProvider поддерживается только из фреймворка 3.5 и выше.

Почему вводится SHA256CryptoServiceProvider? Кажется, он делает то же самое, что и класс SHA256Managed, но последний работает лучше.

Что мне не хватает и почему я должен использовать SHA256CryptoServiceProvider?

4b9b3361

Ответ 1

Это не имеет ничего общего с производительностью - SHA256CryptoServiceProvider использует сертифицированный FIPS 140-2 (FIPS = Federal Information Processing Standards) Crypto Service Provider (CSP), а SHA256Managed - нет. SHA256Managed - это чистая управляемая реализация, а SHA256CryptoServiceProvider, по-видимому, одно и то же, но обертывает CryptoAPI.

Это имеет серьезные последствия, если вы собираетесь работать в федеральных или федеральных системах штата, поскольку это требование для поставщиков программного обеспечения. В глазах NIST использование криптографического модуля, не одобренного FIPS, как реализация SHA256Managed, ничем не отличается от того, что вообще не используется шифрование.

Если вам не нужна проверка FIPS, тогда SHA256Managed в порядке.

Все, что заканчивается на Cng, означает "Crytographic API: следующее поколение", которое ссылается на новые протоколы, которые правительство США называет криптографическими алгоритмами Suite B, но независимо от версии .Net Framework нет поддержки до Vista/Server 2008).

Поэтому используйте алгоритм и реализацию, которые подходят для того, что вы защищаете. Вы будете ограничены тем, какую версию каркаса .Net вы используете, в какой операционной системе (ым) работает ваш код, и нужно ли вам использовать утвержденный модуль FIPS 140-2/140-3 (в 2011 году), Если для требуемой комбинации не поддерживается поддерживаемый класс .Net Framework, доступны доступные сторонние модули, и вы также можете отказаться от использования неуправляемого CAPI, если это необходимо.

Если у вас есть бессонница, вы можете найти лекарство от http://csrc.nist.gov/groups/STM/cmvp/standards.html#02

Ответ 2

Я хотел добавить некоторую информацию об этом, так как я просто столкнулся с проблемой, которая потребовала от меня перейти на использование версии CSP. Извините, я не могу добавить комментарий (rep too low).

Для тестирования вы можете быстро включить FIPS, установив HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy\Enabled на 1. Затем загрузите Visual Studio и попытайтесь построить проект, который использует SHA256Managed. Вы получите ошибки, говорящие: "Эта реализация не является частью криптографических алгоритмов, проверенных FIPS Windows Platform". Фактически, вы получите это для любых * управляемых алгоритмов криптографии.

Теперь замените SHA256Managed на SHA256CryptoServiceProvider и перестройте. Пуф, ошибки уходят!

Примечание. Если вы развернули программу, а клиент включил FIPS, она выкинет InvalidOperationException с тем же сообщением об ошибке выше.

Ответ 3

Оба будут генерировать один и тот же хеш. Единственное отличие состоит в том, что SHA256Managed - управляемая реализация хэширования.

Также обратите внимание, что SHA256CryptoServiceProvider использует операторы криптографической службы операционной системы, и даже если у вас установлен .NET 3.5, для работы потребуется Windows XP с SP3, 7 или 2008.

Что касается преимуществ, использование SHA256CryptoServiceProvider должно дать вам лучшую производительность, чем SHA256Managed.