C Oracle Database FIPS 140-2の設定

Oracleでは、米国連邦情報処理標準(FIPS)の標準である140-2がサポートされます。

C.1 Oracle Database FIPS 140-2の設定について

連邦情報処理標準(FIPS)とは、米国商務省国立標準技術研究所(NIST)によって開発された連邦政府のコンピュータ・システムの標準およびガイドラインです。

FIPSは、連邦情報セキュリティ・マネジメント法(FISMA)に従って開発されました。FIPSは連邦政府で使用するために開発されましたが、多くの民間団体が自主的にこれらの基準を使用しています。

FIPS 140-2には、暗号化モジュールによって満たされるセキュリティ要件が規定されており、幅広い潜在的なアプリケーションと環境をカバーするための、4つの拡大する定性的なレベルが示されています。セキュリティ・レベル1は、FIPS 140-2アルゴリズム、キー・サイズ、整合性チェックおよび規制によって課せられるその他の要件に準拠します。FIPS 140-2のセキュリティ・レベル1では、本番グレードの設備の要件を超える、モジュールの物理的なセキュリティ・メカニズムは必要ありません。そのため、このレベルでは、指定したオペレーティング環境で実行されている汎用コンピュータでソフトウェア暗号化機能を実行できます。

FIPS 140-2設定がOracle Database用に構成されている場合、データベースはFIPS 140-2レベル1の検証済の暗号ライブラリを使用して、保存されているデータとネットワークで転送中のデータを保護します。Oracle Databaseでは、ネイティブ・ネットワーク暗号化、列および表領域の透過的データ暗号化(TDE) (Oracle SecureFilesを含む)、Transport Layer Security (TLS)、およびDBMS_CRYPTO PL/SQLパッケージに、これらの暗号ライブラリを使用します。

Oracle Databaseでは現在、FIPS 140-2レベル1のライブラリとして、サード・パーティの暗号ライブラリを使用しています。現在のFIPS認定のステータスの情報は、米国商務省国立標準技術研究所のコンピュータ・セキュリティ・リソース・センター(CSRC)のWebサイトの次のアドレスで確認できます。

http://csrc.nist.gov/groups/STM/cmvp/validation.html

Oracle Database 23c以降、Cベースのコンポーネントの場合、Oracle DatabaseはNIST証明書番号4506 (FIPS 140-2)に関連するOracle OpenSSL 3.0 Providerを使用します。Javaコンポーネントの場合、Oracle DatabaseはNIST FIPS証明書番号3820 (FIPS 140-2)に関連するCrypto-J v6.2.5を使用します。次のWebサイトも参照してください。

java.propertiesファイルを構成してJavaコンポーネントに対してFIPSモードを有効にするには、Oracle Fusion Middleware Oracle WebLogic Serverセキュリティの管理を参照してください。

Oracle Database FIPS設定では、Oracleデータベースのみに対してFIPS承認済アルゴリズムが使用されます。FIPSモードで実行されているOracle Databaseで使用されるサード・パーティ・ベンダーのソフトウェアでは、これらのFIPS承認済アルゴリズムのみを使用する必要があります。そうしないと、ベンダーのソフトウェアに障害が発生します。

C.2 統合FIPS_140パラメータを使用したFIPS 140-2の構成

統合FIPS_140パラメータは、複数の異なるOracle Database環境に設定できます。

C.2.1 FIPS_140パラメータを使用したFIPS 140-2の構成について

FIPS_140パラメータの構成は、サポートされているすべての環境で同じです。

FIPS_140パラメータは、次の環境および機能を使用するOracleデータベース用に統合されています。

  • 透過的データ暗号化(TDE)
  • DBMS_CRYPTO PL/SQLパッケージ
  • Transport Layer Security(TLS)
  • ネイティブ・ネットワーク暗号化

C.2.2 FIPS_140パラメータの構成

