17 Oracle Databaseのネイティブ・ネットワーク暗号化とデータ整合性の構成

サーバーとクライアントの両方について、Oracle Net Services固有のデータ暗号化およびデータ整合性を構成できます。

Oracle Databaseのネイティブ・ネットワーク暗号化とデータ整合性について

Oracle Databaseでは、ネットワークで送信されるデータを暗号化できます。

Oracle Databaseのネイティブ・ネットワーク暗号化と整合性の仕組み

Oracle Databaseは、ネットワーク間を移動するデータが保護されるように、ネイティブ・データ・ネットワークの暗号化および整合性を提供します。

セキュアな暗号システムの目的は、キーに基づいて、平文データを解読不能な暗号文に変換することです。正しいキーがなければ、暗号文を元の平文に変換することはきわめて困難(計算上は不可能)です。

対称暗号システムでは、同じデータの暗号化と復号化の両方に同じキーを使用します。Oracle Databaseは、Advanced Encryption Standard (AES)の対称暗号システムを提供して、Oracle Net Servicesトラフィックの機密保護を図ります。

Advanced Encryption Standard

Oracle Databaseでは、米国連邦情報処理標準(FIPS)暗号化アルゴリズムであるAdvanced Encryption Standard (AES)がサポートされています。

AESは、ネットワーク上で機密データを保護するために、あらゆる米国政府組織および企業で使用できます。この暗号化アルゴリズムでは、128ビット、192ビットおよび256ビットの3つの標準のキーの長さが定義されています。いずれのバージョンも、外部暗号ブロック連鎖(CBC)モードで稼働します。

ARIA

Oracle DatabaseはAcademia, Research Institute, and Agency (ARIA)アルゴリズムをサポートしています。

これはアルゴリズム設計に当たった韓国の研究者たちの共同の取組みを認めたものです。

ARIAでは、128ビット、192ビットおよび256ビットの3つの標準のキーの長さが定義されています。いずれのバージョンも、外部暗号暗号ブロック連鎖(CBC)モードで動作します。

GOST

Oracle Databaseは、GOsudarstvennyy STandart (GOST)アルゴリズムをサポートしています。

GOSTアルゴリズムは、Euro-Asian Council for Standardization, Metrology and Certification (EACS)によって作成されました。

GOSTでは、256ビットのキー・サイズが定義されています。Oracle Databaseでは、外部暗号ブロック連鎖(CBC)モードが使用されます。

SEED

Oracle Databaseは、韓国情報保護振興院(KISA)の暗号化アルゴリズム、SEEDをサポートしています。

SEEDでは、128ビットのキー・サイズが定義されています。標準に対する拡張として192ビットおよび256ビットの追加のキー・サイズを定義したものもありますが、Oracle Databaseではこれらの拡張はサポートされません。Oracle Databaseでは、SEEDは外部暗号ブロック連鎖(CBC)モードで動作します。

Triple-DESのサポート

Oracle Databaseでは、DESアルゴリズムにメッセージ・データを3回渡して暗号化する、Triple-DES (3DES)暗号化がサポートされています。

3DESは高度なメッセージ・セキュリティを提供しますが、パフォーマンスの低下を伴います。パフォーマンス低下の度合いは、暗号化を実行するプロセッサの速度によって異なります。3DESは、標準のDESアルゴリズムに比べ、データ・ブロックの暗号化に通常3倍の時間を要します。

3DESには2つのキーを使用するバージョンと3つのキーを使用するバージョンがあり、それぞれ有効なキーの長さは112ビットと168ビットです。いずれのバージョンも外部暗号ブロック連鎖(CBC)モードで稼働します。

Oracle DatabaseおよびSecure Network Servicesで利用可能なDES40アルゴリズムは、秘密キーを事前処理することによって有効キー・ビットを40とするDESの一種です。米国の輸出法が厳しかったときに米国およびカナダ以外の顧客を対象にDESベースの暗号化を提供する目的で設計されました。DES40、DESおよび3DESはすべて輸出のために使用できます。DES40は、海外顧客向けに下位互換性を維持するために引き続きサポートされています。

