閉める鍵と開ける鍵は同じである。
「鍵」といえば、ほとんどの方がこの方式を思い浮かべるのではないのでしょうか。
例えば家の鍵。家の鍵を閉める・開けるという行為は同じ鍵を使います。
このように、「閉める鍵=(暗号)」と「開ける鍵=(復号)」は共通のものを使用するため、「共通鍵暗号」とか「対称暗号」と呼ばれます。
この「鍵」方式では、家族が全員共通の鍵をもつ必要があります。
もちろん、家の鍵はむやみに他人に渡すものではありません。
また、家族が増えれば同じ鍵を作らなければなりません。更に、引越しなどしたとき次の入居者は錠前毎取り替える必要があります。(大抵の場合、大家さんがしてくれますが...。)
2〜3人であれば問題ないのですが、仮に100人も居たとしたらどうでしょう。鍵を作り変えるのにも大変な作業になります。このように共通鍵暗号では、「鍵の管理が非常に大変」になるのです。
それと共通鍵暗号方式では、もう一つの重要な問題があります。
例えば、秘密の文書を「暗号化」するのも、暗号化された文書を「復号」するのも共通の鍵を使う訳ですから、先ほどの例で言うと「太郎」と「花子」は事前に同じ鍵を持っていなければなりません。
直接会って渡すことができればいいのですが、そうでなければ「鍵」を送る必要があります。その場合、大切な鍵が盗まれてしまうかもしれませんし、コピーされる危険性もあります。
これを共通鍵の「鍵配送問題」といいます。
閉める鍵と開ける鍵は違ってもかまわない。
一見矛盾しているように思いますが、分かりやすいイメージでいうと南京錠がいいでしょうか。
南京錠の鍵を閉める行為は、フックを穴にあわせて押すだけです。一方、鍵を開ける場合は専用の(対になる)鍵を用います。
具体的に例を挙げてみますと、花子は「私に手紙を送ってくれる時は、箱に入れてこの南京錠で鍵をかけてね。」と事前に太郎へ南京錠のみ渡しておきます。
こうして送られたものは、花子が持っている専用の鍵のみでしか開けられませんね。
太郎は特に花子の開けるための鍵を持つ必要はない訳です。
同じように太郎専用の南京錠を花子に渡しておけば、花子が太郎に手紙を送る時は、太郎の南京錠を使って鍵をかければいいのです。そしてお互い、開ける鍵は知らなくていいのです。
秘密の通信を行うための流れをまとめますと...
1 | 送信する側が必要なのは相手の南京錠のみ |
2 | 受信する側が必要なのはそれを開ける鍵のみ |
3 | 盗まれて困るのは開ける鍵のみ |
4 | 南京錠そのものは盗まれても構わない |
南京錠は、盗聴者に知れても問題ありません。むしろ積極的公開すべきでしょう、なぜならそれを使ってもらうことで自分へ送られてくるものは第三者に開けることができなくなるからです。
守らなければならないのは、専用の鍵のみで済みます。
公開鍵暗号で使う、この2つの鍵を「公開鍵」(錠に相当)と「秘密鍵」(鍵に相当)といいます。
では言い換えます...
1 | 送信する側は相手の公開鍵で暗号化する |
2 | 受信する側は自分の秘密鍵で復号する |
3 | 盗まれて困るのは秘密鍵のみ |
4 | 公開鍵は盗まれても構わない(むしろ積極的に公開) |
イメージを作ってもらうために、ごく簡単に説明しましたが、公開鍵暗号の特性として、秘密鍵で暗号化することもできます。秘密鍵で暗号化したものは、ペアの公開鍵でしか復号化できません。
まとめますと...
ペアとなる秘密鍵と公開鍵のどちらか一方の鍵で暗号化したものは、そのペアとなるもう一方の鍵でのみ復号できる。
という特性があります。
「そんなバカな!」「なぜなんだ??」と思われる方は6ページの【補足】をご覧下さい。
この公開鍵暗号の考え方は1976年に(ホイットフィールド・ディフィーとマーティン・ヘルマンによって)発見されたのですが、暗号史上の大発見と言われています。
また、現在においてもこの公開鍵暗号方式は最も信頼性の高い暗号化方式であり、さまざまな場面で使われています。もちろん社会保険労務士の電子申請でも利用されています。
この公開鍵暗号化方式を使えば、共通鍵暗号で問題があった「鍵配送問題」は解決します。
但し、問題が1つ残ります。それは、太郎さんが「花子さんのものだと思って入手した」公開鍵が「本当に花子さんのものである」という証拠を検証しなければなりません。
それを解決するのが公開鍵の証明書になる訳です。