FIPS 140-2を構成するには、fips.oraファイルでFIPS_140パラメータを設定する必要があります。

  1. データベース・クライアントまたはデータベース・サーバーによって使用されるfips.oraファイルを探します。
    fips.oraファイルが$ORACLE_HOME/ldap/adminディレクトリにあるか、またはFIPS_HOME環境変数で指定された場所にあることを確認します。
  2. fips.oraファイルに次の行を追加します。
    FIPS_140=TRUE

    FIPS_140TRUEに設定すると、FIPS検証済の暗号化モジュール内で暗号操作が実行されます。

    このパラメータは、デフォルトではFALSEです。FIPS_140FALSEに設定すると、FIPSに対して検証されていない暗号化モジュール内で暗号操作が実行されます。

    いずれの設定でも、可能であれば暗号操作は高速化されます。

  3. 任意のデータベース・サーバーまたはクライアントの任意のOracle Databaseホームでこの手順を繰り返します。

C.2.3 FIPSモードでのorapkiの実行

ウォレット作成コマンドの各コマンドの末尾に-fips140_modeを追加して、FIPSモードでorapkiを実行します。

  • 次の構文を使用します。
    orapki command -fips140_mode

C.2.4 FIPSモードでJavaクライアント・アプリケーションを実行するためのスタンドアロンJava FIPSの構成

FIPSモードでJavaクライアント・アプリケーションを実行するようにスタンドアロンJava FIPSを構成するには、CLASSPATH設定を確認し、java.security propertiesファイルで適切なFIPS検証済プロバイダを設定する必要があります。

  1. Oracleホーム内のJDKホームに移動します。
  2. CLASSPATHcryptojce.jarcryptojcommon.jarjcmFIPS.jarおよびcryptoj.jarというjarが含まれていることを確認します。
  3. java.securityプロパティ・ファイルで、次の手順を実行します。
    1. 最初のセキュリティ・プロバイダとしてcom.rsa.jsafe.provider.JsafeJCEを設定します。java.securityプロパティ・ファイルのデフォルト値は実装固有の場所から読み取られます。この場所は、通常、Javaインストール・ディレクトリのconf/security/java.securityプロパティ・ファイルです。
    2. 既存のセキュリティ・プロバイダのインデックスを上に移動します。

C.2.5 enable_fips.py Pythonスクリプトの実行によるFIPSの有効化

enable_fips.pyスクリプトは、ワークロード・マネージャ、Oracle Database Configuration Assistant (DBCA)、Oracle Net Configuration Assistant (NetCA)など、Oracle Databaseで使用されるJavaアプリケーションのFIPSモードを有効にします。

enable_fips.pyスクリプトは、fips.oraファイルでパラメータFIPS_140=TRUEを設定することで、fips.oraファイルを更新します。また、com.rsa.jsafe.provider.JsafeJCEjava.securityファイルの最初のセキュリティ・プロバイダとして設定します。
  1. $ORACLE_HOME/binディレクトリでenable_fips.py Pythonスクリプトを見つけます。
  2. enable_fips.pyスクリプトを実行します。
    python enable_fips.py 
  3. このスクリプトをOracle Databaseサーバーで実行するシナリオでは、スクリプトの実行が完了した後でサーバーを再起動します。

C.2.6 Transparent Data EncryptionでFIPSでサポートされているアルゴリズム

透過的データ暗号化(TDE)に対してFIPSでサポートされているアルゴリズムには、AESアルゴリズムがあります。

  • AES128
  • AES192
  • AES256

表および表領域の暗号化アルゴリズムを最新バージョンに移行できます。3DES168は、Oracle Database 23c以降ではサポートされなくなりました。

C.2.7 FIPSでサポートされているDBMS_CRYPTOの暗号スイート

FIPSライブラリでは、DBMS_CRYPTO PL/SQLパッケージへの暗号スイートの使用がサポートされています。

DBMS_CRYPTO暗号化ハッシュの場合:

  • HASH_SH256
  • HASH_SH384
  • HASH_SH512

