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

Tink lui-même n'est pas certifié FIPS 140-2. Cependant, il est compatible avec plusieurs algorithmes approuvés par la norme FIPS 140-2, et les implémentations sous-jacentes peuvent utiliser des modules cryptographiques validés tels que BoringSSLs BoringCrypto. Tink inclut 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 conforme à la norme FIPS. Nous vous recommandons vivement de lire la politique de sécurité officielle de BoringCrypto.

Algorithmes compatibles

Les algorithmes suivants de Tink sont approuvés conformément à la norme FIPS 140-2 (pour en savoir plus, consultez la norme FIPS 140-2 de l'annexe A):

  • Chiffrement authentifié
    • AES-GCM
    • AES-CTR-HMAC-SHA256
  • MAC
    • HMAC-SHA256
    • AES-CMAC
  • Signatures numériques
    • ECDSA
    • RSA-SSA-PKCS1
    • RSA SSA-PSS

Mode FIPS uniquement en C++

Si vous devez utiliser des algorithmes approuvés par la norme FIPS 140-2 et des implémentations validées, vous pouvez créer Tink en mode FIPS uniquement. Cela limite l'utilisation aux algorithmes approuvés et vérifie si Tink utilise un module cryptographique validé.

Cela modifie le comportement de Tink de la manière suivante:

  • Les fonctions Register() n'enregistrent que des algorithmes dont la mise en œuvre est certifiée FIPS. Cela signifie que vous ne pouvez utiliser des collections de clés que pour les algorithmes qui utilisent un module cryptographique validé.
  • Tink vérifie si BoringSSL a été créé à l'aide du module BoringCrypto. Les appels aux primitives renvoient une erreur INTERNAL lorsque le module n'est pas disponible.
  • L'utilisation de primitives dans subtle/ est limitée aux algorithmes qui se servent d'un module cryptographique validé.

BoringCrypto

Tink utilise BoringCrypto en C++ pour fournir l'accès à un module cryptographique validé. Son état de validation actuel impose les contraintes supplémentaires suivantes aux algorithmes disponibles en mode FIPS uniquement:

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

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

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 souhaitez vérifier au moment de l'exécution si Tink a été intégré en mode FIPS uniquement, vous pouvez inclure l'en-tête internal/fips_utils.h qui fournit la constante kUseOnlyFips.

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

Activer au moment de l'exécution

Au lieu de compiler 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 pour activer les restrictions sur les primitives FIPS.

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