Oracle Databaseのネイティブ・ネットワーク暗号化のデータ整合性

ネットワーク・データを暗号化すると、ネットワーク上で転送される平文データを不正なユーザーが閲覧できなくなり、データのプライバシが保護されます。

また、Oracle Databaseでは、2つの形態の攻撃からデータを保護できます。

表17-1に、これらの攻撃に関する情報を示します。

表17-1 ネットワーク攻撃の2つの形態

攻撃形態 説明

データ変更攻撃

データ変更攻撃とは、不正なユーザーが転送中のデータを傍受し、データを変更して再転送することです。たとえば、銀行への$100の預入れを傍受して、金額を$10,000に変更し、その水増し金額を再転送することをデータ変更攻撃といいます。

再生攻撃

再生攻撃とは、有効なデータ全体を反復的に再送することです。たとえば、銀行からの$100の払戻しを傍受し、その払戻しを10回再転送して、最終的に$1,000受け取るといった攻撃です。

データの整合性アルゴリズムのサポート

キーで順序付けられたMessage Digest 5 (MD5)アルゴリズムまたはSecure Hash Algorithm (SHA-1およびSHA-2)を使用して、これらの攻撃からデータを保護できます。

いずれのハッシュ・アルゴリズムでも、データがなんらかの方法で変更された場合に変わるチェックサムを作成します。この保護機能は暗号化プロセスとは独立して動作するため、暗号化の有無に関係なくデータ整合性を保つことができます。

Diffie-Hellmanベースのキー交換

Diffie-Hellmanキー交換アルゴリズムを使用して、マルチユーザー環境でデータを保護できます。

マルチユーザー環境では、安全なキーを配布することは困難です。Oracle Databaseでは、一般的なDiffie-Hellmanキー交換アルゴリズムを使用して、暗号化およびデータ整合性の両面において安全なキーの配布を実現します。

暗号化を使用して暗号データを保護するときは、キーを頻繁に変更して、キーの安全性が損なわれた場合の影響を最小限に抑える必要があります。そのため、Oracle Databaseのキー管理機能では、セッションごとにセッション・キーが変更されます。

認証キー・フォールドインを使用して、Diffie-Hellmanキー交換アルゴリズムによるキー交換に対する第三者の攻撃(従来の呼称は介在者攻撃)を阻止できます。この暗号化では、クライアントとサーバーのみが認識している共有秘密キーとDiffie-Hellmanによって交換される最初のセッション・キーを組み合せることによって、セッション・キーの安全性を大幅に強化しています。

クライアントとサーバーは、Diffie-Hellmanによって生成されるセッション・キーを使用して通信を開始します。サーバーに対するクライアントの認証時に、両者のみが認識する共有秘密鍵が確立されます。Oracle Databaseでは、その共有秘密キーとDiffie-Hellmanセッション・キーを組み合せることで、介在者攻撃を阻止するためのさらに強力なセッション・キーを生成します。

ノート:

認証キー・フォールドイン機能は、Oracle Databaseに組み込まれているため、システム管理者またはネットワーク管理者による構成作業は必要ありません。

データの暗号化および整合性の構成

Oracle Database固有のOracle Net Servicesによる暗号化および整合性は、Oracle Net Servicesがインストール済であることを前提としています。

暗号化および整合性のアクティブ化について

どのネットワーク接続でも、クライアントとサーバーの両方が複数の暗号化アルゴリズムと複数の整合性アルゴリズムをサポートできます。

接続が確立されるときに、sqlnet.oraファイルで指定されているアルゴリズムの中から、使用するアルゴリズムをサーバーが選択します。サーバーは、クライアントとサーバーの両方で使用できるアルゴリズム間で一致するものを検索し、サーバー側のリストで最初にあって、クライアント側のリストにも出現するアルゴリズムを選択します。接続の一方の側がアルゴリズム・リストを指定していない場合、その側でインストールされているすべてのアルゴリズムを使用できます。いずれかの側でインストールされていないアルゴリズムを指定すると、エラー・メッセージORA-12650が表示され、接続が失敗します。

