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

Tink no cuenta con la validación FIPS 140-2. Sin embargo, es compatible con varios algoritmos aprobados por el estándar FIPS 140-2, 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 lugar de trabajo no ofrece ninguna garantía inherente de que tu uso de BoringSSL cumpla con el estándar FIPS. Te recomendamos que leas la política de seguridad oficial de BoringCrypto.

Algoritmos compatibles

Los siguientes algoritmos de Tink están aprobados según el estándar FIPS 140-2 (obtén más información en el Anexo A del FIPS 140-2):

  • 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 implementaciones validadas y algoritmos aprobados por el estándar FIPS 140-2, puedes compilar Tink en modo solo para FIPS. Esto restringe el uso a los algoritmos aprobados y verifica si Tink usa un módulo criptográfico validado.

Esto cambia el comportamiento de Tink de las siguientes maneras:

  • Las funciones Register() solo registran algoritmos que tienen una implementación validada por FIPS. Esto significa que solo puedes utilizar conjuntos de claves para los algoritmos que usan un módulo criptográfico validado.
  • Tink verifica si se compiló BoringSSL con el módulo BoringCrypto. Las llamadas a las primitivas muestran un error INTERNAL cuando el módulo no está disponible.
  • El uso de primitivas en subtle/ está restringido a algoritmos que utilizan un módulo criptográfico validado.

BoringCrypto

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

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

Para usar el módulo BoringCrypto con Bazel, puedes quitar el comentario de la definición de local_repository de boringssl en el espacio de trabajo de C++.

Habilitar en el tiempo de compilación

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

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

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

Si no estás compilando Tink en el modo de solo FIPS, igualmente puede usar implementaciones validadas para algunos algoritmos, pero no restringir el uso de otros.

Habilitar en el entorno de ejecución

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

ADVERTENCIA: Si usas la opción de tiempo de ejecución, se debe llamar a crypto::tink::RestrictToFips() antes de controlar cualquier material de clave, registrar el administrador de claves o en otras funciones de Tink. Además, debes asegurarte de que BoringSSL se haya compilado con el módulo BoringCrypto. De lo contrario, Tink no te permitirá procesar ningún dato.