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.