En este momento, la única manera en que puedo obtener el algoritmo RijndaelManaged para trabajar en una computadora con la Configuración de seguridad local para FIPS activada, es disable it. Es una computadora del gobierno, así que no estoy seguro de cómo volará. He visto publicaciones en el msdn blog sites que dicen que están trabajando en una versión compatible con AES FIPS, pero parece que no puedo encontrar nada más. ¿Alguien sabe cuándo puede pasar esto?¿Cuándo será el algoritmo C# AES compatible con FIPS?
Respuesta
Nunca me di cuenta de esto antes de esta pregunta, pero tienes razón. El constructor tiene esta:
public RijndaelManaged()
{
if (Utils.FipsAlgorithmPolicy == 1)
{
throw new InvalidOperationException(Environment.GetResourceString("Cryptography_NonCompliantFIPSAlgorithm"));
}
}
System.Security.Cryptography.AesManaged tiene algo similar:
public AesManaged()
{
if (CoreCryptoConfig.EnforceFipsAlgorithms)
{
throw new InvalidOperationException(SR.GetString("Cryptography_NonCompliantFIPSAlgorithm"));
}
this.m_rijndael = new RijndaelManaged();
this.m_rijndael.BlockSize = this.BlockSize;
this.m_rijndael.KeySize = this.KeySize;
}
¿Ha intentado System.Security.Cryptography.AesCryptoServiceProvider? Debería funcionar ya que usa la implementación FIPS AES basada en CAPI integrada en Windows.
This question en el foro Microsoft .NET Base Class Library analiza qué algoritmos son compatibles con FIPS y tiene buenos enlaces.
Parece que Microsoft está haciendo a consistent effort to obey the setting de HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Lsa \ FIPSAlgorithmPolicy en las máquinas y el uso de la API BCryptGetFipsAlgorithmMode para la post-Vista pre-Vista.
Supongo que hay un esfuerzo no trivial involucrado en certificar una implementación como FIPS compatible, es por eso que Microsoft probablemente no quiere repetir el proceso y solo ofrece el AesCryptoServiceProvider para los clientes que absolutamente necesitan este requisito.
This MSDN blog post tiene un comentario que hace que sea más claro:
La forma más fácil de averiguar si un algoritmo es compatible o no, es a vistazo al sufijo. Ninguno de los * Los tipos administrados tienen certificación FIPS. Sin embargo, los tipos * CryptoServiceProvider y * Cng pueden ser certificados por FIPS . Si implementan un algoritmo que permite FIPS, y son utilizando los proveedores predeterminados de Microsoft, , entonces lo estarán. Por ejemplo, SHA256Administración no es (porque está * Administrado). SHA256CryptoServiceProvider y SHA256Cng son.
MD5CryptoServiceProvider no es (porque MD5 no es un algoritmo FIPS).
Primero probamos el AesCryptoServiceProvider, pero no pudimos obtener los resultados de cifrado/descifrado deseados y no creo que sea compatible con el marco compacto. Todo con el RijndealManaged parecía estar bien, hasta que nos encontramos con este problema – SwDevMan81
Por "resultados", ¿te refieres a rendimiento? Parece que Microsoft no quiere pasar por un proceso de validación de implementación para algo más allá de su CAPI para la hora actual. Microsoft claramente se desvió de (probablemente) cumplir con los clientes de Federal que querían un solo bit de política que pudieran establecer para prohibir las soluciones que no eran FIPS. Puede usar una biblioteca como BouncyCastle (http://www.bouncycastle.org/csharp/index.html) que ignora este bit si simplemente desea utilizar una implementación de FIPS administrada. –
(respuesta actualizada con información adicional) –
El AesCryptoServiceProvider no administrado está certificado si el SO está certificado como lo llama el sistema operativo. Y también será un sitio maldito más rápido, a costa de la compatibilidad multiplataforma.
Mi sitio tenía que vacilar para cumplir con FIPS en .net.
¿De dónde obtuvo la exención? – SwDevMan81
NETWARCOM? Este es el comando de la Armada que dicta los edictos de seguridad. –
- 1. ¿Cuándo IE6 ya no será compatible?
- 2. Algoritmo de descifrado AES
- 3. ¿Qué significa que PowerShell 2.0 será "compatible con firewall"?
- 4. Código AES codificado/descifrado compatible con Iphone, Android, Windows/XP
- 5. cifrar-descifrar con AES usando C/C++
- 6. Cifrado AES y C#
- 7. java.security.NoSuchAlgorithmException: No se puede encontrar ningún proveedor compatible con AES/ECB/PKCS7PADDING
- 8. ¿El iPhone es compatible con el cifrado AES acelerado por hardware?
- 9. Excepción en el algoritmo de descifrado AES en java
- 10. C++ AES Cifrado clase
- 11. Problema con algoritmos criptográficos validados FIPS
- 12. ¿qué significa "compatible con el diseño C"?
- 13. ¿Cómo puedo descifrar una cadena usando el algoritmo AES en C#?
- 14. ¿ASP.NET es compatible con C++?
- 15. ASP.NET 2.0 RijndaelArreglo de cifrado administrado vs. FIPS
- 16. serialización compatible con PHP de C/C++
- 17. Cómo hacer el descifrado AES con OpenSSL
- 18. Cifrado compatible entre Android y C#
- 19. ¿Cuándo un bounds.origin de UIView no será (0, 0)?
- 20. ¿Cuándo será necesario crear un proceso separado en una aplicación?
- 21. diferencia entre el iPhone AES (Objetivo-c) y Java
- 22. Traducir C a C# y HLSL: ¿será esto posible?
- 23. ¿Hay un algoritmo hash alternativo para MD5 para sistemas habilitados para FIPS?
- 24. SQLite en C y compatible con REGEXP
- 25. Es nuevo C++ compatible con versiones anteriores
- 26. clase enumerable C# - compatible con VBA
- 27. ¿Se puede hacer que el ASP.NET ScriptManager funcione con la política de seguridad FIPS de Windows?
- 28. ¿Cuál será el futuro de C# en 10 años?
- 29. ¿cuál será el nombre oficial de C++ 0x?
- 30. OpenSSL con FIPS compilación cruzada para iOS ARMv7
Pregunta relacionada: http: // stackoverflow.com/preguntas/371534/asp-net-2-0-cifrado-RijndaelManaged-algoritmo-vs-FIPS –
leí que se podía poner algo como esto en un fichero de configuración: configuration> Pero eso no parecía funcionar, la aplicación todavía estaba cerrada. –
SwDevMan81
Ok, conseguí que el indicador forceFIPSPolicy funcionara, resulta que necesitaba agregarlo debajo de todas las etiquetas en la sección de configuración del archivo exe.config, no parece funcionar en la parte superior, encima de configSections y userSettings. Espero que ayude a otros. – SwDevMan81