暗号の基礎〜共通鍵暗号と公開鍵暗号

現在、インターネットを使って買い物をする人や振込みなどを行う人が非常に 増えています。その際に自分のクレジットカードの番号や暗証番号等を入力して 不安になった人が多いのではないでしょうか?インターネットは不特定多数の人 が利用するため、そのまま重要情報を流すと外部にデータが流出することが 懸念されます。

ではどのようにすればデータを外部に漏れないようにすることができるでしょうか? その1つの方法が「暗号」です。データを暗号化すれば他の人がデータを盗み聞きしても (情報用語ではこのような行為を「盗聴」と呼びます。情報の内容自体はわかりま せん。


共通鍵暗号とは?
さて、データを暗号化するにはどうすれば良いでしょうか?簡単な例を考えて 見ましょう。いま、「violin」という文字を暗号化することを考えてみましょう。 暗号する方法として、アルファベット文字の位置をずらすことを考えます。 例えば、一文字ずらすと

abcdefg hijklmn opqrstu vwxyz(通常の文)

bcdefgh ijklmno pqrstuv wxyza (暗号化された文)

このルールに基づくと「violin」は「wjpmjo」と変換されます。 この文を解読するには「アルファベットをずらす」という暗号化方法と 「一文字ずらす」という条件がわからなければいけません。この条件 を情報の世界では「暗号鍵」と呼びます。暗号文を通常の文になおすことを 「復号」と呼びます。すなわち「暗号」の反対は「復号」です。 また通常の文を「平文」と呼びます。

「平文」⇒(暗号化)⇒「暗号文」⇒(復号化)⇒「平文」

では通信の世界を考えてみましょう。今、AさんとBさんがいます。 AさんがBさんに「wjpmjo」をいう文を渡しました。Bさんは 既に暗号化の方法を知っています。Bさんはどのようにすれば、復号化 すなわち「violin」になおすことができるでしょうか?それはもちろん 「一文字ずらす」という鍵があればできますよね。このように 暗号化も復号化も同じ鍵があればできることを共通鍵暗号と 呼びます。

実世界で考えて見ましょう。部屋のドアをロックするときも開けるときも 同じ鍵を使いますよね?これが共通鍵暗号の方法です。

さて共通鍵暗号では困った事があります。「一文字ずらす」という鍵を AさんからBさんに盗聴されないように渡す必要があります。仮に第三者が 「一文字ずらす」という鍵を 知っていれば、暗号化された「wjpmjo」を知ってれば「violin」と 解読できてしまいます。このことを現実世界で考えて見ましょう。 例えば、AさんからBさんにAさんの部屋の鍵を渡す時にCさんにその鍵預かっていれば、 Cさんが合鍵を作ってしまい、いつでもAさんの部屋を開けることが可能ですよね。 このように、共通鍵暗号方式は共通鍵をお互いに秘密裏に共有することが大切なの です。 共通鍵の共有は20世紀前半の難問として研究がされていましたが、後述の 公開鍵暗号方式で解決されました。

共通鍵方法は次のよう特徴があります。

暗号強度とは、暗号文から鍵を用いずに平文を推測する困難度を表わします。 暗号強度が高い方が解読する事が難しいことを意味します。 もう少し暗号の強度の話をします。先ほどのアルファベットの シーザー暗号では、最大26通り試すと解読されてしまいます。 これは暗号鍵が26種類しかないことを意味します。 もし今のシーザー暗号を中国語に応用したらどうでしょう?中国語 は数万文字ありますから、文字のずらし方が非常に多く、その結果多くの試行を しなければ解読できません。すなわち暗号鍵が数万種類となり、先ほどよりも 暗号鍵の長さが大きくなりましたね? このように暗号強度は暗号鍵の長さや暗号方法によって変わります。一般的に 共通鍵暗号で使われるDESは非常に暗号強度が高いです。また現在では より強度が高い3DESも使われます。ちなみにDESでは56bitの鍵が使われます。 1bitで表わされる数は1か0しかありません。そのため56bitの暗号鍵において、 暗号鍵なしに暗号文を解読するためには最悪の場合2の56乗の数だけ試す 必要があります。このような総当り的に暗号文を解く方法を 「ブルートフォースアタック」と呼ぶ事があります。


公開鍵暗号とは?

では次に公開鍵暗号を説明します。

先ほどの共通鍵暗号では、暗号するにも復号するにも同じ鍵を使いました。 しかし、公開鍵暗号では暗号鍵と復号鍵が異なります。公開鍵は数学のトリック を使っているために残念ながら実生活と対応させる事は難しいのでイメージ がわかないかもしれませんね。(私も最初は納得できませんでした。) まずは暗号鍵と復号鍵が違うことだけ理解して下さい。どうしても公開鍵暗号 が納得できない場合には、RSA暗号の原理を勉強することをお奨めします。

平文は暗号鍵によって暗号文となり、暗号文は復号鍵により平文になります。

平文⇒(暗号鍵による暗号化)⇒暗号文⇒(復号鍵による復号化)⇒平文

公開鍵は非常に便利な事があります。それは暗号鍵から復号鍵を推測する事 が非常に難しいのです。では実際にどうやってAさんとBさんが暗号通信を 行うか、考えてみましょう。

まず、Aさんは暗号鍵と復号鍵を作成します。今、暗号鍵を「公開鍵」、 復号鍵を「秘密鍵」と呼ぶ事にします。公開鍵は誰にでも教えてもOKです。 逆に秘密鍵はAさん以外に絶対教えてはいけません。先ほどの説明の通り、 公開鍵から秘密鍵を推測する事はできません。ではAさんとBさんの暗号通信方法 を書いてみます。

(1)AさんはBさんに公開鍵を教える。この際秘密鍵は誰にも教えないこと。
(2)Bさんは公開鍵を使ってAさんに伝える情報を暗号化する。
(3)Bさんは公開鍵で暗号化した情報をAさんに教える
(4)Aさんは秘密鍵でBさんの暗号情報を復号し、平文を読む。

ここで、(3)の際にBさんの暗号化した情報を第三者が盗聴した場合はどうでしょう? BさんはAさんの公開鍵で暗号化したので、第三者はAさんの秘密鍵がない限りは 解読できません。よって、盗聴しても全く第三者は理解できないのです。

このように、公開鍵暗号は共通鍵と違って鍵を安全にBさんに教える事が できます。公開鍵暗号は次のような 特徴があります。

鍵長は先ほどの共通鍵では56bitが使われましたが、公開鍵の方法の一つ RSAで安全に暗号通信を行うには 128bit以上の鍵長が求められます。

最近では楕円曲線関数公開鍵暗号方式が採用されるようになってきました。この方法は 鍵長を小さくしても安全に暗号化可能で、そのために高速に暗号化・復号化 することができます。ICカードなどによく使われるようになりました。

余談ですが、RSAは「大きな数の素因数分解を行う事は非常に困難」である事を 利用して暗号理論を作っています。しかし、誰もその事を証明した人はいません。 ホットな話題として量子コンピューターを用いると素因数分解が非常に 高速で行える事がわかってきました。そのため、世界中で量子コンピューターを 作る試みが盛んに行われています。もっとも量子コンピューターを実現するには まだ何10年もかかると言われていますが....。


ハイブリッド暗号の仕組み
さて、共通鍵暗号にしても公開鍵暗号にしても短所がありました。どうすれば 「高速」に暗号・復号化し、安全に「鍵」を配送することができるでしょうか? それには共通鍵暗号と公開鍵暗号をうまく組み合わせることが必要です。

仕組みは簡単です。暗号・復号自体は共通鍵で行い、共通鍵の暗号鍵を 公開鍵暗号方式を使って安全に配送するのです。このやり方を書いてみましょう。 今、AさんとBさんがいるとします。BさんがAさんに暗号で情報を渡そうとする ケースを説明しましょう。

(1)Aさんは公開鍵と秘密鍵を作成する。
(2)AさんはBさんに秘密鍵を渡す。
(3)Bさんは共通鍵Bを作成し、文書Bを暗号化する。(これを暗号文書とする)
(4)Bさんは共通鍵Bを公開鍵によって暗号化する。(これを暗号鍵とする)
(5)Bさんは暗号文書、暗号鍵をAさんに渡す。
(6)Aさんは暗号鍵を秘密鍵で復号化して共通鍵Bを取得する。
(7)Aさんは共通鍵Bで暗号文書を復号し文書Bを取得する。

ちょっとややこしいですが、一回図に書いてみればすっきりします。 公開鍵暗号で暗号したものは鍵だけなので、このプロトコルは非常に 高速で且つ安全に行えることがわかります。 ハイブリッド暗号はインターネットサイトで安全に買い物等を 行うことができるSSLでも採用されています。SSLを使用していると、ブラウザの 右下に錠前の絵が現れるので、是非チェックしてみてください。


NEXT