2009-06-02 5 views
16

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?

+0

Pregunta relacionada: http: // stackoverflow.com/preguntas/371534/asp-net-2-0-cifrado-RijndaelManaged-algoritmo-vs-FIPS –

+0

leí que se podía poner algo como esto en un fichero de configuración: Pero eso no parecía funcionar, la aplicación todavía estaba cerrada. – SwDevMan81

+1

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

Respuesta

16

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).

+0

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

+0

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. –

+0

(respuesta actualizada con información adicional) –

1

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.

1

Mi sitio tenía que vacilar para cumplir con FIPS en .net.

+0

¿De dónde obtuvo la exención? – SwDevMan81

+0

NETWARCOM? Este es el comando de la Armada que dicta los edictos de seguridad. –

Cuestiones relacionadas