Diferencia entre SHA256CryptoServiceProvider y SHA256Managed

La clase .Net SHA256Managed es compatible con todas las versiones del marco, mientras que la clase SHA256CryptoServiceProvider solo es compatible con el marco 3.5 y superior.

¿Por qué se presenta el SHA256CryptoServiceProvider ? Parece hacer lo mismo que la clase SHA256Managed , pero esta última funciona mejor.

¿Qué me falta y por qué debo usar el SHA256CryptoServiceProvider ?

No tiene nada que ver con el rendimiento: SHA256CryptoServiceProvider utiliza el proveedor de servicios SHA256Managed (CSP) validado por FIPS 140-2 (FIPS = normas de procesamiento de información federal), mientras que SHA256Managed no. SHA256Managed es una implementación puramente gestionada, mientras que SHA256CryptoServiceProvider hace presumiblemente lo mismo pero envuelve la CryptoAPI.

Esto tiene grandes ramificaciones si va a operar en los sistemas federales de los Estados Unidos o en muchos de los gobiernos estatales, ya que es un requisito para los proveedores de software. A los ojos de NIST, el uso de un módulo criptográfico no validado por FIPS, como la implementación de SHA256Managed , no es diferente a no usar ningún cifrado.

Si no le importa la validación FIPS, entonces el SHA256Managed está bien.

Todo lo que termina en Cng significa “Crytographic API: Next Generation” que se refiere a los protocolos más nuevos que el gobierno de los EE. UU. Llama algoritmos criptográficos de Suite B, pero independientemente de la versión de .Net framework, no hay soporte antes de Vista / Server 2008).

Entonces, use el algoritmo y la implementación que sean apropiados para lo que está protegiendo. Estará limitado por la versión de .Net framework que esté utilizando, en qué sistemas operativos se ejecuta su código y si necesita usar el módulo (s) validado FIPS 140-2 / 140-3 (en 2011) . Si no hay una clase de .Net Framework compatible para la combinación que necesita, hay módulos de terceros disponibles, y también puede desplegar y usar el CAPI no administrado si es necesario.

Si tiene insomnio, puede encontrar una cura en http://csrc.nist.gov/groups/STM/cmvp/standards.html#02

Quería agregar algo de información sobre esto, ya que me encontré con un problema que requería cambiar a la versión CSP. Lo sentimos, no puedo agregar un comentario (representante demasiado bajo).

Para probar esto, puede habilitar FIPS rápidamente estableciendo HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ FipsAlgorithmPolicy \ Enabled en 1. Luego, inicie Visual Studio e intente crear un proyecto que use SHA256Managed . Recibirá errores que dicen “Esta implementación no es parte de los algoritmos criptográficos validados FIPS de la plataforma Windows”. De hecho, obtendrá esto para cualquier * algoritmo de criptografía administrada.

Ahora cambie SHA256Managed con SHA256CryptoServiceProvider y reconstrúyalo. Poof, los errores desaparecen!

Nota: Si ha implementado un progtwig y un cliente habilita FIPS, lanzará una InvalidOperationException con el mismo mensaje de error anterior.

Ambos generarán el mismo hash. La única diferencia es que SHA256Managed es una implementación administrada de hash.

También tenga en cuenta que SHA256CryptoServiceProvider usa proveedores de servicios criptográficos del sistema operativo e incluso si tiene instalado .NET 3.5, necesitará Windows XP con SP3, 7 o 2008 para funcionar.

En cuanto a las ventajas, el uso de SHA256CryptoServiceProvider debe proporcionarle un mejor rendimiento que SHA256Managed .