8

Oracle JDBCクライアントライブラリを使用してOracle接続を確立する場合、パスワードまたはセキュリティハンドシェイクはデフォルトで暗号化されていますか?(Oracle JDBCクライアントライブラリを使用して接続するときに、パスワードがネットワーク経由で盗聴されるリスクがあるかどうかを知りたい)

4

1 に答える 1

27

パスワードは、ネットワークを介して転送中は常に暗号化されます。

攻撃を受けにくいというわけではありません。攻撃者がユーザーのパスワードのハッシュを取得でき、正当なクライアントとデータベース間のネットワーク トラフィックを監視できる場合、プレーンテキストのパスワードを取得することができます。

興味のある方のために、Oracle データベース ソフトウェアのさまざまなバージョンにわたる認証プロセスの概要を以下に示します。暗号化されたパスワードの転送を処理する手順は、太字で示されています。JDBC ドライバーが使用している認証プロトコルのバージョンは、常にその宣伝されているバージョンと一致するとは限らないため、完全には直観的ではありません。これは、クライアントが使用するプロトコルをネゴシエートできるためです。たとえば、11g JDBC ドライバは、11g データベースに接続するときに、必ずしも 11g 認証プロトコルを使用するとは限りません (10g 認証プロトコルにフォールバックする場合があります)。どのドライバーがどのプロトコルを使用しているか忘れてしまいました。

Oracle Database 8 の認証プロトコル

  1. クライアントは、特定のユーザーのサーバー セッション キーを要求します。
  2. サーバーは、サーバー セッション キーを生成します。
  3. サーバーは、要求されたユーザーのパスワード ハッシュを秘密鍵として使用して、サーバー セッション キーを暗号化します。
  4. サーバーは、暗号化されたサーバー セッション キーをクライアントに送信します。
  5. クライアントは、ユーザーのパスワード ハッシュを秘密鍵として使用して、暗号化されたサーバー セッション キーを復号化します。
  6. クライアントは、サーバー セッション キーを秘密キーとして使用して、ユーザーのパスワードを暗号化します。(DESに基づく独自アルゴリズム)
  7. クライアントは、暗号化されたパスワードをサーバーに送信します。
  8. サーバーは、サーバー セッション キーを秘密キーとして使用して、暗号化されたパスワードを復号化します。
  9. サーバーは、復号化されたパスワードのハッシュを計算します。
  10. 計算されたパスワード ハッシュ (手順 9 から) がサーバーに保存されているコピーと一致する場合、ユーザーは正しいパスワードを提供しています。

Oracle Database 9i の認証プロトコル

  1. クライアントは、特定のユーザーのサーバー セッション キーを要求します。
  2. サーバーは、サーバー セッション キーを生成します。
  3. サーバーは、要求されたユーザーのパスワード ハッシュを秘密鍵として使用して、サーバー セッション キーを暗号化します。
  4. サーバーは、暗号化されたサーバー セッション キーをクライアントに送信します。
  5. クライアントは、ユーザーのパスワード ハッシュを秘密鍵として使用して、暗号化されたサーバー セッション キーを復号化します。
  6. クライアントは、サーバー セッション キーを秘密キーとして使用して、ユーザーのパスワードを暗号化します。(DESに基づく独自アルゴリズム)
  7. クライアントは、暗号化されたパスワードをサーバーに送信します。
  8. サーバーは、サーバー セッション キーを秘密キーとして使用して、暗号化されたパスワードを復号化します。
  9. サーバーは、復号化されたパスワードのハッシュを計算します。
  10. 計算されたパスワード ハッシュ (手順 9 から) がサーバーに保存されているコピーと一致する場合、ユーザーは正しいパスワードを提供しています。