暗号化パラメータと整合性パラメータを定義するには、ネットワーク上のクライアントとサーバーのsqlnet.oraファイルを変更します。

利用可能な暗号化アルゴリズムの一部またはすべて、および利用可能な整合性アルゴリズムの一方または両方を構成できます。各接続セッションに使用できるのは、1つの暗号化アルゴリズムと1つの整合性アルゴリズムのみです。

ノート:

Oracle Databaseでは、クライアントとサーバーで利用可能なアルゴリズムのうち、最初の暗号化アルゴリズムと最初の整合性アルゴリズムが自動的に選択されます。ネゴシエーションの優先順にアルゴリズムとキーの長さを選択することをお薦めします(つまり、最も強力なキーの長さを最初に選択します)。

関連項目:

暗号化および整合性のネゴシエーションについて

データの暗号化および整合性を使用するシステム上のsqlnet.oraファイルには、REJECTEDACCEPTEDREQUESTEDREQUIREDパラメータの一部またはすべてが含まれている必要があります。

暗号化および整合性のネゴシエーションの値について

Oracle Net Managerを使用して、暗号化と整合性の構成パラメータに4つの値を指定できます。

次の4つの値はセキュリティの低い順で記載されています。暗号化および整合性を使用しているシステムのクライアントとサーバーのプロファイル・ファイル(sqlnet.ora)でこれらを使用する必要があります。

REJECTEDは、クライアントとサーバーの間の通信に最小レベルのセキュリティを提供し、値REQUIREDは、最高レベルのネットワーク・セキュリティを提供します。

  • REJECTED

  • ACCEPTED

  • REQUESTED

  • REQUIRED

各パラメータのデフォルト値はACCEPTEDです。

Oracle Databaseサーバーおよびクライアントは、デフォルトではACCEPT暗号化接続に設定されます。これは、接続の片側のみ(サーバー側またはクライアント側)を構成するだけで、接続ペアに対して目的の暗号化および整合性設定を有効化できることを意味します。

したがって、たとえば、数多くのOracleクライアントがOracleデータベースに接続する場合も、サーバー側でsqlnet.oraに適切な変更を加えることによって、すべての接続に対して必要な暗号化および整合性設定を構成できます。クライアントごとに個別に構成の変更を実装する必要はありません。

表17-2に、クライアントとサーバーの構成パラメータを各種組み合せたときに、セキュリティ・サービスが有効化されるかどうかを示します。サーバーまたはクライアントでREQUIREDが指定されている場合は、共通のアルゴリズムが存在しないと、接続が失敗します 。それ以外の場合は、サービスが有効化されていて、共通のサービス・アルゴリズムが存在しないと、サービスが無効化されます

表17-2 暗号化とデータ整合性のネゴシエーション

クライアントの設定 サーバーの設定 暗号化とデータのネゴシエーション

REJECTED

REJECTED

OFF

ACCEPTED

REJECTED

OFF

REQUESTED

REJECTED

OFF

REQUIRED

REJECTED

接続失敗

REJECTED

ACCEPTED

OFF

ACCEPTED

ACCEPTED

OFF脚注1

REQUESTED

ACCEPTED

ON

REQUIRED

ACCEPTED

ON

REJECTED

REQUESTED

OFF

ACCEPTED

REQUESTED

ON

REQUESTED

REQUESTED

ON

REQUIRED

REQUESTED

ON

REJECTED

REQUIRED

接続失敗

ACCEPTED

REQUIRED

ON

REQUESTED

REQUIRED

ON

REQUIRED

REQUIRED

ON

脚注1

この値のデフォルトはOFFです。ユーザーがOracle Net Managerを使用するか、sqlnet.oraファイルを変更することによってこのパラメータを変更しないかぎり、暗号化とデータ整合性は有効化されません。

REJECTED構成パラメータ

