この章では、Oracle Advanced SecurityにおけるOracle Net Services固有のデータの暗号化および整合性の構成方法について説明します。次の項目について説明します。
この項では、現行リリースのOracle Advanced Securityで使用できるデータ暗号化アルゴリズムについて説明します。
注意: Oracle Advanced Securityの8.1.7より前のリリースでは、米国内版、アップグレード版および輸出版の3つのエディションがあり、それぞれ異なる鍵の長さを使用していました。このリリースには、これまで米国内版でのみ使用可能であった暗号化アルゴリズムと鍵の長さを完全に補完したものが組み込まれています。以前のバージョンの製品を使用しているユーザーは、個々の製品リリースに対応する米国内向けバージョンを入手できます。 |
安全性の高い暗号システムの目的は、鍵を使用して平文データを解読不可能な暗号文に変換することにあります。暗号化は、正しい鍵を知らないかぎり、対応する平文に再変換できない(計算不可能な)方法で行われます。対称型暗号化では、同一データの暗号化と復号化の両方に同じ鍵が使用されます。Oracle Advanced Securityでは、Oracle Net Services通信の機密を保護するために、Advanced Encryption Standard(AES)、DES、3DESおよびRC4の対称型暗号システムを利用できます。
このリリースでは、米国連邦情報処理標準(Federal Information Processing Standard: FIPS)の新しい暗号化アルゴリズムであるAdvanced Encryption Standard(AES)がサポートされます。AESは、すべての米国政府組織およびビジネスでネットワーク上の機密データを保護するために使用できます。この暗号化アルゴリズムでは、3種類の標準的な鍵の長さ(128ビット、192ビットおよび256ビット)が定義されています。すべてのバージョンとも外部暗号ブロック連鎖(CBC)モードで動作します。
Oracle Advanced Securityでは、データ暗号化規格(DES)アルゴリズムを使用できます。DESは長年に渡って米国政府の暗号化規格として利用され、金融業界では利用が義務付けられることもあります。長年にわたる規格であるため、DESは世界中で採用され、様々なアプリケーションで使用されています。
Oracle Advanced Securityは、Triple-DES暗号化(3DES)をサポートします。この暗号化では、メッセージ・データをDESアルゴリズムに3回渡すことによって暗号化します。3DESは高度なメッセージのセキュリティを実現しますが、パフォーマンスへの影響を伴います。パフォーマンスへの影響の度合いは、暗号化を実行するプロセッサの速度によって異なります。通常、3DESではデータ・ブロックを暗号化するために、標準のDESアルゴリズムに比べて3倍の時間がかかります。
3DESには2つの鍵を使用する場合と3つの鍵を使用する場合があり、有効な鍵の長さは、それぞれ112ビットと168ビットです。両バージョンとも外部暗号ブロック連鎖(CBC)モードで動作します。
DES40アルゴリズムは、Oracle Advanced Security、Oracle Advanced Networking OptionおよびSecure Network Servicesのすべてのリリースで利用可能なDESの変形で、40ビットの鍵を提供するためにその秘密鍵が事前に処理されます。DES40は、米国の輸出法が現在よりも厳しかった頃に、米国とカナダ以外の地域の顧客にDESベースの暗号化を提供するために設計されました。現在、Oracle Advanced Security 11g リリース1(11.1)では、DES40、DESおよび3DESのすべてを輸出用に使用できるようになりました。海外の顧客については、下位互換性を提供するためにDES40もサポートしています。
RSA Data Security社が開発したRC4アルゴリズムは、データを高速で暗号化するアルゴリズムの国際標準になりました。RC4はDESの数倍の速度で動作する可変長の鍵の長さのストリーム暗号なので、大量のデータ転送でもパフォーマンスへの影響を最小限に抑えて暗号化できます。
Oracle Advanced Security 11g リリース1(11.1)では、40ビット、56ビット、128ビットおよび256ビットの鍵の長さを持つRC4を実装できます。これによって、下位互換性と強力な暗号化を、パフォーマンスを犠牲にすることなく実現できます。
ネットワーク・データの暗号化によってデータのプライバシが守られるため、無許可の第三者はネットワーク上で転送中の平文データを見ることはできません。また、Oracle Advanced Securityでは、次の2つの形態のアクティブな攻撃からデータを保護できます。攻撃の詳細は、表4-1を参照してください。
表4-1 2つの攻撃の形態
攻撃の形態 | 説明 |
---|---|
データ変更攻撃 |
データ変更攻撃とは、無許可の第三者が転送中のデータを傍受し、データを変更して再転送することです。たとえば、銀行への100ドルの預入れを傍受して、金額を10,000ドルに変更し、その水増し金額を転送することをデータ変更攻撃といいます。 |
再生攻撃 |
再生攻撃とは、有効なデータ全体を反復的に再送することです。たとえば、銀行からの100ドルの払戻しを傍受し、その払戻しを10回再送して、最終的に1,000ドル受け取るといった攻撃です。 |
暗号化データの機密性は、通信関係者間で共有される秘密鍵の存在に依存しています。鍵は接続の両端の関係者間で排他的に共有する機密情報です。鍵がなければ、暗号メッセージを復号化したり、暗号チェックサム付きのメッセージをわからないように変更することは非常に困難(計算不可能)です。このような秘密鍵を提供および維持することを、鍵管理といいます。
マルチユーザー環境では、安全な鍵を配布することは困難です。Oracle Advanced Securityでは、一般的なDiffie-Hellman鍵交換アルゴリズムを使用して、暗号化およびデータの整合性の両面において安全な鍵の配布を実現します。
暗号化を使用して暗号化データを保護するときは、鍵を頻繁に変更して、鍵の安全性が損なわれた場合の影響を最小限に抑える必要があります。そのため、Oracle Advanced Securityの鍵管理機能では、セッションごとにセッション鍵が変更されます。
認証鍵フォールドインを使用する目的は、Diffie-Hellman鍵交換に対する第三者の攻撃(介在者による攻撃)を阻止することです。この暗号化では、クライアントとサーバーのみが認識している共有シークレットを、Diffie-Hellmanによって交換される最初のセッション鍵と組み合せることによって、セッション鍵の安全性を大幅に強化しています。
クライアントとサーバーは、Diffie-Hellmanによって生成されるセッション鍵を使用して通信を開始します。クライアントはサーバーを認証するときに、両者のみが認識している共有シークレットを確立します。Oracle Advanced Securityは、その共有シークレットとDiffie-Hellmanセッション鍵を組み合せることで、介在者による攻撃を阻止するように設計された、さらに強力なセッション鍵を生成します。
注意: 認証鍵フォールドイン機能は、Oracle Advanced Securityに組み込まれているため、システム管理者またはネットワーク管理者による構成作業は必要ありません。 |
この項では、Oracle Advanced SecurityにおけるOracle Net Services固有の暗号化と整合性の構成方法について説明します。ここでは、Oracle Net Servicesがインストール済であることを前提としています。
ネットワーク管理者またはセキュリティ管理者は、暗号化と整合性の構成パラメータを設定します。データの暗号化と整合性を使用するクライアントとサーバーのシステム上のプロファイル(sqlnet.ora
ファイル)には、この項で説明するパラメータの一部またはすべてが含まれている必要があります。
すべてのネットワーク接続で、クライアントとサーバーの両方が複数の暗号化アルゴリズムと複数の整合性アルゴリズムをサポートできます。接続が確立されるときに、sqlnet.ora
ファイルで指定されているアルゴリズムの中から、サーバーがどのアルゴリズムを使用するかを選択します。
サーバーは、クライアントとサーバーで使用可能なアルゴリズムの中から一致するアルゴリズムを探し、サーバー自体のリストとクライアントのリストの両方に含まれるアルゴリズムの中で最初のアルゴリズムを選択します。接続の片側がアルゴリズムのリストを指定していない場合は、インストールされているすべてのアルゴリズムが使用可能になります。 サーバーとクライアントの両側でインストールされていないアルゴリズムを指定すると、エラー・メッセージORA-12650
が表示され、接続が失敗します。
暗号化パラメータと整合性パラメータを定義するには、ネットワーク上のクライアントとサーバーのsqlnet.ora
ファイルを変更します。
Oracle Advanced Securityでは、表4-3に示す使用可能な暗号化アルゴリズムの一部またはすべて、および表4-4に示す使用可能な整合性アルゴリズムのどちらかまたは両方を構成できます。各接続セッションに使用できるのは、1つの暗号化アルゴリズムと1つの整合性アルゴリズムのみです。
注意: Oracle Advanced Securityは、クライアントとサーバーで使用可能な最初の暗号化アルゴリズムおよび整合性アルゴリズムを選択します。優先する折衝の順にアルゴリズムと鍵の長さを選択することをお薦めします(つまり、多くの場合、最も強力な鍵の長さを最初に選択します)。 |
暗号化または整合性をオンにするかどうかを指定する場合、Oracle Advanced Securityの暗号化と整合性の構成パラメータに対して4つの値のうちのいずれかを指定できます。次に、その4つの値をセキュリティ・レベルの低い順にリストします。値「拒否」(REJECTED
)は、クライアントとサーバーの間の通信に最小レベルのセキュリティを提供し、値「必要」(REQUIRED
)は、最高レベルのネットワーク・セキュリティを提供します。
各パラメータのデフォルト値は「適用」(ACCEPTED
)です。
接続先から要求されてもセキュリティ・サービスを使用可能にしない場合は、この値を選択します。
この使用例では、接続元でセキュリティ・サービスを使用禁止に指定します。 接続先が「必要」に設定されている場合は、エラー・メッセージORA-12650
が表示されて接続が終了します。接続先が「リクエスト」、「適用」または「拒否」に設定されている場合、エラーは発生せずに、セキュリティ・サービスがオフのまま接続が継続されます。
接続先から要求または依頼されたときにセキュリティ・サービスを使用可能にする場合は、この値を選択します。
この使用例では、接続元からはセキュリティ・サービスを要求しませんが、接続先が「必要」または「リクエスト」に設定されている場合は、そのセキュリティ・サービスが使用可能になります。接続先が「必要」または「リクエスト」に設定されていて、一致する暗号化または整合性アルゴリズムが見つかると、エラーは発生せずに、セキュリティ・サービスがオンのまま接続が継続されます。 接続先のパラメータが「必要」に設定されていて、一致するアルゴリズムが見つからない場合、エラー・メッセージORA-12650
が表示されて接続が終了します。
接続先が「リクエスト」に設定されていて、一致するアルゴリズムが見つからない場合、または接続先が「適用」または「拒否」に設定されている場合は、エラーは発生しないで、セキュリティ・サービスがオフのまま接続が継続されます。
接続先でセキュリティ・サービスの使用を許可されているときにそのセキュリティ・サービスを使用可能にする場合は、この値を選択します。
この使用例では、接続元がセキュリティ・サービスは必要だが必須ではないことを指定します。接続先が「適用」、「リクエスト」または「必要」を指定すると、セキュリティ・サービスが使用可能になります。接続先で使用可能なアルゴリズムと一致するアルゴリズムが見つからない場合は、セキュリティ・サービスが使用可能になりません。接続先が「必要」を指定して、一致するアルゴリズムが見つからない場合は、接続が失敗します。
セキュリティ・サービスを使用可能にする場合、または保護されていない接続を禁止する場合は、この値を選択します。
この使用例では、接続元がセキュリティ・サービスを使用可能にする必要があることを指定します。接続先が「拒否」を指定した場合、または接続先と互換性のあるアルゴリズムが見つからない場合は、接続が失敗します。
表4-2では、クライアントとサーバーの構成パラメータの組合せに基づいてセキュリティ・サービスが使用可能となる場合と使用可能とならない場合を示しています。サーバーまたはクライアントが「必要」を指定している場合は、共通のアルゴリズムが存在しないと接続が失敗します。サーバーもクライアントも「必要」を指定しておらずセキュリティ・サービスが使用可能になっている場合、共通のサービス・アルゴリズムが存在しないとセキュリティ・サービスが使用禁止になります。
表4-2 暗号化とデータの整合性の指定
クライアントの設定 | サーバーの設定 | 暗号化とデータの指定 |
---|---|---|
拒否 |
拒否 |
OFF |
適用 |
拒否 |
OFF |
リクエスト |
拒否 |
OFF |
必要 |
拒否 |
接続が失敗 |
拒否 |
適用 |
OFF |
適用 |
適用 |
OFF脚注 1 |
リクエスト |
適用 |
ON |
必要 |
適用 |
ON |
拒否 |
リクエスト |
OFF |
適用 |
リクエスト |
ON |
リクエスト |
リクエスト |
ON |
必要 |
リクエスト |
ON |
拒否 |
必要 |
接続が失敗 |
適用 |
必要 |
ON |
リクエスト |
必要 |
ON |
必要 |
必要 |
ON |
脚注 1 この値はOFFにデフォルト設定されています。ユーザーがOracle Net Managerを使用するか、sqlnet.ora
ファイルを変更することによってこのパラメータを変更しないかぎり、暗号化とデータの整合性は使用可能になりません。
クライアントとサーバーで乱数を生成するには、複数のシードを使用します。使用可能なシードの1つは、ユーザー定義の暗号化シードです。このシードは、sqlnet.ora
ファイルのsqlnet.crypto_seed
パラメータで設定します。ユーザー定義の暗号化シードでは10〜70文字を指定でき、この指定はいつでも変更できます。Diffie-Hellman鍵変換では乱数を使用して、各接続セッションに固有のセッション鍵を生成します。
Oracle Net Managerを使用して、暗号化および整合性パラメータを設定または変更できます。この項では、次の項目について説明します。
関連項目:
|
クライアントとサーバーで暗号化を構成するには、Oracle Net Managerを使用します(「Oracle Net Managerの起動」を参照してください)。Oracle Net Managerを構成する手順は次のとおりです。
Oracle Advanced Securityプロファイルにナビゲートします(詳細は、「Oracle Advanced Securityプロファイルへのナビゲート」を参照してください)。「Oracle Advanced Security」タブ・ウィンドウが表示されます。(図4-1)
「暗号化」タブをクリックします。
「暗号化」ボックスからCLIENTまたはSERVERオプションを選択します。
「暗号化タイプ」リストから、次のいずれかを選択します。
リクエスト
必要
適用
拒否
(オプション)「暗号化シード」フィールドに、10〜70字のランダムな文字を入力します。クライアントの暗号化シードは、サーバーの暗号化シードとは別のものにします。
「使用可能なメソッド」リストで暗号化アルゴリズムを選択します。次に、右矢印(>)を選択して「選択メソッド」リストに移動します。追加するメソッドすべてに対して同じ作業を繰り返します。
「ファイル」→「ネットワーク構成の保存」を選択します。sqlnet.ora
ファイルが更新されます。
この手順を繰り返して、もう一方のシステムの暗号化を構成します。2つのシステムのsqlnet.ora
ファイルに、次のエントリが含まれている必要があります。
サーバー
SQLNET.ENCRYPTION_SERVER = [accepted | rejected | requested | required] SQLNET.ENCRYPTION_TYPES_SERVER = (valid_encryption_algorithm [,valid_encryption_algorithm])
有効な暗号化アルゴリズムと対応する有効値を表4-3にまとめます。
Oracle Net Managerを使用して、クライアントとサーバーでデータの整合性を構成する手順は次のとおりです。
Oracle Advanced Securityプロファイルにナビゲートします。(詳細は、「Oracle Advanced Securityプロファイルへのナビゲート」を参照してください)。「Oracle Advanced Security」タブ・ウィンドウが表示されます。(図4-2)
「整合性」タブをクリックします。
構成するシステムに応じて、「整合性」ボックスから「SERVER」または「CLIENT」を選択します。
「チェックサム・レベル」リストから、次のいずれかのチェックサム・レベル値を選択します。
リクエスト
必要
適用
拒否
「使用可能なメソッド」リストで整合性アルゴリズムを選択します。次に、右矢印(>)を選択して「選択メソッド」リストに移動します。追加するメソッドすべてに対して同じ作業を繰り返します。
「ファイル」→「ネットワーク構成の保存」を選択します。sqlnet.ora
ファイルが更新されます。
この手順を繰り返して、もう一方のシステムの整合性を構成します。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])
有効な整合性アルゴリズムと対応する有効値を表4-4に示します。