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

Tink selbst ist nicht FIPS 140-2 validiert. Es werden jedoch mehrere FIPS unterstützt. 140–2 genehmigte Algorithmen und die zugrunde liegenden Implementierungen können validierten kryptografischen Module wie BoringSSLs BoringCrypto. Tink enthält ein WORKSPACE zum Erstellen von BoringSSL im FIPS-Modus

Der Arbeitsbereich bietet keine inhärente Garantie für die Verwendung von BoringSSL ist FIPS-konform. Wir empfehlen Ihnen dringend, die offizielle Sicherheitsrichtlinien für BoringCrypto.

Unterstützte Algorithmen

Die folgenden Algorithmen in Tink wurden gemäß FIPS 140-2 (weitere Informationen finden Sie unter) FIPS 140-2, Anhang A):

  • Authentifizierte Verschlüsselung <ph type="x-smartling-placeholder">
      </ph>
    • AES-GCM
    • AES-CTR-HMAC-SHA256
  • MAC <ph type="x-smartling-placeholder">
      </ph>
    • HMAC-SHA256
    • AES-CMAC
  • Digitale Signaturen <ph type="x-smartling-placeholder">
      </ph>
    • ECDSA
    • RSA-SSA-PKCS1
    • RSA-SSA-PSS

Nur FIPS-Modus in C++

Ob Sie gemäß FIPS 140-2 genehmigte Algorithmen verwenden und validierte -Implementierungen können Sie Tink im Nur-FIPS-Modus erstellen. Dies schränkt an genehmigte Algorithmen anpassen und prüft, ob Tink Kryptografie-Modul.

Dadurch ändert sich das Verhalten von Tink wie folgt:

  • Mit Register()-Funktionen werden nur Algorithmen registriert, die einen FIPS haben Implementierung überprüft. Das bedeutet, dass Sie nur Schlüsselsätze für Algorithmen, die ein validiertes kryptografisches Modul verwenden
  • Tink prüft, ob BoringSSL mit dem BoringCrypto-Modul erstellt wurde. Aufrufe von Primitiven geben den Fehler INTERNAL zurück, wenn das Modul verfügbar.
  • Die Verwendung von Primitiven in subtle/ ist auf Algorithmen beschränkt, die ein validiertes kryptografisches Modul.

BoringCrypto

Tink nutzt BoringCrypto in C++, um Zugriff auf ein validiertes kryptografisches Modul zu ermöglichen. Die aktuelle Für den Validierungsstatus gelten die folgenden zusätzlichen Einschränkungen Algorithmen im Nur-FIPS-Modus:

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

Um das BoringCrypto-Modul mit Bazel zu verwenden, können Sie die Kommentarzeichen aus dem Kommentar entfernen. local_repository-Definition für boringssl in der C++- ARBEITSBEREICH

Zur Kompilierungszeit aktivieren

Legen Sie bei der Kompilierung ein Flag fest, um Tink im Nur-FIPS-Modus zu erstellen:

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

Wenn Sie während der 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.

Auch wenn Sie Tink nicht im reinen FIPS-Modus erstellen, können Sie Implementierungen für einige Algorithmen validiert, jedoch nicht die Nutzung von anderen Algorithmen.

Während der Laufzeit aktivieren

Als Alternative zur Erstellung von Tink im reinen FIPS-Modus können Sie crypto::tink::RestrictToFips() von config/tink_fips.h, die ein Flag festlegt um die Einschränkungen für FIPS-Primitive zu aktivieren.

WARNUNG: Wenn Sie die Laufzeitoption verwenden, muss crypto::tink::RestrictToFips() muss aufgerufen werden, bevor Schlüsselmaterial verarbeitet, Key Manager registriert oder anderen Tink-Funktionen. Außerdem müssen Sie sicherstellen, dass BoringSSL die mit dem BoringCrypto-Modul erstellt wurden. Andernfalls können Sie in Tink Daten verarbeiten kann.