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 Annex A):

  • 認証による暗号化 <ph type="x-smartling-placeholder">
      </ph>
    • AES-GCM
    • AES-CTR-HMAC-SHA256
  • MAC <ph type="x-smartling-placeholder">
      </ph>
    • HMAC-SHA256
    • AES-CMAC
  • デジタル署名 <ph type="x-smartling-placeholder">
      </ph>
    • 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 を使用します。 を使用して、検証済みの暗号モジュールにアクセスできるようにします。現在 検証ステータスでは、使用可能なリソースに次の追加制約が FIPS 専用モードの場合、次の点に注意してください。

  • AES-CMAC は検証されていないため、使用できません
  • RSA-SSA-PKCS1 は 3,072 ビットのモジュラスに制限されています
  • RSA-SSA-PSS は 3,072 ビットのモジュラスに制限されています

Bazel で BoringCrypto モジュールを使用するには、 C++ での boringssllocal_repository 定義 ワークスペース

コンパイル時に有効にする

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 が VPC ネットワークと Tink は、BoringCrypto モジュールを使用してビルドされています。それ以外の場合、 データを処理します。