19.8.2 公開鍵暗号化方式

公開鍵暗号化方式は,公開鍵という公開してよい鍵と,秘密鍵という自分だけが保持する2種類の鍵の対を用いた暗号化方式です.

公開鍵は,暗号化するときに使われ,秘密鍵を使って復号化されます.公開鍵では,暗号化は出来ても,復号化ができないというのが重要です.だからこそ,鍵を公開しても大丈夫なのです.公開鍵から秘密鍵を推測することは非常に困難なように出来ています.

BさんからAさんに情報を送ることを考えましょう.まず,Aさんが,秘密鍵と公開鍵の対を生成します.そして,公開鍵のほうはBさんなど,他の人が見られるように公開します.秘密鍵のほうは,誰にも(たとえば,データをやりとりする相手であるBさんにも)見られないように,厳重に保管します.Bさんが,Aさんだけが読めるデータを送信したいときは,Bさんは,公開されているAさんの公開鍵で暗号化し,その暗号化されたデータをAさんに送ります.Aさんは自分の秘密鍵で復号化します.そのデータを復号化できるのは,Aさんの秘密鍵を持っているAさんのみとなります.暗号化したBさん自身ですら,復号化することはできません.

前項で学んだ共通鍵暗号化方式では自分の持つ鍵と相手の持つ鍵が同一であり,信用できる経路で鍵を送らねばなりませんが,公開鍵暗号化方式ではそのような心配はありません.公開鍵と秘密鍵が対になって働く方式ですので,秘密鍵さえ自分のところで厳重に保持していれば何の問題も起きないのです.

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

公開鍵暗号化方式は,公開鍵から秘密鍵を推測するのが困難であるようにしないといけません.たとえば, 大きな素数同士のかけ算は簡単にできるけれども,その逆に,大きな素数の積が与えられたときに,素因数分解して,もとの2つの素数に分解するのは難しい,などという事実などを使って,公開鍵暗号化方式を作ることができます.