秘密鍵暗号方式

秘密鍵暗号方式は、暗号化と復号に同じ暗号鍵(秘密鍵 or 共有鍵 or 共通鍵
などといいます)を利用する暗号化方式です。秘密鍵暗号方式を利用して安全
にデータを送信するためには、鍵の配送の問題がつねにつきまといます。デー
タの送信者と受信者でどうやって暗号鍵を安全に共有するかを考えなければい
けません。

※銀行のシステムなどでは、定期的に、「人」が暗号鍵をもって各地の支店に
直接配送していったりもしていたそうです。
※共有鍵暗号方式や対称鍵暗号方式などとも呼びます。

公開鍵暗号方式

秘密鍵暗号方式の運用上の一番のネックになる鍵配送の問題を解決した暗号方
式が公開鍵暗号方式です。暗号技術者は、どうやって安全に秘密鍵を配送して
送信者と受信者で共有するかに頭を悩ませていました。

そんなとき、ホイットフィールド・ディッフィー(Whitfield Diffie)とマーテ
ィン・ヘルマン(Martin E. Hellman)によって、公開鍵暗号方式の概念が考え
出されました。公開鍵暗号方式は、鍵の配送の問題を一気に解決する画期的な
暗号技術です。

公開鍵暗号方式は、次の2点が大きなポイントです。

  • 公開鍵と秘密鍵を作成し、暗号化と復号に異なる暗号鍵を利用する(非対称暗号)
  • 公開鍵を公開して、鍵配送の問題をなくしている

これまで暗号化と復号には同じ暗号鍵を使うため、どうやって安全に第三者に
知られずに鍵を配送するのかがネックだったわけです。それをまさしく逆転の
発想です。鍵配送を問題にしないで済むように、「暗号鍵を公開してしまえ!」
って考え方です。
ただ、誰でも彼でも暗号化したデータを復元されてしまっては困るので、暗号
化と復号には異なる暗号鍵を利用するようにしています。一方を公開鍵として
公開し、他方は秘密鍵として他人に知られないように秘密にしておきます。

公開鍵と秘密鍵は、もちろん関連性があります。数学の一方向関数の性質を利
用して、秘密鍵から公開鍵は簡単にわかるけど、公開鍵から秘密鍵は非常に難
しいように決めます。
ディッフィーとヘルマンは、このような公開鍵暗号方式の概念を考え出して、
あとは、具体的に公開鍵と秘密鍵を生成する具体的な一方向関数を見つけ出す
ことに問題が移っていきました。

RSA暗号

なかなかぴったりの一方向関数が見つからなかったのですが、ロナルド・リベ
スト(Ron Rivest)、アディ・シャミア(Adi Shamir)、レオナルド・エーデルマ
ン(Len Adleman)の3人が非常に大きな自然数の素因数分解の難しさに注目して、
公開鍵暗号方式の条件に一致する一方向関数を考えて、具体的な暗号化アルゴ
リズムを開発しました。この暗号化アルゴリズムは3名の頭文字を取って、RSA
暗号と呼ばれています。

RSA暗号は、非常に大きな整数の素因数分解には、膨大な時間がかかることを
元にしています。非常に大きな素数p,qを決めて、この素数から秘密鍵を生成
しします。そして、素数の積の自然数N(=p*q)から公開鍵を生成して公開しま
す。

Nは公開されているので、Nを素因数分解すれば、素数pとqがわかり秘密鍵がわ
かってしまいます。ですが、それには非常に時間がかかってしまいます。素因
数分解は、ぼくの時代は中学1年のときに習ったと記憶しています。素因数分
解するには、対称の数が素数で割りきれるかどうかを順番に確認していくとい
うプロセスが必要です。2で割れるか、3で割れるか、5で割れるか・・・とい
うことを続けていくわけですね。
数百桁もの素数p,qを選んで、その積である自然数Nを素因数分解しようとする
と、現実的な時間では不可能です。

データの送信者は公開されている公開鍵で暗号化を行いデータを送信します。
この暗号化されたデータを現実的な時間内で復号できるのは、秘密鍵を知って
いる受信者のみだけになります。

他にも公開鍵暗号方式のアルゴリズムはいくつか存在していますが、RSA暗号
が典型的な公開鍵暗号方式のアルゴリズムです。

秘密鍵暗号方式と公開鍵暗号方式の組み合わせ

ただし、公開鍵暗号方式は処理の負荷が大きいという欠点があります。特に暗
号データを復号する場合の負荷が非常に大きくなってしまいます。そこで、通
常はデータ通信を行うときすべて公開鍵暗号方式を利用することは行いません。

データ通信を行うに当たって、公開鍵暗号方式によって秘密鍵暗号方式で利用
する秘密鍵を安全に配送します。そして、実際にデータを暗号化するにはその
秘密鍵を利用して、高速な暗号化/復号の処理ができるようにしています。

crypto01.jpg
図 公開鍵暗号方式と秘密鍵暗号方式の組み合わせ

インターネットが普及して、インターネット上でのオンラインショップが当た
り前になっています。インターネットでお買い物をするときは、SSL(Secure Socket Layer)
によって、クレジットカード情報や住所・氏名などの個人情報を送信するとき
に暗号化しています。SSLでの暗号化は、公開鍵暗号方式と秘密鍵暗号方式を
組み合わせて行っています。

SSLでは、次のように公開鍵暗号方式と秘密鍵暗号方式を組み合わせて、安全
な通信を行っています。

まず、公開鍵暗号方式で通信相手のサーバがなりすましされていない正規のサ
ーバであることを確認します。また、その過程でその後のデータ通信で利用す
る秘密鍵をサーバとクライアント間で安全に共有します。
実際にデータを送受信するときは、秘密鍵暗号方式で高速な暗号化通信ができ
るようにしています。