E Oracle Database FIPS 140-2の設定

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

E.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の検証済の暗号ライブラリとして、以前はRSA BSAFEと呼ばれていたDell BSAFEが使用されています。現在のFIPS認定のステータスの情報は、米国商務省国立標準技術研究所のコンピュータ・セキュリティ・リソース・センター(CSRC)のWebサイトの次のアドレスで確認できます。

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

検証済の暗号化モジュールでベンダー「RSA」およびモジュール名「BSAFE」を検索して、FIPS固有の情報を確認できます。

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

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

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

  1. 透過的データ暗号化およびDBMS_CRYPTO PL/SQLパッケージ・プログラム・ユニットをFIPSモードで実行するよう構成するには、DBFIPS_140初期化パラメータをTRUEに設定します。
    このパラメータの効果は、プラットフォームによって異なります。
  2. データベースを再起動します。

表E-1に、DBFIPS_140パラメータの各プラットフォームへの作用について説明します。

表E-1 DBFIPS_140初期化パラメータのプラットフォームへの作用

プラットフォーム DBFIPS_140をTRUEまたはFALSEに設定した場合の効果

Intel x86_64上のLinuxまたはWindows

  • TRUE: TDEおよびDBMS_CRYPTOプログラム・ユニットは、RSA BSAFE Crypto-C Micro Edition (CCME) 4.1.5を使用するMicro Edition Suite (MES) 4.6 FIPSモードを使用します。

  • FALSE: TDEおよびDBMS_CRYPTOプログラム・ユニットは、Intel Performance Primitives (IPP)を使用します。

SPARC TシリーズまたはIntel x86_64上のSolaris 11.1+

  • TRUE: TDEおよびDBMS_CRYPTOプログラム・ユニットは、RSA BSAFE Crypto-C Micro Edition (CCME) 4.1.5を使用するMicro Edition Suite (MES) 4.6 FIPSモードを使用します。

  • FALSE: TDEおよびDBMS_CRYPTOプログラム・ユニットは、Solaris Cryptographic Framework (SCF)/UCrypto (FIPS 140に対して個別に検証される)を使用します。

他のオペレーティング・システムまたはハードウェア

  • TRUE: TDEおよびDBMS_CRYPTOプログラム・ユニットは、RSA BSAFE Crypto-C Micro Edition (CCME) 4.1.5を使用するMES 4.6 FIPSモードを使用します。

  • FALSE: TDEおよびDBMS_CRYPTOプログラム・ユニットはMES 4.6非FIPSモードを使用します。

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

E.3 Transport Layer Securityに対するFIPS 140-2の構成

SSLFIPS_140パラメータで、Transport Layer Security (TLS)のFIPSモードを構成します。

E.3.1 Transport Layer Security用のSSLFIPS_140およびSSLFIPS_LIBパラメータの構成

TLS用にFIPS 140-2を構成するには、SSLFIPS_140パラメータを設定する必要があります。Oracle Instant Clientを使用している場合は、SSLFIPS_LIBパラメータも設定する必要があります。

SSLFIPS_140パラメータで、Transport Layer Security (TLS)アダプタをFIPSモードで実行するように構成します。SSLFIPS_LIBで、FIPSライブラリの場所を設定します。
  1. fips.oraファイルが$ORACLE_HOME/ldap/adminディレクトリにあるか、またはFIPS_HOME環境変数で指定された場所にあることを確認します。
  2. fips.oraファイルで、SSLFIPS_140およびSSLFIPS_LIBパラメータを設定します。
    • SSLFIPS_140TRUEに設定し、TLSアダプタをFIPSモードで実行できるようにします。たとえば:
      SSLFIPS_140=TRUE

      このパラメータは、デフォルトではFALSEです。

    • Oracle Instant Clientを使用している場合は、SSLFIPS_LIBをFIPSライブラリの場所に設定します。たとえば:
      SSLFIPS_LIB=$ORACLE_HOME/lib
  3. 任意のデータベース・サーバーまたはクライアントの任意のOracle Databaseホームでこの手順を繰り返します。

SSLFIPS_140TRUEに設定した場合、Transport Layer Security暗号操作はFIPSモードの埋込みRSA/Micro Edition Suite (MES)ライブラリで行われます。ハードウェア・アクセラレーションが使用可能でホスト・ハードウェアおよびソフトウェアで適切に構成されている場合、これらの暗号操作はCPUによって高速化されます。

SSLFIPS_140FALSEに設定した場合、Transport Layer Security暗号操作は、FIPSモードの埋込みRSA/Micro Edition Suite (MES)ライブラリで行われ、TRUEに設定した場合と同様に、可能な場合は操作が高速化されます。

ノート:

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

E.3.2 FIPS 140-2用に承認されているTLS暗号スイート

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

たとえば、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.2を使用している場合は、次の暗号スイートがFIPS検証用に承認されています。

  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

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

  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

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

E.4 ネイティブ・ネットワーク暗号化のためのFIPS 140-2の構成

サーバーとクライアントの両方に対して、sqlnet.oraファイルでパラメータを設定することで、ネイティブ・ネットワーク暗号化用にFIPS 140-2を構成できます。

E.4.1 ネイティブ・ネットワーク暗号化のためのFIPS 140-2の構成について

ネイティブ・ネットワーク暗号化のためのFIPS 140-2の構成は、Transport Layer Security (TLS)の構成に似ています。

ネットワーク・ネイティブ暗号化の場合は、fips.oraSSL_FIPS140設定ではなく、sqlnet.ora構成ファイルでSSL_FIPS140を設定してFIPSモードを有効にします。

ネイティブ・ネットワーク暗号化向けにFIPSライブラリでサポートされているアルゴリズムは、次のとおりです。

  • 暗号化: AES128、AES192およびAES256
  • チェックサム: SHA1、SHA256、SHA384およびSHA512

E.4.2 ネイティブ・ネットワーク暗号化のためのFIPS_140パラメータの構成

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

FIPS_140パラメータで、FIPSモードで実行するようにネイティブ・ネットワーク暗号化アダプタを構成します。
  1. データベース・クライアントまたはデータベース・サーバーによって使用されるsqlnet.oraファイルを探します。
  2. sqlnet.oraファイルに次の行を追加します。
    SQLNET.FIPS_140=TRUE
  3. 任意のデータベース・サーバーまたはクライアントの任意のOracle Databaseホームでこの手順を繰り返します。
FIPS_140TRUEに設定されている場合、ネイティブ・ネットワーク暗号化の暗号操作は、FIPSモードの埋込みBSAFE Micro Edition Suite (MES)ライブラリで行われます。ハードウェア・アクセラレーションが使用可能でホスト・ハードウェアおよびソフトウェアで適切に構成されている場合、これらの暗号操作はCPUによって高速化されます。

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

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

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

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

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

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

E.6 FIPS 140-2接続の検証

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

E.6.1 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を検索してトレース・ファイルを確認します。

E.6.2 ネットワーク・ネイティブ暗号化に対する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 DAC check succeededを検索してトレース・ファイルを確認します。

E.6.3 透過的データ暗号化および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