みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

自己署名証明書(オレオレ証明書)の暗号化について

SSL暗号化通信の仕組み自体は,下記URLの通りとして把握しております.
(1*) http://www.twsvc.com/about_ssl
(2*) http://www.ibm.com/developerworks/jp/websphere/library/web/web_security/pdf/2_6.pdf

これを,オレオレ証明書を用いた暗号化通信で考えると,セキュリティに関する識者である高木氏は,自分の日記にて以下のように書いています.

>共通鍵暗号による暗号化通信をしています。鍵は一緒に配送します。この暗号は正常に機能しているでしょうか?
>「今の話は共通鍵暗号じゃなくて公開鍵暗号だろ」って? オーケー、では、次の比較に対してどう答えるか。

>1.共通鍵暗号による暗号化通信
>2.公開鍵暗号による暗号化通信で認証なし(認証検証時の警告を無視する使用形態)
>3.公開鍵暗号による暗号化通信で認証あり
(略)
>では、1.と 2. を比べたときはどうか。「3.ほどではないが 1.よりは 2. の方がまし」と言えるだろうか? それは誤りである。
(略)
>公開鍵暗号の公開鍵がいっしょに配送されている暗号化通信では、傍受点で、流れてきた鍵を、別途用意した自作鍵に差し替えて流してしまえば、それで暗号化されて戻ってくる暗号文を復号できる。

※詳細は,高木氏の「PKIよくある勘違い(1)「オレオレ証明書でもSSLは正常に機能する」」をご参照ください.

ここで,疑問になるのが,”傍受点で、流れてきた鍵を、別途用意した自作鍵に差し替えて流してしまえばいい”という点です.

オレオレ証明書では,ルート証明書にたどり着けないため,ブラウザはオレオレ認証局の公開鍵をもっていない.
そのため,サーバ証明書内の公開鍵を取得できない.
だから,サーバ証明書送付時にオレオレ認証局の公開鍵を送付する必要がある.
オレオレ認証局の公開鍵を用いて,サーバ証明書から公開鍵を抜き出す

もしこのとき,オレオレ認証局の公開鍵が自作鍵に置き換えられたとしても,ただ単にサーバ証明書から公開鍵を抜き出すことができず,そこで通信が終了すれば”それで暗号化されて戻ってくる暗号文を復号できる”ことも無いように思えるのですが,いかがでしょうか.
(つまり,高木氏の言う差し替えた自作鍵でサーバ証明書内の公開鍵が取得できるかどうか)

これができなければ,確かに暗号化通信(というか通信そのもの)自体は破綻していますが,高木氏の懸念しているような「重要な情報の流出」にはつながらないように思えます.

乱文になってしまいまして申し訳ありません.
もし,私自身に勘違いや解釈違い等ありましたら,ご指摘いただけると幸いです.
よろしくお願いします.

投稿日時 - 2010-03-19 20:37:58

QNo.5764597

困ってます

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

いわゆる中間者攻撃の問題です。

サーバA と クライアントB が通信しようとしているときに、
中間者Xが入って、サーバA-中間者X-クライアントB となった場合、
中間者Xは、
サーバAに対してはクライアントBのフリを、
クライアントBに対してはサーバAのフリをします。
つまり、
サーバAから中間者Xが受け取ったデータは、サーバAの鍵で復号したあと、X自身の鍵で暗号化してクライアントBに送り、
クライアントBから中間者Xが受け取ったデータは、自身の鍵で復号したあと、サーバAの鍵で暗号化してクライアントBに送るのです。
そうすることで、見かけ上暗号通信できているようでありながら、Xにはすべてが筒抜けになってしまいます。

この場合、クライアントBが実際に受け取るのは、Xが作ったオレオレ証明書です。
Aがちゃんとした証明書を使っていたら、「サーバAからなぜかオレオレ証明書が送られてきた」と、中間者攻撃の可能性に気付くことができるわけですが
サーバAが最初からオレオレ証明書を使っていた場合、送られてきた証明書が、サーバAのものなのか、中間者Xのものなのか、どちらなのかを区別することはできないことになるのです。

投稿日時 - 2010-03-19 23:24:08

お礼

ああ,中間攻撃者の問題だったのですね….
基本的なところを見落としていました.
ありがとうございました.

投稿日時 - 2010-03-20 09:10:10

ANo.2

このQ&Aは役に立ちましたか?

9人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

その「高木氏の日記」の内容が分からないのでハッキリとは言えませんが、何か・・・、まっ、それは置いといて。(^_^//

共通鍵で暗号化されるのはご理解できていると思います。で、その共通鍵の受け渡しに使われるのは、サーバの秘密鍵と公開鍵(だけ)です。
サーバの秘密鍵はサーバの中にあって、絶対に通信などで外部に出ることはありません。しかし、サーバ公開鍵はサーバ証明書の項目の一部ですので、SSL通信でブラウザに渡されます。
SSL通信自体で、ルート証明書やその公開鍵が必要になることはありません。ルート証明書が無くてもSSL通信は行われます。

ブラウザはサーバ証明書の検証を行います。

まず、サーバ証明書の「機関キー識別子」と同じ識別子を持つルート証明書を、信頼するルート証明機関の中から探します。
信頼するルート証明機関の中で見つからなければ、「サーバ証明書が信頼するルート証明機関から発行されていません」旨のエラーメッセージを表示します。
「信頼するルート証明機関」は、IEのツール→インターネットオプション→コンテンツ→証明書→信頼するルート証明機関の順にクリックしてください。

また、サーバ証明書の署名値をルート証明書の公開鍵で復号化し、サーバ証明書の基本領域(サーバの公開鍵が含まれている部分)をハッシュしたものと比較します。
この比較が異なっていれば、「この証明書は破損しているか、改ざんされています」旨のエラーメッセージが表示されます。

ちなみに、「オレオレ認証局」という言い方は「自称 専門家」が使う言葉で、2chでサーバを鯖と呼ぶのと同じです。
専門用語は「プライベート認証局」で、本当の専門家は本当の専門用語を使います。

投稿日時 - 2010-03-20 03:38:58

ANo.1

オレオレ認証局だけでなく、サーバ証明書も自作したものに置き換えればいいでしょう。
元のサーバ証明書の公開鍵を自作鍵に書き換え、その証明書を自作認証局の
秘密鍵で暗号化すれば、自作サーバ証明書のできあがりです。

高木さんの,”傍受点で、流れてきた鍵を、別途用意した自作鍵に差し替えて
流してしまえばいい”というのは、サーバ証明書の公開鍵の差し替えのことを
言っているのだと思います。

投稿日時 - 2010-03-19 23:13:00

あなたにオススメの質問