18.8 通信の暗号化と電子署名

暗号化とは,情報を規則に従って変換して,特別な情報がないと元の情報に復元できないようにすることです. 暗号化された情報をもとの情報に戻すことを復号化と呼びます.一般にインターネットをはじめとするネットワーク経由の通信では,途中で悪意のある第三者に情報が盗聴される可能性があります. そこでパスワードなど重要な情報を送るときは,盗聴されても真の情報がばれないように暗号化をする必要があるのです.

暗号の方式は主に共通鍵暗号化方式と公開鍵暗号化方式に分けることができます.これらを順番に説明します.メールの送受信を暗号化する方法がhwb11.8 電子メールの暗号化と電子署名に書いてありますので,興味のある方はこちらを参考に暗号化通信の実験もしてみると良いでしょう.

共通鍵暗号化 (秘密鍵暗号)

データを暗号化,復号化する際に用いる小さなデータを「鍵」といいます.共通鍵暗号化方式 (または秘密鍵暗号化方式) とは,暗号化に用いる鍵と復号化に用いる鍵が同一であるような方式の暗号化のことをいいます.「同じ鍵を使うのは当たり前じゃないの?」と思った人は,この下にある公開鍵暗号の話をあとで読んでください.

共通鍵暗号を使ってデータを暗号化して送る方法を説明します. A さんが B さんにデータを送りたいとしましょう.まず A さんと B さんは,あらかじめ鍵を安全な方法 (たとえば直接会って手渡すなど) で共有しておきます.A さんはその鍵で暗号化して,データを B さんに送ります.B さんは,同じ鍵で復号化して読むことができます.A さんと B さん以外に鍵を持つ人はいないので,データを安全に送ることができます.

暗号化された情報を読むには鍵が必要ですが,暗号化の方式や鍵が単純だと,鍵を持ってない人であっても,適当にいろいろな鍵を試して暗号化された情報を読めてしまうことが起こります.逆に暗号化の方式が十分複雑で解読に十分長い時間,たとえば何百年もかかるということであれば, その暗号化の方式は安全だと言えます.

共通鍵暗号化方式では,暗号文の受け手と送り手は通信の前に同一の鍵を共有している必要があります.そこで,どうやって相手に安全な方法で鍵を渡すかが重要になります. そこで次に,その共通鍵暗号化方式の鍵の受け渡しの方法としても使われる公開鍵暗号化方式について学びましょう.

公開鍵暗号

公開鍵暗号化方式のアイデアは,鍵を 1 つではなく 2 つペアで用意し一方の鍵で暗号化したデータを,他方の鍵のみで復号化できるようにするということものです.つまり 2 つの鍵をそれぞれ鍵 A, 鍵 B と呼ぶとき

  • 鍵 A で暗号化したデータは,鍵 B でのみ復号化できる
  • 鍵 B で暗号化したデータは,鍵 A でのみ復号化できる

という仕組みにするのです.このアイデアは Diffie と Hellman によって 1976 年に提唱されました.

実際に公開鍵暗号化方式でデータを送る手順は次のようになります.A さんが B さんにデータを送りたいとしましょう.

  1. まず B さんは 2 つの鍵のペアを用意します.そしてペアのうちの一方を選び A さんに送ります.このとき B さんが手元に保持する鍵を秘密鍵,A さんに送る鍵を公開鍵といいます.
  2. A さんは B さんからもらった公開鍵を使ってデータを暗号化し,それを B さんに送ります.
  3. B さんは手持ちの秘密鍵を使って A さんからもらったデータを復号化します.

繰り返しになりますが,大事なのは B さんの公開鍵で暗号化されたデータを復号化できるのは B さんの秘密鍵のみだということです.秘密鍵が B さんの手元を離れない限り,暗号化されたデータを読めるのは B さんだけなのです.こうして暗号化された通信が実現します.

先に述べた共通鍵暗号化方式では自分の持つ鍵と相手の持つ鍵が同一であり,信用できる経路で鍵を送らねばなりませんでした.しかし上で見た通り,公開鍵暗号化方式ではそのような心配はありません.この性質は特にインターネットを利用した通信で重宝します.インターネットショッピングなどを思い浮かべれば分かりますが,事前に通信相手に鍵を送り届けておくことが事実上不可能だからです.

こう書くといいことずくめのように見えますが,公開鍵暗号にも欠点はあります.公開鍵暗号化方式は共通鍵暗号化方式に比べて暗号化,復号化に時間がかかります.そこで,共通鍵暗号化方式に使う鍵を送るときだけ公開鍵暗号化方式を使うということも行われています.共通鍵暗号化方式につかう鍵を公開鍵暗号化方式で安全に送り,そのあとは比較的高速な共通鍵暗号化方式で通信するということです.たとえば,暗号化されたリモートログインをするときに使われる SSH も,そのような方式をとっています.

電子証明

電子署名とは,インターネット上で通信の相手が本物であることを証明するための手法です.公開鍵暗号方式を応用することで,電子署名のしくみを実現することができます.

たとえば B さんが A さんにメールを送り,その際自分が本物であることを証明したいと思ったとします.それには次のようにします.

  1. B さんは鍵のペアを用意し,公開鍵を A さんに送っておきます.
  2. B さんはメールの最後に,自分の秘密鍵で暗号化したメッセージを書いておきます.
  3. A さんはメールを受信してから,メールに書かれたメッセージを B さんの公開鍵で復号化します.

暗号化通信の時とは逆に,暗号化に秘密鍵を,復号化に公開鍵を用いるのです.B さんの秘密鍵で暗号化されたデータを復号化できるのは B さんの公開鍵のみですから,今度は復号化できるという事実が「データの送り主は B さん以外にあり得ない」ということを保証してくれるのです.