REJECTED値は、他方が要求している場合でも、セキュリティ・サービスを無効にします。

このシナリオでは、セキュリティ・サービスの使用が許可されないことを接続元で指定します。接続先がREQUIREDに設定されている場合、エラー・メッセージORA-12650が表示されて接続が終了します。接続先がREQUESTEDACCEPTEDまたはREJECTEDに設定されている場合、エラーは発生せずに、セキュリティ・サービスが無効のまま接続が継続されます。

ACCEPTED構成パラメータ

ACCEPTED値は、他方が必要としている場合または要求している場合に、セキュリティ・サービスを有効にします。

このシナリオでは、接続元からはセキュリティ・サービスを要求しませんが、接続先がREQUIREDまたはREQUESTEDに設定されている場合は、セキュリティ・サービスが有効化されます。接続先がREQUIREDまたはREQUESTEDに設定されていて、該当する暗号化アルゴリズムまたは整合性アルゴリズムが見つかると、エラーは発生せずに、セキュリティ・サービスが有効のまま接続が継続されます。接続先がREQUIREDに設定されていて、該当するアルゴリズムが見つからない場合、エラー・メッセージORA-12650が表示されて接続が終了します。

接続先がREQUESTEDに設定されていて、該当するアルゴリズムが見つからない場合、または接続先がACCEPTEDまたはREJECTEDに設定されている場合、エラーは発生せずに、セキュリティ・サービスが無効のまま接続が継続されます。

REQUESTED構成パラメータ

REQUESTED値は、他方が許可している場合にセキュリティ・サービスを有効にします。

このシナリオでは、接続元がセキュリティ・サービスの使用を希望します(必須ではない)。接続先でACCEPTEDREQUESTEDまたはREQUIREDが指定されている場合、セキュリティ・サービスが有効化されます。接続先に該当するアルゴリズムがある必要があります。見つからない場合、セキュリティ・サービスは有効化されません。接続先でREQUIREDが指定されていて、該当するアルゴリズムが見つからない場合、接続は失敗します

REQUIRED構成パラメータ

REQUIRED値は、セキュリティ・サービスを有効にする、または接続を禁止します。

このシナリオでは、接続元がセキュリティ・サービスの有効化を強制します。接続先でREJECTEDが指定されている場合、または接続先に互換性のあるアルゴリズムが見つからない場合、接続は失敗します

Oracle Net Managerを使用した暗号化および整合性パラメータの構成

Oracle Net Managerを使用して、暗号化および整合性パラメータを設定または変更できます。

クライアントとサーバーでの暗号化の構成

クライアントとサーバーで暗号化を構成するには、Oracle Net Managerを使用します。

  1. Oracle Net Managerを起動します。
    • (UNIX) $ORACLE_HOME/binから、コマンドラインで次のコマンドを入力します。

      netmgr
      
    • (Windows)「スタート」「プログラム」「Oracle - HOME_NAME」「Configuration and Migration Tools」「Net Manager」を選択します。

  2. 「Oracle Netの構成」を展開し、「ローカル」から「プロファイル」を選択します。
  3. 「ネーミング」リストから、「ネットワーク・セキュリティ」を選択します。

    ネットワーク・セキュリティのタブ付きウィンドウが表示されます。

  4. 「暗号化」タブを選択します。
  5. 「暗号化」ボックスからCLIENTまたはSERVERオプションを選択します。
  6. 「暗号化タイプ」リストから、次のいずれかを選択します。
    • REQUESTED

    • REQUIRED

    • ACCEPTED

    • REJECTED

  7. (オプション)「暗号化シード」フィールドに、10から70字のランダムな文字を入力します。クライアントの暗号化シードは、サーバーの暗号化シードとは別のものにします。
  8. 「使用可能なメソッド」リストで暗号化アルゴリズムを選択します。右矢印(>)を選択して「選択メソッド」リストに移動します。追加の方式を使用する場合は、それぞれ同じ手順を繰り返します。
  9. 「ファイル」「ネットワーク構成の保存」を選択します。sqlnet.oraファイルが更新されます。
  10. 同じ手順を繰り返して、もう一方のシステムで暗号化を構成します。2つのシステムのsqlnet.oraファイルに、次のエントリが含まれている必要があります。
    • サーバー:

      SQLNET.ENCRYPTION_SERVER = [accepted | rejected | requested | required]
      SQLNET.ENCRYPTION_TYPES_SERVER = (valid_encryption_algorithm [,valid_encryption_algorithm])
    • クライアント:

      SQLNET.ENCRYPTION_CLIENT = [accepted | rejected | requested | required]
      SQLNET.ENCRYPTION_TYPES_CLIENT = (valid_encryption_algorithm [,valid_encryption_algorithm])
      

