20.2. 暗号化ポリシー、RHEL コア暗号化コンポーネント、およびプロトコル
SHA-1 の非推奨の継続
RHEL 9 では、署名の SHA-1 の使用は、DEFAULT システム全体の暗号化ポリシーで制限されています。HMAC を除いて、SHA-1 は TLS、DTLS、SSH、IKEv2、DNSSEC、および Kerberos プロトコルでは許可されなくなりました。RHEL システム全体の暗号ポリシーにより制御されていない個々のアプリケーションも、RHEL 9 で SHA-1 ハッシュを使用することから離れています。
シナリオで既存またはサードパーティーの暗号署名を検証するために SHA-1 を使用する必要がある場合は、次のコマンドを入力して有効にできます。
# update-crypto-policies --set DEFAULT:SHA1
または、システム全体の暗号化ポリシーを LEGACY
ポリシーに切り替えることもできます。LEGACY
は、セキュアではない他の多くのアルゴリズムも有効にすることに注意してください。詳細は、RHEL 9 Security hardening ドキュメントの Re-enabling SHA-1 セクションを参照してください。
まだ SHA-1 を必要とするシステムとの互換性の問題の解決策については、次の KCS の記事を参照してください。
すべてのポリシーレベルで無効になっているアルゴリズム
RHEL 9 で提供される LEGACY
、DEFAULT
、および FUTURE
の暗号化ポリシーでは、以下のアルゴリズムが無効になっています。
- バージョン 1.2 より古い TLS (RHEL 9 以降、以前では RHEL 8 の 1.0 未満)
- バージョン 1.2 より古い DTLS (RHEL 9 以降、RHEL 8 では 1.0 未満)
- パラメーターが 2048 ビット未満の DH (RHEL 9 以降、RHEL 8 では 1024 ビット未満)
- 鍵サイズ (2048 ビット 未満) の RSA (RHEL 9 以降、RHEL 8 では 1024 ビット未満)
- DSA (RHEL 9 以降、RHEL 8 では 1024 ビット未満)
- 3DES (RHEL 9 以降)
- RC4 (RHEL 9 以降)
- FFDHE-1024 (RHEL 9 以降)
- DHE-DSS (RHEL 9 以降)
- Camellia (RHEL 9 以降)
- ARIA
- SEED
- IDEA
- 完全性のみの暗号スイート
- SHA-384 HMAC を使用した TLS CBC モード暗号化スイート
- AES-CCM8
- TLS 1.3 と互換性がないすべての ECC 曲線 (secp256k1 を含む)
- IKEv1 (RHEL 8 以降)
- BIND 設定の NSEC3DSA (RHEL 9.2 以降)
シナリオで、無効になっているポリシーが必要な場合は、カスタム暗号化ポリシーを適用するか、個々のアプリケーションを明示的に設定することで有効にできますが、結果として得られる設定はサポートされません。
TLS の変更
RHEL 9 では、TLS 設定はシステム全体の暗号化ポリシーメカニズムを使用して実行されます。1.2 未満の TLS バージョンはサポートされなくなりました。DEFAULT
、FUTURE
、および LEGACY
の暗号化ポリシーでは、TLS 1.2 および 1.3 のみが許可されます。詳細は、Using system-wide cryptographic policies を参照してください。
RHEL 9 に含まれるライブラリーが提供するデフォルト設定は、ほとんどのデプロイメントで十分に安全です。TLS 実装は、可能な場合は、安全なアルゴリズムを使用する一方で、レガシーなクライアントまたはサーバーとの間の接続は妨げません。セキュリティーが保護されたアルゴリズムまたはプロトコルに対応しないレガシーなクライアントまたはサーバーの接続が期待できないまたは許可されない場合に、厳密なセキュリティー要件の環境で、強化設定を適用します。
Extended Master Secret
TLS エクステンションが FIPS 対応システムに適用されるようになりました。
RHSA-2023:3722 アドバイザリーのリリースにより、FIPS 対応 RHEL 9 システム上の TLS 1.2 接続に、TLS Extended Master Secret
(EMS) エクステンション (RFC 7627) エクステンションが必須になりました。これは FIPS-140-3 要件に準拠しています。TLS 1.3 は影響を受けません。
EMS または TLS 1.3 をサポートしていないレガシークライアントは、RHEL 9 で実行されている FIPS サーバーに接続できなくなりました。同様に、FIPS モードの RHEL 9 クライアントは、EMS なしでは TLS 1.2 のみをサポートするサーバーに接続できません。これは実際には、これらのクライアントが RHEL 6、RHEL 7、および RHEL 以外のレガシーオペレーティングシステム上のサーバーに接続できないことを意味します。これは、OpenSSL のレガシー 1.0.x バージョンが EMS または TLS 1.3 をサポートしていないためです。
SCP は RHEL 9 ではサポートされていません。
セキュアコピープロトコル (SCP) プロトコルは、セキュリティーで保護することが難しいため、サポートされなくなりました。これにより、CVE-2020-15778 などのセキュリティー問題が発生しています。RHEL 9 では、SCP はデフォルトで SSH File Transfer Protocol (SFTP) に置き換わります。
デフォルトでは、SSH は RHEL 9 システムから古いシステム (RHEL 6 など) に接続することも、古いシステムから RHEL 9 に接続することもできません。これは、古いバージョンで使用されていた暗号化アルゴリズムが、安全ではないと見なされるようになったためです。シナリオで古いシステムとの接続が必要な場合は、レガシーシステムで ECDSA および ECDH アルゴリズムをキーとして使用するか、RHEL 9 システムでレガシー暗号化ポリシーを使用することができます。詳細は、ソリューション記事の SSH from RHEL 9 to RHEL 6 systems does not work および Failed connection with SSH servers and clients that do not support the server-sig-algs extension を参照してください。
CNSA 1.0 により FIPS:OSPP
ホストの相互運用性が影響を受ける
OSPP
サブポリシーは、Commercial National Security Algorithm (CNSA) 1.0 に準拠しています。これは、FIPS:OSPP
ポリシーとサブポリシーの組み合わせを使用するホストの相互運用性に影響します。主に影響を受ける点は次のとおりです。
- RSA キーの最小サイズは 3072 ビットとすることが必要です。
- アルゴリズムネゴシエーションでは、AES-128 暗号、secp256r1 楕円曲線、および FFDHE-2048 グループがサポートされなくなりました。
OpenSSH root パスワードのログインはデフォルトで無効化
RHEL 9 の OpenSSH のデフォルト設定では、ユーザーがパスワードを使用して root
としてログインすることを禁止し、攻撃者がパスワードに対するブルートフォース攻撃によってアクセスすることを防ぎます。
OpenSSH は SHA-2 をさらに強制する
暗号化目的で安全性の低い SHA-1 メッセージダイジェストからさらに移行する取り組みの一環として、OpenSSH に次の変更が加えられました。
-
sshd
起動時に、システムで SHA-1 の使用が設定されているかどうかのチェックを追加しました。SHA-1 が使用できない場合、OpenSSH は操作に SHA-1 を使用しようとしません。これにより、DSS キーが存在する場合はロードしなくなり、また、rsa-sha2
の組み合わせが使用可能な場合には、その組み合わせを強制的にアドバタイズするようになります。 - SSH 秘密キーの変換では、OpenSSH は RSA キーのテストに明示的に SHA-2 を使用します。
-
サーバー側で SHA-1 署名が使用できない場合、
sshd
は SHA-2 を使用してホストキーの証明を確認します。これは、RHEL 8 以前のバージョンのクライアントと互換性がない可能性があります。 - SHA-1 アルゴリズムがクライアント側で使用できない場合、OpenSSH は SHA-2 を使用します。
- クライアント側では、キー証明リクエストで SHA-1 が使用された場合、またはハッシュアルゴリズムが指定されていない場合 (デフォルトを想定)、OpenSSH はサーバーからの SHA-2 ベースのキー証明を許可します。これは、RSA 証明書の既存の例外と合わせており、サポートされている場合は最新のアルゴリズムを使用して接続できるようになります。
GnuTLS は、FIPS モードで EMSを備えた TLS 1.2 が必要
FIPS-140-3 標準に準拠するために、GnuTLS サーバーとクライアントは、FIPS モードでネゴシエートされるすべての TLS 1.2 接続に対して、Extended Master Secret (EMS) 拡張 (RFC 7627) を必要とします。EMS をサポートしていない古いサーバーおよびクライアントとの互換性を維持する必要があり、TLS 1.3 を使用できない場合は、NO-ENFORCE-EMS
システム全体の暗号化サブポリシーを適用できます。
# update-crypto-policies --set FIPS:NO-ENFORCE-EMS
EMS なしで TLS 1.2 接続を許可すると、システムは FIPS-140-3 要件を満たさなくなります。
TPM 1.2 は GnuTLS のサポート対象外となる
GnuTLS ライブラリーは、TPM (Trusted Platform Module) 1.2 テクノロジーに対応しなくなりました。GnuTLS API を介して TPM を使用するアプリケーションは、TPM 2.0 に対応している必要があります。
GOST への GnuTLS のサポートの削除
RHEL 8 では、システム全体の暗号化ポリシーにより、GOST 暗号が無効になっています。RHEL 9 では、このような暗号化への対応が GnuTLS ライブラリーから削除されました。
cyrus-sasl
は Berkeley DB の代わりに GDBM を使用
cyrus-sasl
パッケージは、libdb
依存関係なしで構築されるようになりました。sasldb
プラグインは、Berkeley DB ではなく GDBM データベース形式を使用します。古い Berkeley DB 形式で保存されている既存の Simple Authentication and Security Layer (SASL) データベースを移行するには、cyrusbdb2current
を使用します。以下の構文を使用します。
$ cyrusbdb2current <sasldb_path> <new_path>
NSS は FIPS モードで EMS を強制するようになる
Network Security Services (NSS) ライブラリーには、FIPS 140-3 標準で義務付けられているすべての TLS 1.2 接続に対して Extended Master Secret (EMS) 拡張 (RFC 7627) を要求する TLS-REQUIRE-EMS
ポリシーが含まれるようになりました。NSS は、システム全体の暗号化ポリシーが FIPS
に設定されている場合に、新しいポリシーを使用します。
EMS または TLS 1.3 をサポートしていないレガシーシステムとの相互運用が必要な場合は、NO-ENFORCE-EMS
システム全体の暗号化サブポリシーを適用できます。このような変更は FIPS-140-3 要件に違反します。
DBM は NSS のサポート対象外となり、pk12util
のデフォルトが変更される
NSS (Network Security Services) ライブラリーが、信頼データベースの DBM ファイル形式に対応しなくなりました。RHEL 8 では、SQLite ファイル形式がデフォルト形式になり、既存の DBM データベースが読み取り専用モードで開かれ、自動的に SQLite に変換されました。RHEL 9 にアップグレードする前に、DBM から SQLite に、すべての信頼データベースを更新します。
詳細な手順は、DBM から SQLite への NSS データベースの更新 の手順を参照してください。
NSS pk12util
は、デフォルトで DES-3 と SHA-1 を使用しなくなりました
秘密鍵のエクスポート時に、pk12util
ツールでは、DES-3 および SHA-1 の代わりに、AES アルゴリズムおよび SHA-256 アルゴリズムがデフォルトで使用されるようになりました。
SHA-1 は、RHEL 9 のすべての署名に対して、デフォルトのシステム全体の暗号化ポリシーで無効になっていることに注意してください。
NSS が 1023 ビット未満の RSA 鍵に対応しなくなる
Network Security Services (NSS) ライブラリーの更新により、すべての RSA 操作の最小鍵サイズが 128 から 1023 ビットに変更されます。つまり、NSS は以下の機能を実行しなくなります。
- RSA 鍵の生成は 1023 ビット未満です。
- 1023 ビット未満の RSA 鍵で RSA に署名するか、署名を検証します。
- 1023 ビットより短い RSA キーで値を暗号化または復号化します。
OpenSSL ENGINE エクステンション API は FIPS モードではサポートされない
OpenSSL の従来のエクステンションシステムである ENGINE API は、新しいプロバイダー API と互換性がありません。したがって、openssl-pkcs11
モジュールおよび openssl-ibmca
モジュールなど、OpenSSL エンジンによって提供される機能に依存するアプリケーションは、FIPS モードでは使用できません。
OpenSSL の FIPS モードを有効にしなければ正常に機能しない
FIPS モードを有効にして openssl.cnf
設定ファイルでデフォルト以外の値を使用している場合で、特にサードパーティーの FIPS プロバイダーを使用している場合、openssl.cnf
ファイルに fips=yes
を追加します。
OpenSSL は、FIPS モードで明示的な曲線パラメーターを受け入れない
明示的な曲線パラメーターを指定した楕円曲線暗号化パラメーター、秘密鍵、公開鍵、および証明書は、FIPS モードでは機能しなくなりました。FIPS 承認の曲線の 1 つを使用する ASN.1 オブジェクト識別子を使用して曲線パラメーターを指定することは、FIPS モードでも機能します。
Libreswan がデフォルトで ESN を要求する
Libreswan では、設定オプション esn=
のデフォルト値が no
から either
に変更されました。つまり、接続を開始すると、Libreswan はデフォルトで拡張シリアル番号 (ESN) の使用を要求します。特に、ハードウェアオフロードが使用されている場合、この新しい動作により、ESN をサポートしていない特定のネットワークインターフェイスカード (NIC) が IPsec 接続を確立できなくなります。ESN を無効にするには、esn=
を no
に設定し、replay_window=
オプションを 32 以下の値に設定します。以下に例を示します。
esn=no replay_window=32
replay_window=
オプションが必要なのは、ウィンドウサイズが 32 を超えるアンチリプレイ保護のために別のメカニズムが ESN を使用するためです。