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.