Tink 本身與 已驗證 FIPS 140-2。但它支援多種 FIPS 140 到 2 個經過核准的演算法和基礎實作「可以」利用 經過驗證的加密編譯模組,例如 BoringSSLs BoringCrypto:Tink 包含 WORKSPACE,用於在 FIPS 模式中建構 BoringSSL。
請注意,此工作區無法保證使用 BoringSSL 符合 FIPS 規範強烈建議您詳閱 安全性政策。
支援的演算法
以下 Tink 演算法是根據 FIPS 140-2 (詳情請參閱: FIPS 140-2 附錄 A):
- 經過驗證的加密
- AES-GCM
- AES-CTR-HMAC-SHA256
- MAC
- HMAC-SHA256
- AES-CMAC
- 數位簽章
- ECDSA
- RSA-SSA-PKCS1
- RSA-SSA-PSS
C++ 中的僅限 FIPS 模式
如果您需要使用 FIPS 140-2 核准的演算法並驗證 實作項目,您可以在僅限 FIPS 的模式下建構 Tink。這項限制 用於核准的演算法,「並」檢查 Tink 是否使用經過驗證的演算法 加密編譯模組
這會以下列方式變更 Tink 的行為:
Register()
函式只會註冊具有 FIPS 的演算法 經過驗證的導入程序。換句話說,您只能使用 使用經過驗證的加密編譯模組的演算法金鑰組。- Tink 會檢查 BoringSSL 是否已使用 BoringCrypto 模組建構。
對基元的呼叫在模組並非使用時會傳回
INTERNAL
錯誤 廣告。 - 在
subtle/
中使用基元只能使用 經過驗證的加密編譯模組
BoringCrypto
Tink 使用 BoringCrypto ,以提供經過驗證的加密編譯模組。是目前相片 驗證狀態對可用作業設有下列額外限制 演算法:
- AES-CMAC 未經驗證,因此無法使用
- RSA-SSA-PKCS1 僅限於 3072 位元模數
- RSA-SSA-PSS 僅限於 3072 位元模數
如要搭配 Bazel 使用 BoringCrypto 模組,您可以取消註解
C++ 中 boringssl
的 local_repository
定義
WORKSPACE。
在編譯期間啟用
如要在僅限 FIPS 模式下建構 Tink,請在編譯時設定旗標:
bazel build ... --//third_party/tink/cc/config:use_only_fips=True
如果您要在執行階段檢查 Tink 是否已以僅限 FIPS 模式建構,
您可以加入提供常數的標頭 internal/fips_utils.h
kUseOnlyFips
。
如果「不」以僅限 FIPS 模式建構 Tink,仍可利用 已驗證「部分」演算法的實作,但不會限制使用 也就是其他演算法
在執行階段啟用
除了在僅限 FIPS 模式下建構 Tink 之外,您也可以呼叫
config/tink_fips.h
中的 crypto::tink::RestrictToFips()
,用於設定標記
來限制 FIPS 基元
警告:如果使用執行階段選項,則請設為 crypto::tink::RestrictToFips()
必須先呼叫,來處理任何金鑰內容、註冊金鑰管理工具,或
其他 Tink 功能。此外,您也必須確定 BoringSSL 已
是使用 BoringCrypto 模組所建構,否則 Tink 不允許您
處理任何資料