表17-3に、有効な暗号化アルゴリズムと対応する有効な値を示します。

表17-3 有効な暗号化アルゴリズム

アルゴリズム名 有効な値

AES 256ビット・キー

AES256

AES 192ビット・キー

AES192

AES 128ビット・キー

AES128

クライアントとサーバーでの整合性の構成

Oracle Net Managerを使用して、クライアントとサーバーの両方でネットワーク整合性を構成できます。

  1. Oracle Net Managerを起動します。
    • (UNIX) $ORACLE_HOME/binから、コマンドラインで次のコマンドを入力します。

      netmgr
      
    • (Windows)「スタート」「プログラム」「Oracle - HOME_NAME」「Configuration and Migration Tools」「Net Manager」を選択します。

  2. 「Oracle Netの構成」を展開し、「ローカル」から「プロファイル」を選択します。
  3. 「ネーミング」リストから、「ネットワーク・セキュリティ」を選択します。

    ネットワーク・セキュリティのタブ付きウィンドウが表示されます。

  4. 「整合性」タブを選択します。
  5. いずれのシステムを構成しているかに応じて、「整合性」ボックスから「サーバー」または「クライアント」を選択します。
  6. 「チェックサム・レベル」リストから、次のチェックサム・レベル値のいずれかを選択します。
    • REQUESTED

    • REQUIRED

    • ACCEPTED

    • REJECTED

  7. 「使用可能なメソッド」リストで整合性アルゴリズムを選択します。右矢印(>)を選択して「選択メソッド」リストに移動します。追加の方式を使用する場合は、それぞれ同じ手順を繰り返します。
  8. 「ファイル」「ネットワーク構成の保存」を選択します。

    sqlnet.oraファイルが更新されます。

  9. 同じ手順を繰り返して、もう一方のシステムで整合性を構成します。

    2つのシステムのsqlnet.oraファイルに、次のエントリが含まれている必要があります。

    • サーバー:

      SQLNET.CRYPTO_CHECKSUM_SERVER = [accepted | rejected | requested | required]
      SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (valid_crypto_checksum_algorithm [,valid_crypto_checksum_algorithm])
      
    • クライアント:

      SQLNET.CRYPTO_CHECKSUM_CLIENT = [accepted | rejected | requested | required]
      SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT = (valid_crypto_checksum_algorithm [,valid_crypto_checksum_algorithm])
      

関連項目:

サポートされる暗号化および整合性アルゴリズムのリストは、『Oracle Database Advanced Securityガイド』を参照してください。
異なるユーザーに対するOracleネイティブ暗号化とSSL認証の両方の同時有効化

SQLNET.ENCRYPTION_CLIENTおよびSQLNET.ENCRYPTION_SERVERの設定に応じて、異なるユーザーに対してOracleネイティブ暗号化とSSL認証の両方を同時に許可するようにOracle Databaseを構成できます。

異なるユーザーに対するOracleネイティブ暗号化とSSL認証の両方の同時有効化について

デフォルトでは、Oracle Databaseでは、異なるユーザーに対するOracleネイティブ暗号化とSecure Sockets Layer (SSL)認証の両方を同時に使用することはできません。

