Usa Tink para cumplir con los requisitos de seguridad del estándar FIPS 140-2

Tink en sí no es Con validación de FIPS 140‐2. Sin embargo, admite varios FIPS Entre 140 y 2 algoritmos aprobados y las implementaciones subyacentes pueden usar módulos criptográficos validados, como BoringSSLs BoringCrypto. Tink incluye un WORKSPACE para compilar BoringSSL en modo FIPS

Ten en cuenta que el espacio de trabajo no garantiza de forma inherente que el uso de BoringSSL cumple con el estándar FIPS. Te recomendamos que leas el política de seguridad de BoringCrypto.

Algoritmos compatibles

Los siguientes algoritmos en Tink se aprueban de acuerdo con lo siguiente: FIPS 140-2 (más información en FIPS 140-2, Anexo A):

  • Encriptación autenticada
    • AES-GCM
    • AES-CTR-HMAC-SHA256
  • MAC
    • HMAC‑SHA256
    • AES-CMAC
  • Firmas digitales
    • ECDSA
    • RSA-SSA-PKCS1
    • RSA-SSA-PSS

Modo solo FIPS en C++

Si debes usar algoritmos aprobados por FIPS 140-2 y validados puedes compilar Tink en modo solo FIPS. Esto restringe uso a algoritmos aprobados y comprueba si Tink usa un modelo criptográfico.

Esto cambia el comportamiento de Tink de las siguientes maneras:

  • Las funciones Register() solo registran algoritmos que tienen un estándar implementación validada. Esto significa que solo puedes usar Conjuntos de claves para algoritmos que usan un módulo criptográfico validado.
  • Tink verifica si BoringSSL se compiló con el módulo BoringCrypto. Las llamadas a primitivas devuelven un error INTERNAL cuando el módulo no está disponibles.
  • El uso de primitivas en subtle/ está restringido a algoritmos que usan un módulo criptográfico validado.

BoringCrypto

Tink usa BoringCrypto en C++ para proporcionar acceso a un módulo criptográfico validado. Su actual el estado de validación impone las siguientes restricciones adicionales cuando están en modo solo FIPS:

  • AES-CMAC no se validó y no está disponible
  • RSA-SSA-PKCS1 está restringido al módulo de 3,072 bits.
  • RSA-SSA-PSS está restringido al módulo de 3,072 bits.

Para usar el módulo BoringCrypto con Bazel, puedes quitar los comentarios del Definición de local_repository para boringssl en C++ WORKSPACE

Habilitar en el tiempo de compilación

Para compilar Tink en modo solo FIPS, configura una marca en el tiempo de compilación:

bazel build ... --//third_party/tink/cc/config:use_only_fips=True

Si deseas comprobar durante el tiempo de ejecución si Tink se compiló en modo de solo FIPS, puedes incluir el encabezado internal/fips_utils.h, que proporciona la constante kUseOnlyFips

Si no compilas Tink en el modo de solo FIPS, aún puede utilizar implementaciones validadas para algunos algoritmos, pero no restringen el uso de con otros algoritmos.

Habilitar en tiempo de ejecución

Como alternativa a crear Tink en el modo solo FIPS, puedes llamar crypto::tink::RestrictToFips() de config/tink_fips.h, que establece una marca en el tiempo de ejecución para habilitar las restricciones a las primitivas del FIPS.

ADVERTENCIA: Si usas la opción de tiempo de ejecución, crypto::tink::RestrictToFips() se debe llamar antes de manipular cualquier material de claves, registrar un administrador de claves o otras funcionalidades de Tink. Además, debes asegurarte de que BoringSSL tenga se compiló con el módulo BoringCrypto; de lo contrario, Tink no te permite procesar cualquier dato.