DBMS_CRYPTO MAC (メッセージ認証コード):

  • HMAC_SH256
  • HMAC_SH384
  • HMAC_SH512

DBMS_CRYPTO ENCRYPT/DECRYPT:

  • ENCRYPT_AES
  • ENCRYPT_AES128
  • ENCRYPT_AES192
  • ENCRYPT_AES256

DBMS_CRYPTO PKENCRYPT/PKDECRYPT:

  • PKENCRYPT_RSA_PKCS1_OAEP_SHA2

DBMS_CRYPTO SIGN/VERIFY:

  • SIGN_SHA224_RSA
  • SIGN_SHA256_RSA
  • SIGN_SHA256_RSA_X931
  • SIGN_SHA384_RSA
  • SIGN_SHA384_RSA_X931
  • SIGN_SHA512_RSA
  • SIGN_SHA512_RSA_X931

C.2.8 Transport Layer Securityに対してFIPSでサポートされている暗号スイート

暗号スイートは、ネットワーク・ノード間でメッセージを交換する認証、暗号化およびデータ整合性アルゴリズムのセットです。

たとえば、TLSハンドシェイク時に、メッセージを送受信するときに使用する暗号スイートを確認するために2つのノード間でネゴシエーションが行われます。

特定の暗号スイートの構成

Oracle DatabaseのTLS暗号スイートは、FIPS認定の暗号スイートに自動的に設定されます。特定の暗号スイートを構成する必要がある場合は、sqlnet.oraまたはlistener.oraファイルでSSL_CIPHER_SUITESパラメータを設定します。

SSL_CIPHER_SUITES=(SSL_cipher_suite1[,SSL_cipher_suite2[,..]])

このパラメータは、Oracle Net Managerを使用してサーバーおよびクライアントで設定することもできます。

特定の暗号スイートを指定しなかった場合、Oracle Databaseでは、データベース・サーバーとクライアントの両方に共通の、最も強力な暗号スイートが使用されます。選択される暗号スイートの優先順位は、次の優先暗号リストおよび低優先暗号リストに示されている順となります。3DES暗号スイートには脆弱性があるため、Oracle Databaseでは、それらは自動的には選択されません。それらは明示的に構成する必要があります。

優先暗号スイート

TLSバージョン1.3を使用している場合は、次の暗号スイートがFIPS検証用に承認されています。

  • TLS_AES_128_CCM_SHA256
  • TLS_AES_128_GCM_SHA256
  • TLS_AES_256_GCM_SHA384

トランスポート層セキュリティ(TLS)バージョン1.2を使用している場合は、次の暗号スイートがFIPS検証用に承認されています。

  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

3DESベース暗号スイート

3DESベース暗号スイートは設計に脆弱性があるため、Oracleではそれらは推奨されていません。Oracle Databaseリリース21c以上では、次の3DESベース暗号スイートがサポートされています。ただし、それらはデフォルトでは有効になっておらず、sqlnet.oraまたはlistener.oraファイル内のSSL_CIPHER_SUITESパラメータを使用して明示的に構成する必要があります。

  • TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
  • TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
  • TLS_RSA_WITH_3DES_EDE_CBC_SHA

C.2.9 ネットワーク・ネイティブ暗号化に対してFIPSでサポートされているアルゴリズム

FIPSライブラリでは、ネイティブ・ネットワーク暗号化に対して暗号化アルゴリズムとチェックサム・アルゴリズムの両方がサポートされています。

  • 暗号化アルゴリズム: AES128、AES192およびAES256
  • チェックサム・アルゴリズム: SHA1、SHA256、SHA384およびSHA512

C.3 レガシーFIPS 140-2構成

レガシーFIPS 140-2構成は、透過的データ暗号化(TDE)、DBMS_CRYPTO、ネットワーク・ネイティブ暗号化およびTransport Layer Security (TLS)に適用されます。

C.3.1 レガシーFIPS 140-2構成について

