• ベストアンサー

公開鍵暗号方式を利用した下りデータの安全性について

公開鍵暗号方式については、  ・公開鍵で暗号化したものは秘密鍵で復号できる  ・秘密鍵で暗号化したものは公開鍵で復号できる  ・秘密鍵は(もちろん)秘密だが、公開鍵は不特定多数に配布可能 が前提にあると理解しています。 SSLも公開鍵暗号方式を利用した通信プロトコルということですが、ここで、一つの疑問が湧きました。 信頼できるルートから署名された証明書を持つサイトで、SSLによって通信が暗号化される会員登録画面があったとします。 利用者は、氏名や住所などを登録画面に入力し、登録ボタンを押します。 この時、入力した情報は、サイトの証明書から入手した公開鍵で暗号化され、サイトに送信されるのだと思います。 ここで暗号化された情報は、サイトが持つ秘密鍵のみで復号可能ですので、鍵を持たない第三者が盗聴すること自体が無意味であり、安全であると言えます。 では、登録された情報を、利用者が確認のために表示する場合はどうなのでしょう? 今度は、サイトが持つ秘密鍵で利用者の情報を暗号化し、サイトの公開鍵によって利用者側で復号することになると思います。 しかし、前述したように、そのサイトの公開鍵は不特定多数の人が持っている可能性があります。 ということは、下りデータの通信を盗聴することで、同じ公開鍵を持つ第三者に復号されてしまうのではないかと考えたのですが、実際はどうなのでしょうか? 利用者が個人で秘密鍵を持っていない状況での通信というのがポイントです。 インターネットなどで調べてみたのですが、秘密鍵の所有者向きの通信を公開鍵によって安全に暗号化することを例とした説明が多く、先の疑問に対する明確な解答を見つけることが出来ませんでした。 また、ランダムに生成した共通鍵を公開鍵で暗号化するハイブリッド方式というものがあり、何か関連があるかと思ったのですが、公開鍵暗号方式のデメリットである処理速度の問題を補う手法という内容で、解決には結び付きませんでした。 ご存知の方がいらっしゃいましたらお教え下い。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • dyna_1550
  • ベストアンサー率34% (122/353)
回答No.2

かなり知識のある方だと思いますので、SSLで調べればすぐに分かる話だと思います。 SSLの場合、以下、@ITからの抜粋ですが、 1)クライアントがSSLでのアクセスをサーバ要求します。 2)サーバは、サーバの公開鍵を含む証明書をクライアントに送ります。 3)クライアントは、証明機関の公開鍵を使って、証明書を復号、検証を行い、サーバ側の公開鍵を手に入れます。 4)クライアントは、一時的な共通鍵を生成し、サーバの公開鍵で暗号化して、サーバに送ります。 5)サーバは、クライアントから暗号化された共通鍵を受け取り、自分の秘密鍵で復号し、共通鍵を手に入れます。 6)同じ共通鍵で、クライアントとサーバは通信を始めます。 という動きになり、上り下りともに暗号化されています。

参考URL:
http://www.atmarkit.co.jp/fdotnet/hybooks/vbnet03/vbnet03_01.html
TempoI
質問者

お礼

dyna_1550さん。 ご回答有難うございます。 共通鍵での暗号化通信であっても、鍵さえ安全に交換できれば安全に通信できる、ということですね。 「暗号化する鍵と復号化する鍵が異なることにより安全性を保つ」という公開鍵暗号方式の特性の一つに気を取られ、逆説的に、「共通鍵=危険」といった方向に意識が流れていたので、単純なことに気付かなかったようです。 納得することが出来ました。 有難うございました。

その他の回答 (3)

noname#66323
noname#66323
回答No.4

http://itpro.nikkeibp.co.jp/article/COLUMN/20071026/285614/ No.1です。調べているうちに前半の説明が怪しくなってきたので忘れてください。

TempoI
質問者

お礼

vividasuさん。 わざわざすみません。 また、URLの情報有難うございます。 非常に詳しく、かつ、分かりやすく説明がなされており、大変参考になります。 皆さんから頂いた情報により、私自身の疑問を解決することができました。 有難うございました。

  • entree
  • ベストアンサー率55% (405/735)