Oracleネイティブ暗号化(Advanced Networking Option (ANO)暗号化とも呼ばれる)とSSL認証の併用は、二重暗号化と呼ばれます。

一部のユーザーにユーザー名とパスワードの使用によるサーバーへの接続を可能にし、他のユーザーにSSL証明書の使用によるそのサーバーへの認証を可能にするように、TCPリスナーとTCPSリスナーの両方を構成する必要がある場合があります。このような場合、パスワードベースの認証とSSL認証の両方を構成する必要があります。以前のリリースの回避策では、SQLNET.ENCRYPTION_SERVERパラメータをrequestedに設定していました。SQLNET.ENCRYPTION_SERVERrequiredに設定されている必要がある場合、SQLNET.ENCRYPTION_CLIENTSQLNET.ENCRYPTION_SERVERの両方のIGNORE_ANO_ENCRYPTION_FOR_TCPSパラメータをTRUEに設定できます。デフォルトでは、これはFALSEに設定されています。

IGNORE_ANO_ENCRYPTION_FOR_TCPSTRUEに設定すると、クライアントはすべての発信TCPS接続のSQLNET.ENCRYPTION_CLIENTパラメータに設定されている値を無視します。このパラメータを使用すると、TCPSクライアントの使用に矛盾がある場合に、データベースでSQLNET.ENCRYPTION_CLIENTまたはSQLNET.ENCRYPTION_SERVERの設定を、これら2つのパラメータがrequiredに設定されていても無視できます。

異なるユーザーに対するOracleネイティブ暗号化とSSL認証の両方の同時構成

IGNORE_ANO_ENCRYPTION_FOR_TCPSパラメータを使用して、Oracleネイティブ暗号化とSecure Sockets Layer (SSL)認証の両方を同時に使用できるようにします。

サーバーではIGNORE_ANO_ENCRYPTION_FOR_TCPSsqlnet.oraファイルで設定する必要があり、クライアントではsqlnet.oraファイルまたはtnsnames.oraファイルのいずれかで設定できます。
  1. データベース・サーバーにログインします
  2. sqlnet.oraファイルの場所に移動します。
    デフォルトでは、sqlnet.oraORACLE_BASE/network/adminディレクトリにあります。sqlnet.oraファイルは、環境変数TNS_ADMINで指定されたディレクトリに配置される場合もあります。
  3. sqlnet.oraで、現在のSQLNET.ENCRYPTION_SERVERの設定がrequiredrequestedかを確認します。
  4. SQLNET.ENCRYPTION_SERVERがrequiredに設定されている場合は、SQLNET.IGNORE_ANO_ENCRYPTION_FOR_TCPSsqlnet.oraに追加してからTRUEに設定します。
    IGNORE_ANO_ENCRYPTION_FOR_TCPS=TRUE
  5. sqlnet.oraファイルを保存して終了します。
  6. クライアントにログインします。
    クライアントの場合、sqlnet.oraファイルまたはtnsnames.oraファイルのいずれかに値を設定できます。
    • sqlnet.oraの値の設定: SQLNET.ENCRYPTION_CLIENTパラメータがrequiredに設定されているか確認します。SQLNET.ENCRYPTION_CLIENTの場合は、sqlnet.oraファイルを編集して次の設定を行います。
      IGNORE_ANO_ENCRYPTION_FOR_TCPS=TRUE
    • tnsnames.oraの値の設定: デフォルトでは、tnsnames.orasqlnet.oraと同じ場所にあります。SQLNET.ENCRYPTION_CLIENTsqlnet.orarequiredに設定されている場合は、TNS_ALIAS設定のSECURITY部分でIGNORE_ANO_ENCRYPTION_FOR_TCPS=TRUEを設定します。例:
      test_ssl=
          (DESCRIPTION =
             (ADDRESS=(PROTOCOL=tcps)(HOST=)(PORT=1750))
             (CONNECT_DATA=(SID=^ORACLE_SID^))
             (SECURITY=(IGNORE_ANO_ENCRYPTION_FOR_TCPS=TRUE))
           )