「SSL ご安心ください 鍵マーク」などでGoogle検索すると、
フレームを使用しているため表示URLにsが表示されなかったり、右下に鍵マークや「セキュリティ」の鍵が表示されない場合がございますが、SSLを利用しておりますので、ご安心ください。
といった説明が大量に見つかる。これはどういうことか。HTMLのFRAMESETを使って作られたWebサイト(縦横に分割された複数の「サブフレーム」から構成される)はよくあるが、そのサブフレーム中のリンクをたどって、個人情報を送信する画面にたどり着いたとする。個人情報入力のHTMLがきちんと「https://」のURLとなるよう作られていても、メインのフレーム(外枠)のURLが「http://」のままだと、ブラウザの右下の錠前アイコンが施錠されてない表示となる。このことについて述べられたものだ。ブラウザは「暗号がかかっていない」と表示しているが、実際にはSSLを使って送信されるので「ご安心ください」というわけだ。
これは本当に安心してよいのか。安心してはいけない。それはなぜか。SSLを使う(https:// のページを使う)目的は何かというと、盗聴の防止と、改竄の防止と、なりすましの防止だ。盗聴防止のことはよく知られているが、改竄防止はあまり知られていないらしい。改竄といっても、サーバに侵入してコンテンツを書き換えるいわゆる「ウェブサイト改竄」のことではなく、サーバとブラウザ間の通信路上でのパケットの改竄のことだ。外枠のURLが「http://」ならば、それは通信路上で改竄されている可能性がある。外枠のHTML中には、サブフレームへリンクする記述として「https://」というURLがどこかに書かれているはずだが、これが通信路上で、「https」の5バイトが「 http」(スペース+「http」)に差し替えられたらどうなるか。個人情報を入力するHTMLに到達したときに、本来SSLが使用されるはずのところが、使用されない状態にすり替えられることになる。そのまま個人情報を入力して送信すれば、パケット盗聴されてその情報は盗まれる。
こうした事態は簡単に防止できる。サイト側で、外枠のURLが「https://」となるように、Webアプリケーションを修正すればいい。これは簡単に直せるセキュリティホールなのだ。にもかかわらず、直すことをせずに、「ご安心ください」という説明によって、消費者をただただ安心させようとしている。
先日、これに似た話を聞いた。Mozilla dot Party in Japan 4.0の後の宴会の席で、米Netscape/AOLの桃井さんとお話をした。桃井さんとは、Netscapeがまだ「Mosaic Netscape」と名乗っていたころからの旧知の仲なのだが、それはともかく、彼は最近、Netscape 7を公式ブラウザとして認めてもらうよう、日本の金融機関に働きかけてまわったそうだ。何かの問題点が障害になっているならば指摘してもらおうと、話を聞きに行ったそうだ。そのとき、ある銀行はこう注文したという*1。
暗号化ページ中に暗号化されないコンテンツが混在していると、Netscape 7は、「セキュリティに関する警告」の画面を出す。これがお客さまを大変心配させるので、出ないようにして欲しい。(高木による要約)
その警告画面のメッセージはこういう内容だ。
暗号化されていない情報を含む暗号化ページを要求しました。このページに表示される情報またはこのページで入力した情報は、第三者によって簡単に読み取られる可能性があります。
桃井さんは、ブラウザを供給する側の立場として、安全でないものを安全であるかのように振舞う変更は断固できないと踏ん張ったそうだ。私はその話を聞いて、あらためて銀行のアホっぷりにあきれ返った。
ようするに、銀行としては、実際に安全であるかどうかはどうでもよく、お客さまが安全と思ってくれさえすればよいということになる。これは、「ご安心ください」という説明でやみくもに消費者を安心させようとする、冒頭の検索結果に出てくる事業者達と同じ発想によるものだろう。技術者達は、そうした考えが誤りであることに気付いているはずだ。しかし、お客さま対応の責任者は、技術者の言い分なんぞ聞くまでもないことだと決めてかかっているのかもしれない。
こうした状況は今後も続くだろうと思う。上の話は、簡単な技術的解決策があるからまだよい。Webアプリケーションのセキュリティホールを修正すればよい。しかし、すでに普及していて、今からでは解決はできないものについてはどうだろうか。「説明しても、お客さまは正しく理解できないのだから、無用な心配をかけないほうがいい」と、そう考える事業者は多いだろう。
*1 この話は、「ネタに使っていいですか?」とその場で確認して許可を得たものだ。どこの銀行なのかはあえて聞かなかったので知らない。