Разница между SHA256CryptoServiceProvider и SHA256Managed
Класс .Net SHA256Managed
поддерживается во всех версиях рамок, а класс SHA256CryptoServiceProvider
поддерживается только из фреймворка 3.5 и выше.
Почему вводится SHA256CryptoServiceProvider
? Кажется, он делает то же самое, что и класс SHA256Managed
, но последний работает лучше.
Что мне не хватает и почему я должен использовать SHA256CryptoServiceProvider
?
Ответы
Ответ 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
.