22

ほとんどのWiki記事では、クライアントブラウザが公開鍵(証明書)を使用して機密データ(ユーザー名/パスワードなど)を暗号化し、この暗号化されたデータをサーバーに送信する方法について説明しています。サーバーは秘密鍵を使用して復号化します。私はこの部分を手に入れます。しかし、サーバーがデータを暗号化してブラウザに送り返す方法を示す明確な情報はありません。

例として私のオンラインバンキングを使用してください:

(0)オンラインバンキングから信頼できる証明書(公開鍵)をすでに受け入れています。

(1)SSL URLを介して、私のブラウザはhttps://myonlinebanking.comにアクセスします

(2)ユーザー名/パスワードを入力してログインしました。これらのデータは暗号化されているため、中間者は無意味なデータしか見ることができません。

(3)銀行のWebサーバーが暗号化されたデータを受信し、その秘密鍵を使用してデータを復号化し、アカウントを正常に認証しました。

ここに私の質問があります:

銀行はどのように私のデータを送り返しますか?銀行はどのキーで応答データを暗号化しますか?銀行が「公開鍵」で暗号化されている場合、中間者は私が見ることができるのと同じようにそれを見ることができます。したがって、中間者は私のユーザー名/パスワードを知りませんが、それでも私のアカウントの残高を確認できますか?

ご協力ありがとうございました。

4

2 に答える 2

10

あなたはいくつかの間違った仮定を持っています:

  • HTTPデータは、サーバーに送信するために、サーバーの公開鍵で常に暗号化されるとは限りません。
  • サーバーの公開鍵は、安全な鍵の暗号化(対称暗号化)のために、最初に(ハンドシェイクプロトコル)安全な鍵を確立するために使用されます。
  • すべての通信は秘密鍵または対称鍵暗号化を介して行われ、クライアント(ブラウザー)とサーバーは同じ秘密鍵を使用してデータを暗号化および復号化します。

TLS(Transport Layer Security)プロトコルは、非対称暗号化(公開鍵)と対称暗号化(セキュア鍵)の組み合わせを使用します。銀行との主な通信は対称暗号化を使用しており、TLSハンドシェイク中にセッションキー(セキュアキー)が非対称暗号化を使用して安全に確立されます。

これはすべてTLS(Transport Layer Security)ハンドシェイクに含まれており、このリンクで非常によく説明されています。

于 2013-02-06T21:55:28.747 に答える
8

TLSハンドシェイクプロセスは、両方の当事者間に対称鍵を設定し、プロセスで非対称暗号化を使用する可能性があります(詳細は、クライアント/サーバー間でネゴシエートされた正確なアルゴリズムによって異なります)。このように、通信は一方向だけでなく、双方向で暗号化されます。

ただし、最終的にMITMからユーザーを保護するのは、ブラウザーが何らかの形式のホスト名検証を実行するという事実です。ハンドシェイクでサーバーによって提示された証明書は、最初にその有効性がチェックされます。それが成功すると、ブラウザは、証明書が通信している正確なホストにバインドされているかどうかを確認します。このチェックを省略した場合、すべての暗号化要素を含む残りの通信がプロトコルに厳密に従ったとしても、MITM攻撃は成功します。攻撃者は単に任意のホストになりすまして、残りのプロトコルを忠実に実行する可能性があります。違いはわかりません。

于 2012-06-09T13:52:58.837 に答える