Używaj Tink, aby spełniać wymagania dotyczące zabezpieczeń FIPS 140-2

Sam plik Tink nie jest zweryfikowany zgodnie ze standardem FIPS 140-2. Jest jednak wyposażone w kilka zatwierdzonych przez FIPS140-2 algorytmów, a podstawowe implementacje mogą korzystać ze zweryfikowanych modułów kryptograficznych, takich jak BoringSSLs BoringCrypto. Tink zawiera przestrzeń WORKSPACE do tworzenia BoringSSL w trybie FIPS.

Pamiętaj, że obszar roboczy nie daje żadnej gwarancji, że korzystanie z BoringSSL jest zgodne z FIPS. Zdecydowanie zalecamy zapoznanie się z oficjalną polityką bezpieczeństwa BoringCrypto.

Obsługiwane algorytmy

Poniższe algorytmy w Tink są zatwierdzone zgodnie ze standardem FIPS 140-2 (więcej informacji znajdziesz w załączniku 140-2 A):

  • Szyfrowanie uwierzytelnione
    • AES-GCM
    • AES-CTR-HMAC-SHA256
  • Adres MAC
    • HMAC-SHA256
    • AES-CMAC
  • Podpisy cyfrowe
    • ECDSA
    • RSA-SSA-PKCS1,
    • RSA-SSA-PSS,

Tryb tylko FIPS w C++

Jeśli musisz używać zatwierdzonych algorytmów FIPS 140-2 i zweryfikowanych implementacji, możesz utworzyć Tink w trybie FIPS. Ogranicza to wykorzystanie do zatwierdzonych algorytmów oraz sprawdza, czy Tink używa zweryfikowanego modułu kryptograficznego.

Zmienia to działanie Tink w następujący sposób:

  • Funkcje Register() rejestrują tylko algorytmy z implementacją zweryfikowaną przez FIPS. Oznacza to, że możesz używać zestawów kluczy tylko w przypadku algorytmów używających zweryfikowanego modułu kryptograficznego.
  • Tink sprawdza, czy pakiet BoringSSL został skompilowany za pomocą modułu BoringCrypto. Gdy moduł jest niedostępny, wywołania elementów podstawowych zwracają błąd INTERNAL.
  • Korzystanie z elementów podstawowych w subtle/ jest możliwe tylko w przypadku algorytmów używających zweryfikowanego modułu kryptograficznego.

BoringCrypto

Tink używa metody BoringCrypto w języku C++, aby zapewniać dostęp do zweryfikowanego modułu kryptograficznego. Obecny stan weryfikacji wiąże się z następującymi dodatkowymi ograniczeniami na dostępnych algorytmów w trybie tylko FIPS:

  • Protokół AES-CMAC nie został zweryfikowany i jest niedostępny
  • Moduł RSA-SSA-PKCS1 jest ograniczony do 3072-bitowego modułu
  • Moduł RSA-SSA-PSS jest ograniczony do 3072-bitowego modułu

Aby korzystać z modułu BoringCrypto w Bazelu, możesz usunąć znacznik komentarza z definicji local_repository dla pola boringssl w przestrzeni roboczej C++.

Włącz podczas kompilacji

Aby utworzyć Tink w trybie FIPS, ustaw flagę w czasie kompilacji:

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

Jeśli chcesz sprawdzić w czasie działania, czy Tink został skompilowany w trybie FIPS, możesz dołączyć nagłówek internal/fips_utils.h, który zawiera stałą kUseOnlyFips.

Jeśli nie kompilujesz Tink w trybie tylko FIPS, wciąż może on używać zweryfikowanych implementacji na potrzeby niektórych algorytmów, ale nie ogranicza używania innych algorytmów.

Włącz w czasie działania

Zamiast tworzyć Tink w trybie FIPS, możesz wywołać instrukcję crypto::tink::RestrictToFips() z poziomu config/tink_fips.h, która ustawia flagę w czasie działania, aby włączać ograniczenia dotyczące obiektów podstawowych FIPS.

OSTRZEŻENIE: jeśli korzystasz z opcji środowiska wykonawczego, musisz wywołać funkcję crypto::tink::RestrictToFips() przed obsługą jakiegokolwiek materiału klucza, zarejestrowaniem menedżera kluczy lub innymi funkcjami Tink. Dodatkowo musisz się upewnić, że program BoringSSL został utworzony z użyciem modułu BoringCrypto. W przeciwnym razie Tink nie umożliwi przetwarzania żadnych danych.