回答No.3

> この時、入力した情報は、サイトの証明書から入手した公開鍵で暗号化され、サイトに送信されるのだと思います。 これが間違っています。SSL 通信の流れについて No.2 の方が抜粋されているので、すでに解決されているかもしれませんが、公開鍵を使ってネゴするのは鍵の交換と認証までであり、実際のデータのやりとりは交換された共通鍵を使って行われます。つまり、ハイブリッド方式で行われているわけですね。 SSL のサイトにアクセスしてみるて、鍵のアイコンをクリックしてみてください。私が今使っているブラウザは Firefox 2.0 ですが、AES-256 と書かれています。この AES (256-bit) は紛れもなく共通鍵暗号のアルゴリズムであることからも分かるかと思います。 あと、交換した共通鍵はセッションが確立されている間、ずっと同じ物が使用されるわけではなく、ある程度の時間 (通常はサーバ側で設定可能) が経過すると新たな共通鍵が生成・交換されます。

TempoI
質問者

お礼

entreeさん。 ご回答有難うございます。 共通鍵での暗号化通信であっても、鍵さえ安全に交換できれば安全に通信できる。 安全に鍵を交換する方法として公開鍵暗号方式を利用する、ということですね。 当方、IE6.0を使用しているのですが、証明書の情報からは、通信中に使用される暗号化アルゴリズムの種類を確認することができませんでした。(署名アルゴリズムなどは記載されているのですが・・これではないですよね) 表示のされ方がブラウザにより異なるということなのでしょう。 (サイトにもよる??) ですが、Firefoxではこれを確認できるということですので、通信自体が共通鍵で行われていることを証明する具体例として納得できるものでした。 また、共通鍵を定期的に変更することにより安全性を高めていることが理解できました。 有難うございました。

noname#66323
noname#66323
回答No.1

情報を開示する際に多くのサイトでは文字によるパスワードを用いているのでそれが鍵の代わりになっているのではないでしょうか。この場合、復号をする役割はサーバのみになりますから別に所有者は鍵に依存せず、そのサーバの電子証明書が本物であるかをブラウザが自動的に判別するだけで済むかもしれません。専門家ではないのであしからず。 ただ、野村証券のようにログインの際に電子証明書を用いてより厳密にこの過程を行う企業もあるようです。セキュリティ上の観点から直接URLを張ってしまうのもどうかと思いますので、興味がありましたら探してみてください。 http://www.nomura.co.jp/

TempoI
質問者

お礼

vividasuさん。 情報有難うございます。 vividasuさんの推測を、皆が同じ公開鍵を持つことによる安全性への疑問という観点に当てはめると、サイトから配布された公開鍵を、認証の際に入力したパスワードを元に独自のものに変更し、第三者の持つ公開鍵と違うものにする、といったイメージを抱いたのですが、合っておりますでしょうか? これについては少し調べてみようと思います。 もう一つ、野村証券のサイトを拝見致しました。 利用者へ電子証明書を発行する仕組みについてはベリサインのサイトに分かりやすく紹介されていましたので、そちらも確認してみました。 http://www.verisign.co.jp/basic/pki/cert_use/index.html 頂いた情報から、以下のように解釈しました。  ・電子証明書を利用者へ発行することで、利用者が自分自身の秘密鍵と公開鍵を手に入れる  ・利用者の電子証明書はサイトへの本人証明に使用されると同時に、利用者の公開鍵をサイト側に配布する  ・上り(利用者→サイト)方向の通信は、サイトが利用者に配布した公開鍵によって暗号化する  ・下り(サイト→利用者)方向の通信では、利用者がサイトに配布した公開鍵によって暗号化する  ※「電子証明書」と「公開鍵証明書」を同義に扱う説明が多いので、それを前提としています。 これであれば、上下双方向において安全な通信が行われそうですね。 このようなサイトであれば問題ないと思っているのですが、大多数の情報サイトやショッピングサイトなどではここまでしていないのではないかと思い、やはりまだ疑問は残ります。

関連するQ&A