FIPS 140-2 実験的サポート

2022年11月16日 Marek Posolda 著

最新の Keycloak 20 リリースに FIPS 140-2 の実験的サポートが含まれていることを発表できて嬉しく思います!

FIPS 140-2 規格は、米国の政府機関および関連団体で使用されるソフトウェアが満たす必要のある暗号モジュールに関する要件のセットです。FIPS 準拠のソフトウェアは、FIPS 仕様で許可されている安全な暗号アルゴリズムのみを使用する必要があり、それらを安全な方法で使用する必要があります。Keycloak は暗号アルゴリズムを直接実装していませんが、内部的には多くの暗号機能を使用する必要があります。この目的のために、Keycloak は主に Java cryptography SPI と、暗号関連機能を実装するためのサードパーティライブラリ(特に BouncyCastle ライブラリ)に依存しています。

FIPS サポートは通常、OS レベルで有効になります。たとえば、RHEL 8.6 のインストール中に、OS インストール中にカーネルフラグを有効にして、OS が FIPS 準拠であることを確認できます。OS レベルで FIPS が有効になっている場合、OpenJDK を含むさまざまなパッケージも FIPS 準拠に設定され、FIPS 承認済み機能に依存するように事前構成されていることを意味します。たとえば、java.security 構成ファイルは、FIPS 準拠のセキュリティプロバイダーのみを含むように事前構成されています。

Keycloak の FIPS サポートは、Keycloak サーバーが FIPS 準拠の Java を搭載した FIPS 準拠の OS 上で実行できることを意味します。また、Keycloak サーバーが FIPS 準拠であり、FIPS 140-2 サポートを厳密に要求する関係者によって使用できることも意味します。FIPS 対応 OS を使用していなくても、ステップ 4 の以下の手順で説明されているように、BouncyCastle-FIPS セキュリティプロバイダーのみが構成されたカスタム java.security ファイルを使用することで、FIPS 対応 Keycloak サーバーを試すことができます。

この機能の一部を貢献してくれた David Anderson に感謝します。また、インスピレーションとして使用された初期プロトタイプを作成してくれた Sudeep DasIsaac Jensen にも感謝します。

手順

Keycloak で FIPS サポートを試す方法の手順はこちらにあります。

結論

Keycloak FIPS 統合を試して、フィードバックを共有していただけると幸いです!バグも 報告できます。

BCFIPS 非承認モードでの既知の制限事項は次のとおりです。

  • SAML クライアントおよび SAML ID プロバイダーを使用する際の潜在的な問題

  • Kerberos/SPNEGO 認証機構は機能しません

  • X.509 クライアント証明書認証は、ユーザーとクライアントの両方で機能しない場合があります

BCFIPS 承認モード(より厳密なモード)では、次のような制限がさらに存在します。

  • ユーザーパスワードは 14 文字以上である必要があります。ユーザーの登録/認証中に問題が発生しないように、レルムのパスワードポリシーを 14 文字に設定する必要があります。

  • キーストア/トラストストアは bcfks タイプである必要があります。なぜなら、jkspkcs12 はどちらも機能しないためです。これは BCFIPS 承認モードの制限事項です。

  • 起動時の server.log にいくつかの警告