Cumplimiento de FIPS con HMACSHA1 vs HMACSHA256 / HMACSHA512

3

Mi organización tiene una política de grupo que se aplica a los servidores que aplican el cumplimiento de FIPS (política de Windows AD).

En .NET, HMACSHA1 es uno de los algoritmos de cifrado / hash que cumple con FIPS. No entiendo cómo HMACSHA256 o HMACSHA512 no está también en esta lista de cumplimiento de FIPS. ¿Es HMACSHA1 de alguna manera un hash más fuerte que HMACSHA512? ¿Cómo podría ser esto?

Lista de cumplimiento FIPS para .NET: enlace

    
pregunta mark 21.04.2016 - 20:29
fuente

2 respuestas

6

"Cumplimiento de FIPS" es más que el algoritmo. Se trata de implementaciones . Recibir el distintivo de "cumplimiento" es un proceso largo, complejo y muy costoso; su significado conceptual es que hay algunas razones sólidas para creer que la implementación es correcta y segura y cumple una serie de propiedades de seguridad. Dado que no sabemos realmente cómo demostrar que el software es correcto en general, la mayor parte del cumplimiento de FIPS se realiza a través de auditorías y análisis del proceso de desarrollo. Esto es bastante minucioso; esto incluye, por ejemplo, asegurarse de que durante el desarrollo se usó el control de versiones del código fuente, con la atribución adecuada de cada línea de código a un desarrollador debidamente identificado, para quien se realizaron algunas verificaciones de antecedentes.

En la práctica, lograr el cumplimiento implica producir una gran cantidad de papeleo (muchos miles de páginas) e incluso más auditorías, por un costo que fácilmente llega a $ 50000 o más, y toma meses. Los costos crecen rápidamente con el alcance. Al parecer, en 2007 (desde su enlace), Microsoft pasó por toda la prueba de HMAC / SHA-1 pero no de HMAC / SHA-256 o HMAC / SHA-512, por lo que el primero está "validado por FIPS" pero no el este último.

Esto puede estar relacionado con el hecho de que en ese momento, .NET podría usar la implementación SHA-1 de la capa Win32 (CryptoAPI), en código nativo, mientras que SHA-256 y SHA-512 eran códigos "administrados" ; el cumplimiento de FIPS para HMAC / SHA-256 con la implementación administrada ( SHA256Managed ) habría generado el tiempo de ejecución de CLR, incluido el compilador JIT, dentro del alcance de la auditoría, y el precio probablemente se habría disparado. Se agregó una implementación nativa de SHA-256 en .NET 3.5 ( SHA256Cng ) pero se lanzó solo a fines de 2007, demasiado tarde para el cumplimiento que se muestra en la lista a la que se vincula.

    
respondido por el Tom Leek 21.04.2016 - 20:45
fuente
4

Aquí hay dos nociones diferentes de cumplimiento:

  • Utilizando un algoritmo compatible: el término oficial es "Aprobado". Los algoritmos hash para HMAC están aprobados si se enumeran en FIPS 180-4 ( o versiones anteriores). SHA-1, SHA-256 y SHA-512 son todos algoritmos hash seguros aprobados por FIPS y la función HMAC basada en ellos son, por lo tanto, funciones HMAC aprobadas por FIPS.
  • Utilizando una implementación complementaria: el término oficial está "validado". Para validarse, una implementación debe someterse a un proceso de certificación en el que el código se prueba y analiza, y el proveedor del producto debe enviar la documentación correspondiente. La parte técnica del proceso de validación no es muy difícil a menos que vaya a niveles de validación superiores a 1 (que son básicamente pruebas funcionales, es decir, que verifique que la implementación devuelve los valores correctos), pero tiene que hacerse a través de los canales formales. tiene que volver a hacerse cada vez que cambie el código.

Aparentemente (no he revisado revisado ), en esta implementación, solo las funciones basadas en SHA-1 se han sometido al proceso de prueba formal, por lo que la implementación solo se valida para esas funciones. Esta es una implementación validada de HMAC-SHA-1, que es un algoritmo aprobado. Los algoritmos basados en SHA-2 están aprobados, pero esta implementación de los algoritmos no está validada.

    
respondido por el Gilles 21.04.2016 - 20:47
fuente

Lea otras preguntas en las etiquetas