新しい IBM Developer JP サイトへようこそ!サイトのデザインが一新され、旧 developerWorks のコンテンツも統合されました。 詳細はこちら

Webセキュリティー入門 第1回

みなさんはWebページ上のオンラインショップで買い物をしたことがありますか。

購入する商品名や数量、配送先となる自分の氏名や住所、電話番号などを入力して送信ボタンを押しますね。また、クレジットカード決済を希望するのであれば、カード番号を入力して同じく送信ボタンを押します。そして、何日かすれば商品が送られてきます。

しかし、ここで考えてみて下さい。もし、配送先に記入した自分の氏名や住所といった個人情報が、悪意を持つ第三者によってインターネット上の伝送途中で盗聴されたら、個人情報が流用される恐れがあります。 このように、オンラインショップ・サイト側は送信されるデータを暗号化するなどして、しっかりと個人情報を守る仕組みを構築しておかないといけません。

この連載では、セキュリティーの基礎知識として主にWebアプリケーションに実装すべきセキュリティーの仕組みについて、初心者の方にもわかりやすく学べるように解説していきます。

Webアプリケーション(e-コマース)における危険性

具体的にどのようなリスクが考えられるでしょうか。例えば、オンラインショッピングを考えた場合、主に3つのリスクを考慮しなければいけません。「盗聴」、「改ざん」、「なりすまし」の3つです。ここで簡単に「盗聴」、「改ざん」、「なりすまし」について説明しておきます。

盗聴とは

上記でも挙げましたが、インターネットでは伝送途中のデータがいとも簡単に盗み見されてしまいます。というのも、インターネットに流れる情報は、暗号化しない限りすべて平文で送受信されているためです。つまり、悪意を持つ人が何らかの手段で伝送途中のデータを手にすることが出来れば、簡単にデータの中身を見ることが出来てしまうのです。少しの知識があれば簡単に盗聴出来てしまうことは、意外に知られていません。

alt

改ざんとは

伝送途中のデータの中身を変えてしまう行為のことを言います。例えば、悪意を持つ人間が入手した個人情報を全く異なる内容に変えてしまうといったことがあります。ユーザーに購入予定のない商品が送られてきて、高額な請求が届くなどということが起こります。

alt

なりすましとは

他の人になりすまして、ホームページを開いたり、メールを送信したりすることを言います。例えば、オンラインショッピングで他人になりすまして購買するといったパターンがあります。その他に、偽のe-コマース・サイトを開いて、商品は送らずお金だけくすね取るといった詐欺行為が考えられます。

alt

alt

どう防げばいいの・・・?

オンラインショップには少なくとも3つのリスク(盗聴/改ざん/なりすまし)が考えられます。それでは、どのようにすればこれらのリスクを回避し、信頼されるオンラインショップ・サイトを構築することができるのでしょうか。

それには、1つ1つのリスクに対処していく必要があります。

ここからは、それぞれの対処法について詳しく解説していきます。

盗聴を防ぐ!

まず、盗聴を防ぐ方法としては暗号化が挙げられます。そもそもインターネットを流れるデータが平文で送受信されているため、簡単に中身を見ることが出来るのでした。そこでデータを暗号化してからインターネットに流せば、第三者がそのデータを手に入れても容易にデータの中身を見ることが出来ないのです。暗号を解除しない限りデータを見るのは不可能ということです。盗聴を防ぐには暗号化がキーポイントになります。

共通鍵暗号化方式:

そもそも暗号化とは、元の文書やデータ(平文)を特定の暗号化手法と鍵を使って、第三者からは意味のないデータに変えてしまうことをいいます。逆に、暗号化したデータを元の読むことが出来るデータに変換することを復号化と呼びます。そして、暗号化と復号化を同じ鍵で行う方式を「共通鍵暗号化方式」と呼んでいます。共通鍵暗号化方式を使ってデータ送信するには次のような流れになります。

  1. Aは共通鍵を生成する。
  2. Aは共通鍵を使って平文を暗号文へと暗号化する。
  3. Aは安全な方法で、共通鍵と暗号文を受信者へ送信する。
  4. Bは共通鍵と暗号文を受信する。
  5. Bは共通鍵で暗号文を平文に復号化する。

    alt

古くから使われている共通鍵暗号化方式ですが、大きな問題があります。暗号化も復号化も同じ鍵(共通鍵)を使用するため、鍵の受け渡しにリスクが存在します。もし、暗号文と一緒に鍵(共通鍵)が盗聴された場合は、簡単に暗号文を復号化されてしまいますね。

