Tink verwenden, um FIPS 140-2-Sicherheitsanforderungen zu erfüllen

Tink selbst ist nicht gemäß FIPS 140-2 validiert. Sie unterstützt jedoch mehrere gemäß FIPS 140-2 zugelassene Algorithmen und die zugrunde liegenden Implementierungen können validierte kryptografische Module wie BoringSSLs BoringCrypto verwenden. Tink enthält einen ARBEITSBEREICH zum Erstellen von BoringSSL im FIPS-Modus.

Beachten Sie, dass der Arbeitsbereich keine grundsätzliche Garantie dafür bietet, dass Ihre Verwendung von BoringSSL FIPS-konform ist. Wir empfehlen dringend, die offizielle Sicherheitsrichtlinie für BoringCrypto zu lesen.

Unterstützte Algorithmen

Die folgenden Algorithmen in Tink sind nach FIPS 140-2 genehmigt (weitere Informationen finden Sie in Annex A FIPS 140-2):

  • Authentifizierte Verschlüsselung
    • AES-GCM
    • AES-CTR-HMAC-SHA256
  • Mac
    • HMAC-SHA256
    • AES-CMAC
  • Digitale Signaturen
    • ECDSA
    • RSA-SSA-PKCS1
    • RSA-SSA-PSS

Nur FIPS-Modus in C++

Wenn Sie gemäß FIPS 140-2 genehmigte Algorithmen und validierte Implementierungen verwenden müssen, können Sie Tink im Nur-FIPS-Modus erstellen. Dies beschränkt die Nutzung auf genehmigte Algorithmen und prüft, ob Tink ein validiertes kryptografisches Modul verwendet.

Dadurch wird das Verhalten von Tink auf folgende Weise geändert:

  • Register()-Funktionen registrieren nur Algorithmen mit einer FIPS-validierten Implementierung. Dies bedeutet, dass Sie Schlüsselsätze nur für Algorithmen verwenden können, die ein validiertes kryptografisches Modul nutzen.
  • Tink prüft, ob BoringSSL mit dem BoringCrypto-Modul erstellt wurde. Aufrufe von Primitiven geben den Fehler INTERNAL zurück, wenn das Modul nicht verfügbar ist.
  • Die Verwendung von Primitiven in subtle/ ist auf Algorithmen beschränkt, die ein validiertes kryptografisches Modul verwenden.

BoringCrypto

Tink verwendet BoringCrypto in C++, um Zugriff auf ein validiertes kryptografisches Modul zu ermöglichen. Aufgrund des aktuellen Validierungsstatus gelten die folgenden zusätzlichen Einschränkungen für verfügbare Algorithmen im Nur-FIPS-Modus:

  • AES-CMAC wurde nicht validiert und ist nicht verfügbar
  • RSA-SSA-PKCS1 ist auf einen 3072-Bit-Modulus beschränkt.
  • RSA-SSA-PSS ist auf einen Modulus von 3072 Bit beschränkt.

Wenn Sie das BoringCrypto-Modul mit Bazel verwenden möchten, können Sie die Kommentarzeichen der local_repository-Definition für boringssl im C++-ARBEITSBEREICH entfernen.

Bei Kompilierungszeit aktivieren

Um Tink im Nur-FIPS-Modus zu erstellen, setzen Sie bei der Kompilierung ein Flag:

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

Wenn Sie zur Laufzeit prüfen möchten, ob Tink im Nur-FIPS-Modus erstellt wurde, können Sie den Header internal/fips_utils.h einfügen, der die Konstante kUseOnlyFips bereitstellt.

Wenn Sie Tink nicht im Nur-FIPS-Modus erstellen, können für einige Algorithmen validierte Implementierungen verwendet werden, die Nutzung anderer Algorithmen wird jedoch nicht eingeschränkt.

Bei Ausführung aktivieren

Alternativ zum Erstellen von Tink im Nur-FIPS-Modus können Sie crypto::tink::RestrictToFips() aus config/tink_fips.h aufrufen. Dadurch wird zur Laufzeit ein Flag festgelegt, um die Einschränkungen für FIPS-Primitive zu aktivieren.

WARNUNG: Wenn Sie die Laufzeitoption verwenden, muss crypto::tink::RestrictToFips() aufgerufen werden, bevor Schlüsselmaterial verarbeitet, ein Schlüsselmanager registriert oder andere Tink-Funktionen registriert werden. Außerdem müssen Sie dafür sorgen, dass BoringSSL mit dem BoringCrypto-Modul erstellt wurde. Andernfalls lässt Tink keine Daten zu.