レガシーFIPS 140-2構成の使用は引き続きサポートされますが、かわりに統合FIPS_140パラメータを使用することをお薦めします。

レガシーFIPS 140-2構成は、次の環境に適用されます。

  • 透過的データ暗号化(TDE)
  • DBMS_CRYPTO PL/SQLパッケージ
  • Transport Layer Security(TLS)
  • ネットワーク・ネイティブ暗号化

C.3.2 透過的データ暗号化およびDBMS_CRYPTO用のFIPS 140-2の構成

DBFIPS_140初期化パラメータで、FIPSモードを構成します。

TDEおよびDBMS_CRYPTO用にFIPS 140-2を構成するこの方法は、レガシー構成とみなされますが、引き続きサポートされています。かわりに、統合FIPS_140パラメータを使用することをお薦めします。
  1. 透過的データ暗号化およびDBMS_CRYPTO PL/SQLパッケージ・プログラム・ユニットをFIPSモードで実行するよう構成するには、DBFIPS_140初期化パラメータをTRUEに設定します。
    この設定は、すべてのプラットフォームで次のような結果となります。
    • TRUE: TDEおよびDBMS_CRYPTOプログラム・ユニットで、FIPS検証済の暗号化モジュールを使用します。

      DBFIPS_140TRUEに設定し、基礎となるライブラリをFIPSモードで使用すると、各プロセスで初めてライブラリをロードする際、一定のオーバーヘッドが生じることに注意してください。これは、署名の検証およびライブラリに対する自己テストの実行によるものです。各プロセスへのライブラリのロード後は、パフォーマンスへの影響はありません。

    • FALSE: TDEおよびDBMS_CRYPTOプログラム・ユニットで、FIPSに対して検証されていない暗号化モジュールを使用します。

  2. データベースを再起動します。

C.3.3 Transport Layer Security用のFIPS 140-2の構成

Transport Layer Security (TLS)用にFIPS 140-2を構成するには、SSLFIPS_140パラメータを設定する必要があります。

TLS用にFIPS 140-2を構成するこの方法は、レガシー構成とみなされますが、引き続きサポートされています。かわりに、統合FIPS_140パラメータを使用することをお薦めします。
  1. fips.oraファイルが$ORACLE_HOME/ldap/adminディレクトリにあるか、またはFIPS_HOME環境変数で指定された場所にあることを確認します。
  2. fips.oraファイルで、SSLFIPS_140TRUEに設定し、TLSアダプタをFIPSモードで実行できるようにします。
    たとえば:
    SSLFIPS_140=TRUE

    SSLFIPS_140TRUEに設定すると、FIPS要件に準拠するように設計された暗号化モジュール内でTLS暗号操作が実行されます。現時点では、暗号化モジュールは一部のオペレーティング・システムでのFIPS検証を完了しましたが、Oracle Linuxではまだ検証中です。オラクル社では、Oracle Database 23cの一般提供の前に、Oracle Linuxでの検証を完了する予定です。

    このパラメータは、デフォルトではFALSEです。SSLFIPS_140FALSEに設定すると、FIPSに対して検証されていない暗号化モジュール内でTLS暗号操作が実行され、TRUE設定と同様に、可能であれば操作は高速化されます。

  3. 任意のデータベース・サーバーまたはクライアントの任意のOracle Databaseホームでこの手順を繰り返します。

ノート:

Oracle Database 10g リリース2 (10.2)で使用されたSQLNET.SSLFIPS_140パラメータは、SSLFIPS_140パラメータに置換されます。このパラメータは、sqlnet.oraファイルではなくfips.oraファイルで設定する必要があります。

C.3.4 ネイティブ・ネットワーク暗号化用のFIPS 140-2の構成

ネイティブ・ネットワーク暗号化用にFIPS 140-2を構成するには、sqlnet.oraファイルでFIPS_140パラメータを設定する必要があります。

