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.