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