また、通信相手ごとに別々の鍵(共通鍵)を用意しなくてはいけないため、鍵(共通鍵)の配布や管理が非常に困難になります。この共通鍵暗号化方式のデメリットを解消するために考案された技術として公開鍵暗号化方式が開発されました。

公開鍵暗号化方式:

公開鍵暗号化方式は、暗号化と復号化で全く異なる2つの鍵(公開鍵と秘密鍵)を使用します。

ただし、公開鍵と秘密鍵は1対のキーペアとして生成され、片方の鍵で暗号化したデータはキーペアとなるもう1つの鍵でしか復号化することは出来ません。 公開鍵暗号化方式を使ってA側(ユーザー)からB側(e-コマース・サイト)へデータを送信するには次のような流れになります。

  1. Bは公開鍵と秘密鍵のキーペアを生成する。
  2. Bは公開鍵をインターネットに公開してAは公開鍵を取得する。または、直接送信者(A)に対して公開鍵を送信してもよい。ただし、秘密鍵は自分自身で大切に保管しておく。
  3. Aは公開されている公開鍵を使用して平文を暗号文へと暗号化する。
  4. Aは暗号文をBへ送信する。
  5. Bは暗号文を受信する。
  6. Bは保管している秘密鍵で暗号化されたデータを複合化する。

alt

逆に、公開鍵暗号化方式を使ってB側からA側へデータ送信するには次のような流れになります。これは後述の「電子署名」の際に使用され、暗号文をBの公開鍵で復号化できれば、暗号文が確かにBの秘密鍵で生成されたことを保証することができます。

  1. Bは公開鍵と秘密鍵のキーペアを生成する。
  2. Bは自分の秘密鍵で平文を暗号文へと暗号化する。
  3. Bは暗号文と公開鍵をAへ送信する。
  4. Aは暗号文と公開鍵を受信する。
  5. Aは受信した公開鍵で暗号化されたデータを複合化する。

alt

公開鍵暗号化方式では、共通鍵暗号化方式のデメリットであった鍵の受け渡しを安全に行うことができるようになりました。また、鍵の管理もとてもシンプルですみます。

また、共通鍵暗号化方式にはない公開鍵暗号化方式だけの大きなメリットとして、公開鍵で暗号化した暗号文を秘密鍵で復号化できるのであれば、間違いなく秘密鍵のキーペアとなる公開鍵で暗号化したデータであるということが証明されることがあります。

公開鍵暗号化方式は共通鍵暗号化方式と比較して処理速度が遅いというデメリットがありますが、コンピュータの高性能化とインフラの高速化を考えれば、現在はそれほど問題になることはありません。事実、現在のe-コマース・サイトなどでは公開鍵暗号化方式を利用して暗号化したデータのやり取りが行われています。

共通鍵暗号化方式、公開鍵暗号化方式の仕組みを解説したため、少し難しい話になりましたが、結局のところ、暗号化したデータをやり取りすれば盗聴を防ぐことが出来るというがご理解頂けたと思います。

改ざんを見抜く!

次に、改ざんの対処方法はどうすればいいのでしょうか。盗聴に対処するために暗号化を導入しておけば、暗号化したデータは中身を見ることが出来ないので改ざんも不可能だろう。そうであれば、暗号化だけしっかりしておけば対処できるのでは、と考える人がいるかもしれません。 しかし、暗号化したデータを復号化して元のデータに戻すことが出来る以上、必ず暗号化を解除する仕組みがあるのです。盗聴した人間がこの仕組みを知っていたとしたら、改ざんも容易に出来てしまいます。また、e-コマース・サイトなどで、公開鍵暗号化方式を使用して暗号化したデータを安全に送信したとしても、復号化した後で改ざんされる可能性もないという訳ではありません。そこで、改ざんの有無の証明方法として昔から使われている技術があります。

メッセージ・ダイジェスト:

改ざんの有無の確認として、元データのコピーと送信後の内容を比較すれば改ざんされたかどうかはすぐに分かりますよね。この原理は、ハッシュ関数と呼ばれる計算式を使って数値を出力し、数値同士を比較する仕組みで改ざんを証明します。この仕組みはメッセージ・ダイジェストと呼ばれています。また、ハッシュ関数で計算された数値をダイジェストと呼び、ダイジェストからは元のデータを求めることが出来ない構造になっています。一般的に改ざんを証明する手段として、メッセージ・ダイジェストを利用したダイジェストの比較がキーポイントになります。

メッセージダイジェストによる改ざんの有無の判定の流れは次のようになります。

  1. 送信者はハッシュ関数を使用してデータからダイジェストAを生成する。
  2. 送信者はデータとダイジェストAを送信する。
  3. 受信者はデータとダイジェストAを受信する。
  4. 受信者はデータを取り出し、ハッシュ関数を使用して受信したデータからダイジェストBを生成する。
  5. ダイジェストAとダイジェストBを比較する。ダイジェストAとダイジェストBを比較して、同一であれば改ざんは無く、異なるのであれば改ざんされていることが証明されますね。