ネットワーク・ネイティブ暗号化用にFIPS 140-2を構成するこの方法は、レガシー構成とみなされますが、引き続きサポートされています。かわりに、統合FIPS_140パラメータを使用することをお薦めします。
  1. データベース・クライアントまたはデータベース・サーバーによって使用されるsqlnet.oraファイルを探します。
  2. sqlnet.oraファイルに次の行を追加します。
    SQLNET.FIPS_140=TRUE

    FIPS_140TRUEに設定すると、FIPS要件に準拠するように設計された暗号化モジュール内でネイティブ・ネットワーク暗号化の暗号操作が実行されます。現時点では、暗号化モジュールは一部のオペレーティング・システムでのFIPS検証を完了しましたが、Oracle Linuxではまだ検証中です。オラクル社では、Oracle Database 23cの一般提供の前に、Oracle Linuxでの検証を完了する予定です。

    このパラメータは、デフォルトではFALSEです。FIPS_140FALSEに設定すると、FIPSに対して検証されていない暗号化モジュール内でネイティブ・ネットワーク暗号操作が実行され、TRUE設定と同様に、可能であれば操作は高速化されます。

  3. 任意のデータベース・サーバーまたはクライアントの任意のOracle Databaseホームでこの手順を繰り返します。

C.4 FIPS 140-2のインストール後のチェック

FIPS 140-2設定の構成後に、オペレーティング・システムで次の権限を確認する必要があります。

その権限を次に示します。

  • システムのセキュリティ・ポリシーに従って、権限のないユーザーがOracle Cryptographic Librariesを実行できないようにするには、すべてのOracle実行可能ファイルに対して実行権限を設定する必要があります。

  • ユーザーが誤ってまたは故意にOracle Cryptographic Librariesのファイルを読み取ったり変更しないようにするには、すべてのOracle実行可能ファイルに対して読取りおよび書込み権限を設定する必要があります。

FIPS 140-2 Level 2要件に準拠するには、権限のないユーザーが、オペレーティング・システムで使用しているOracle Cryptographic Librariesのプロセスおよびメモリーの読取り、変更または実行を行えないようにする手順をセキュリティ・ポリシーに含めます。

C.5 FIPS 140-2接続の検証

トレース・ファイルおよびその他の方法を使用して、FIPS 140-2接続を検証できます。

C.5.1 FIPS_140パラメータを使用するときのFIPS 140-2接続の検証

FIPS_140パラメータを使用するときは、トレース・ファイルを使用してFIPS 140-2のステータスを確認できます。

  1. 環境変数ENABLE_TRACE1に設定してトレースを有効にします。
    • Cシェルの場合:
      setenv ENABLE_TRACE 1
    • bashの場合:
      export ENABLE_TRACE=1
  2. FIPSを検索してトレース・ファイルを確認します。

C.5.2 Transport Layer Securityに対するFIPS 140-2接続の検証

トレース・ファイルを使用して、Transport Layer Security (TLS)に対するFIPS 140-2接続を確認できます。

  1. トレースを有効にするには、sqlnet.oraに次の行を追加します。
    trace_directory_server=trace_directory
    trace_file_server=trace_file
    trace_level_server=trace_level
    

    たとえば:

    trace_directory=/private/oracle/owm
    trace_file_server=fips_trace.trc
    trace_level_server=16
    

    トレース・レベル16は、FIPSの自己テストの結果を確認するために必要な最低限のトレース・レベルです。

  2. Provider Type: FIPS140を検索してトレース・ファイルを確認します。

C.5.3 ネットワーク・ネイティブ暗号化に対するFIPS 140-2接続の検証

トレース・ファイルを使用して、ネットワーク・ネイティブ暗号化に対するFIPS 140-2接続を確認できます。

  1. トレースを有効にするには、sqlnet.oraに次の行を追加します。
    trace_directory_server=trace_directory
    trace_file_server=trace_file
    trace_level_server=trace_level
    

    たとえば:

    trace_directory=/private/oracle/owm
    trace_file_server=fips_trace.trc
    trace_level_server=16
    

    トレース・レベル16は、FIPSの自己テストの結果を確認するために必要な最低限のトレース・レベルです。

  2. FIPS mode activated successfullyを検索してトレース・ファイルを確認します。

