使用 Tink 符合 FIPS 140-2 安全性規定

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++ 中 boringssllocal_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 不允許您 處理任何資料