alt

なりすましを防御!

なりすましパターン1において、なりすましたユーザーがデータを暗号化して送信しても、データを受信したオンラインショップ側は、それが本人(購買予定者)から送られてきたデータであることを信頼することはできません。そこで、上で説明しました公開鍵暗号化方式とメッセージ・ダイジェストを組み合わせた電子署名(デジタル署名)を使うことで、間違いなく本人(購買予定者)からの送信であるということを証明することができます。

また、なりすましパターン2で挙げた、偽のホームページでユーザーを騙す「なりすまし」を防御する手段として、電子証明書があります。ユーザーの立場に立って考えてみると、そもそもオンラインショップは本当に信頼できるサイト、存在するサイトなのか疑わしいことがあるかもしれません。そこで、受信したデータは本当に信頼できるサイトが送ったもの(存在するオンラインショップ)であるということを第三者機関(認証局)が証明してくれれば、そのオンラインショップ・サイトを信頼出来るはずです。この証明を行うものが電子証明書です。この電子証明書を利用することでWebサーバーのなりすましを防ぐことが出来ます。

なりすましの対策として電子署名と電子証明書がキーポイントになります。

電子署名(デジタル署名):

電子署名(デジタル署名)とは、公開鍵暗号化方式とメッセージ・ダイジェストによる本人確認の内容を証明するもので、ハッシュ関数の計算結果(ダイジェスト)を秘密鍵で暗号化したものになります。受信者がこの電子署名を公開鍵で復号化できるということは、それと対応するキーペアの秘密鍵で暗号化されていることを意味します。つまり、秘密鍵を持っている本人が送信したデータであるということが証明されます。また、同時にハッシュ関数の計算結果(ダイジェスト)の比較が同一であれば、その署名が正しいことを証明し、改ざんされていないことまで保証することができます。

電子署名の流れは次のようになります。

  1. Aはハッシュ関数を使用してデータからダイジェストを生成する。
  2. Aはダイジェストを秘密鍵で暗号化して電子署名を生成する。
  3. Aはデータと電子署名を送信する。
  4. Bはデータと電子署名を受信する。
  5. Bはデータからハッシュ関数を使用してダイジェストを生成する。
  6. Bは電子署名からAの公開鍵で復号化してダイジェストを取り出す。
  7. (5)と(6)で生成したダイジェストを比較する。

    alt

電子証明書:

電子証明書とは、簡単に言うと送信者が確実に存在することを保証してくれるものです。その仕組みは、信頼できる第三者機関(認証局=CA:Certificate Authority)が公開鍵に対して電子署名を行うことにより、公開鍵の所有者の身元を保証しています。

認証局には、米国のベリサイン社などがあります。電子証明書の中身は、認証を依頼した本人の公開鍵、暗号化手法や登録者情報などが記載されています。

電子証明書を取得するには次の流れのようになります。

  1. Aは秘密鍵と公開鍵を生成する。
  2. Aは認証局にAの公開鍵を送信する。
  3. 認証局はAの公開鍵を受信する。
  4. 認証局は公開鍵データベースにAの公開鍵を登録し、認証局の秘密鍵でAの公開鍵を暗号化(署名)する。
  5. 認証局は電子証明書の中に暗号化したAの公開鍵を埋め込み、送信する。
  6. Aは電子証明書を受信する。

alt

あとは、A側(e-コマース・サイト)でWebサーバーに証明書を配置し、ユーザーと通信する際に証明書を提示するように設定します。

ユーザー側では提示された証明書を認証局の公開鍵で復号できれば、証明書が確かに認証局によって署名されたことを確認することができます。また、復号結果に含まれるAの公開鍵と公開鍵データベースに登録されたAの公開鍵が一致すれば、Aの公開鍵が本物であることを確認することができます。

さて、ここまでで盗聴、改ざんとなりすましのリスク回避手段として様々な仕組みを解説してきました。ご理解いただけたでしょうか。

公開鍵暗号化方式やメッセージダイジェストといった仕組みを見ると、難しそうに思えますが、一連の操作はそれに対応した各アプリケーションが自動的に実現してくれます。

とはいえ、仕組みをよく知っておくことは設定に際しても役立つでしょうし、何よりトラブルが発生した際の問題判別に有効な手がかりとなるはずです。 次回は、これらの仕組みを使って、オンラインショッピングで一般的に利用されているSSL通信について解説していきます。