C.5.4 透過的データ暗号化およびDBMS_CRYPTOに対するFIPS 140-2接続の検証

SQL*Plusを使用して、FIPSモードが有効になっているかどうかを確認できます。

  1. SQL*Plusを使用して、データベース・インスタンスに接続します。
  2. 次のSHOW PARAMETERコマンドを実行します。
    SHOW PARAMETER DBFIPS_140
    

    次のような出力が表示されます。

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    DBFIPS_140                           boolean     TRUE
    

C.6 非推奨の脆弱なアルゴリズム・キーの管理

Oracle Databaseリリース23cでは、FIPSとFIPS以外の両方についていくつかのアルゴリズムが非推奨になりました。

Oracle Database 23cでは、暗号アルゴリズムのセキュリティ強度が強化されています。次の暗号アルゴリズムは非推奨または削除されました。

  • FIPSモードの場合:
    • FIPSセキュリティ強度80はサポートされなくなりました。FIPSモードの新しいデフォルトのセキュリティ強度は112です。現在、これは唯一サポートされているFIPSセキュリティ強度です。
    • キー・サイズが1024のRSA、Diffie Hellmanおよびデジタル署名アルゴリズム(RSA/DH/DSA)はサポートされなくなりました。サポートされる新しい最小キー・サイズは2048です。
  • FIPS以外のモードの場合:
    • セキュリティ強度0 (RSA/DH/DSAキー長512)は非推奨です。デフォルトでは現在、セキュリティ強度のサポートは80です。セキュリティ強度0 (RSAキー512および同等のもの)は引き続き使用できますが、使用することはお薦めしません。FIPS以外の使用に使用できるセキュリティ強度は0 (非推奨)、80、および112です。

RSA/DH/DSA 512/1024のキー・サイズで使用されているものを(ECCの同等のものと一緒に)特定し、RSA/DH/DSA 2048のキー・サイズおよび同等のものに置き換えることをお薦めします。

次の表に、様々な暗号化キーのセキュリティ強度を示します。

orapkiコマンドライン・ユーティリティを使用して、署名付き証明書の作成、Oracleウォレットの管理および証明書失効リストの管理を行うことができます。これには、次の表に示すのと同じデフォルトのキー・サイズがあります。

FIPSのデフォルト設定(Oracle Database 23c以降)

表C-1 FIPSのデフォルト設定(Oracle Database 23c以降)

アルゴリズム・キー・タイプ セキュリティ強度

-

デフォルトのセキュリティ強度: 112(以前は80)

セキュリティ強度: 0、80はサポートされておらず、FIPS使用には使用できません

デフォルトのRSA/DH/DSA (Diffie Hellman、デジタル署名アルゴリズム)

2048キー・サイズ(2048ビット未満のキー・サイズはサポートされていません)

デフォルトECC (楕円曲線暗号化)

ECC曲線で、ECC曲線キーの最小長224、ECC名曲線P192、K163およびB163以下はサポートされていません

FIPS以外のデフォルト設定(Oracle Database 23c以降)

表C-2 FIPS以外のデフォルト設定(Oracle Database 23c以降)

アルゴリズム・キー・タイプ 保護強度

-

デフォルトのセキュリティ強度: 80

セキュリティ強度: 0 (使用可能)

デフォルトのRSA/DH/DSA (Diffie Hellman、デジタル署名アルゴリズム)

1024キー・サイズ(ORACLE_MIN_KEY_STRENGTH_SUPPORTを設定すると、512および2048も使用可能)

デフォルトECC (楕円曲線暗号化)

ECC曲線で、ECC曲線キーの最小長160、ECC名曲線P192、K163およびB163以上(低いセキュリティ強度は使用可能)