Utiliser Tink pour répondre aux exigences de sécurité FIPS 140-2

Tink lui-même n'est pas Certification FIPS 140-2 Il est toutefois compatible avec plusieurs 140-2 algorithmes approuvés et les implémentations sous-jacentes peuvent utiliser des modules cryptographiques validés tels que BoringSSLs BoringCrypto Tink comprend un WORKSPACE pour créer BoringSSL en mode FIPS

Notez que l'espace de travail ne fournit aucune garantie inhérente que votre utilisation de BoringSSL est en cours. est conforme à la norme FIPS. Nous vous recommandons vivement de lire les documents règle de sécurité pour BoringCrypto.

Algorithmes compatibles

Les algorithmes Tink suivants sont approuvés FIPS 140-2 (pour plus d'informations, consultez la page FIPS 140-2 annexe A):

  • Chiffrement authentifié <ph type="x-smartling-placeholder">
      </ph>
    • AES-GCM
    • AES-CTR-HMAC-SHA256
  • MAC <ph type="x-smartling-placeholder">
      </ph>
    • HMAC-SHA256
    • AES-CMAC
  • Signatures numériques <ph type="x-smartling-placeholder">
      </ph>
    • ECDSA
    • RSA-SSA-PKCS1
    • RSA-SSA-PSS

Mode FIPS uniquement en C++

Si vous devez utiliser des algorithmes approuvés FIPS 140-2 et vous pouvez créer Tink en mode FIPS uniquement. Cela limite aux algorithmes approuvés et vérifie si Tink utilise module cryptographique.

Cela modifie le comportement de Tink de différentes manières:

  • Les fonctions Register() n'enregistrent que les algorithmes dotés d'un certificat FIPS mise en œuvre validée. Cela signifie que vous pouvez uniquement utiliser Collections de clés pour les algorithmes qui utilisent un module cryptographique validé.
  • Tink vérifie si BoringSSL a été créé avec le module BoringCrypto. Les appels aux primitives renvoient une erreur INTERNAL lorsque le module n'est pas disponibles.
  • L'utilisation des primitives dans subtle/ est limitée aux algorithmes qui utilisent un module cryptographique validé.

BoringCrypto

Tink utilise BoringCrypto en C++ pour fournir l’accès à un module cryptographique validé. Sa valeur actuelle impose les contraintes supplémentaires suivantes sur la disponibilité en mode FIPS uniquement:

  • L'AES-CMAC n'a pas été validé et n'est pas disponible
  • RSA-SSA-PKCS1 est limité au module de 3 072 bits
  • RSA-SSA-PSS est limité au module de 3 072 bits

Pour utiliser le module BoringCrypto avec Bazel, vous pouvez annuler la mise en commentaire Définition de local_repository pour boringssl en C++ ESPACE DE TRAVAIL.

Activer au moment de la compilation

Pour compiler Tink en mode FIPS uniquement, définissez un indicateur au moment de la compilation:

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

Si vous voulez vérifier au moment de l'exécution si Tink a été conçu en mode FIPS uniquement, vous pouvez inclure l'en-tête internal/fips_utils.h, qui indique la constante kUseOnlyFips

Si vous ne créez pas Tink en mode FIPS uniquement, il peut quand même utiliser des implémentations validées pour certains algorithmes, sans limiter l'utilisation d'autres algorithmes.

Activer au moment de l'exécution

Au lieu de créer Tink en mode FIPS uniquement, vous pouvez appeler crypto::tink::RestrictToFips() à partir de config/tink_fips.h, qui définit un indicateur au moment de l'exécution afin d'appliquer les restrictions aux primitives FIPS.

AVERTISSEMENT: Si vous utilisez l'option d'exécution, crypto::tink::RestrictToFips() doit être appelé avant de traiter tout matériel de clé, d'enregistrer le gestionnaire de clés ou d'autres fonctionnalités de Tink. De plus, vous devez vous assurer que BoringSSL a a été créé avec le module BoringCrypto. Sinon, Tink ne vous permet pas traiter des données.