Oracle Database 10g の認証プロトコル

  1. クライアントは、接続するユーザーを指定して、サーバーにセッション キーを要求します。
  2. サーバーは、サーバー セッション キーを生成します。
  3. サーバーは、要求されたユーザーのパスワード ハッシュを秘密鍵として使用して、サーバー セッション キーを暗号化します。
  4. サーバーは、暗号化されたサーバー セッション キーをクライアントに送信します。
  5. クライアントは、要求されたユーザーのパスワード ハッシュを秘密鍵として使用して、暗号化されたサーバー セッション キーを復号化します。
  6. クライアントは、クライアント セッション キーを生成します。
  7. クライアントは、クライアント セッション キーをサーバー セッション キーと結合します。
  8. クライアントはユーザーのパスワードをソルトします。
  9. クライアントは、結合されたセッション キー (手順 7 から) を秘密キーとして使用して、ユーザーのソルトされたパスワードを暗号化します。(AES-128)
  10. クライアントは、ユーザーのパスワード ハッシュを秘密鍵として使用して、クライアント セッション キーを暗号化します。
  11. クライアントは、暗号化されたクライアント セッション キーと、暗号化されソルトされたユーザー パスワードをサーバーに送信します。
  12. サーバーは、要求されたユーザーのパスワード ハッシュを使用して、暗号化されたクライアント セッション キーを復号化します。
  13. サーバーは、クライアント セッション キーをサーバー セッション キーと結合します。
  14. サーバーは、結合されたセッション キー (手順 13 から) を秘密キーとして使用して、暗号化されたソルト付きパスワードを復号化します。
  15. サーバーは、ソルトされたパスワードのソルトを解除します。
  16. サーバーは復号化されたパスワードをハッシュします。
  17. サーバーは、計算されたパスワード ハッシュ (手順 16 から) を格納されているパスワード ハッシュと比較します。それらが等しい場合、ユーザーは正しいパスワードを提供しています。

Oracle Database 11g の認証プロトコル

  1. クライアントは、接続するユーザーを指定して、サーバーにセッション キーを要求します。
  2. サーバーは、サーバー セッション キーを生成します。
  3. サーバーはベリファイア データを生成します。
  4. サーバーは、要求されたユーザーのパスワード ハッシュを秘密鍵として使用して、サーバー セッション キーを暗号化します。
  5. サーバーは、暗号化されたサーバー セッション キー ("AUTH_SESSKEY") と検証データ ("AUTH_VFR_DATA") をクライアントに送信します。
  6. クライアントは、ベリファイア データをソルトとして使用して、ユーザーのパスワードをハッシュします。
  7. クライアントは、ユーザーのパスワード ハッシュを秘密鍵として使用して、暗号化されたサーバー セッション キーを復号化します。
  8. クライアントは、クライアント セッション キーを生成します。
  9. クライアントは、クライアント セッション キーをサーバー セッション キーと結合します。
  10. クライアントはユーザーのパスワードをソルトします。
  11. クライアントは、結合されたセッション キー (手順 9 から) を秘密キーとして使用して、ユーザーのソルトされたパスワードを暗号化します。(AES-192)
  12. クライアントは、ユーザーのパスワード ハッシュを秘密鍵として使用して、クライアント セッション キーを暗号化します。
  13. クライアントは、暗号化されたクライアント セッション キーと、暗号化されソルトされたユーザー パスワードをサーバーに送信します。
  14. サーバーは、要求されたユーザーのパスワード ハッシュを使用して、暗号化されたクライアント セッション キーを復号化します。
  15. サーバーは、クライアント セッション キーをサーバー セッション キーと結合します。
  16. サーバーは、結合されたセッション キー (手順 15 から) を秘密キーとして使用して、暗号化されたソルト付きパスワードを復号化します。
  17. サーバーは、ソルトされたパスワードのソルトを解除します。
  18. サーバーは復号化されたパスワードをハッシュします。
  19. サーバーは、計算されたパスワード ハッシュ (手順 18 から) を格納されているパスワード ハッシュと比較します。それらが等しい場合、ユーザーは正しいパスワードを提供しています。
于 2012-09-05T16:21:31.617 に答える