公開鍵暗号
先月は、暗号の共通鍵をどうしたら安全に更新できるかという課題を書いた。
AさんとBさんが定期的にリアルの世界で面会する機会があるならば、その都度封筒に入れて紙に印刷された共通鍵の数列を渡せばすむのだろうが、暗号文を交換する者同士が距離の離れたところに存在する場合、インターネットや無線通信などでも安全に共通鍵の更新を行えるようにしなければならない。そこで発明されたのが公開鍵暗号という別のジャンルに属する暗号方式である。公開鍵暗号とは、ひと言で言えば、「暗号文を封筒に入れて中身を推定できないようにして、インターネットや無線通信で離れたところに送る」暗号方式である。
たとえば、新しい共通鍵をBさんと共有したいAさんがいたとする。Aさんはまず自分が持っている新しい共通鍵をさらに公開鍵暗号(たとえばRSAとかECCとかいう)という特殊なアルゴリズム(数式)に乗じて、別の数列に変換する。その別の数列はインターネットや無線通信上で第三者にみられても、元の数列(共通鍵)に復号できない特殊な数列である。ところがBさんがこの特殊な数列を受け取るとなぜか自分だけは(まるで封筒を開くように)復号することができて、元の共通鍵を取り出すことができるのである。もちろん公開鍵暗号はただの封筒ではない。Aさんが共通鍵を公開鍵暗号に変換するときには自分のパスワードを入力する。Bさんが公開鍵暗号を復号するときには自分のパスワードを入力する。だが優れものなのは、AさんのパスワードをBさんは知らない。BさんのパスワードをAさんは知らない。つまり公開鍵暗号方式とは「封筒の開け方は自分しか知らない」のにAさんとBさんとの間で暗号通信のやりとりができる方式だということなのである。
世間で公開鍵暗号がどのように使われているかというと、多くの場合は共通鍵の更新と共有のために使われている。が、用途はそればかりではなく、公開鍵暗号そのものを用いて暗号文のやりとりをすることもできる。但し、公開鍵暗号は共通鍵を用いた暗号よりも複雑なアルゴリズムを用いるので、計算量も多く、コンピュータにかかる負荷が大きい。このことがIoTの世界で組込機器を使用する場合には、大きな問題となる。先に述べた基本は共通鍵暗号を用いながら、共通鍵の更新に公開鍵暗号を用いるという、共通鍵と公開鍵の併用方式が多く用いられているのは、じつはこのIoTと組込機器の分野なのである。
本稿の最後に、共通鍵、公開鍵の暗号方式として具体的にはどのようなものがあるかについて、少しだけ紹介しよう。共通鍵暗号では、DES(Data Encryption Standard)が1976年11月に米国政府規格として標準化され、改良されながら長く使われてきた。しかし、さすがに長い時間を経て学会などでこの暗号を破る実績が多く出てきたので、米国政府は新たな公募を行い、2001年からAES(Advanced Encryption Standard)が規格化され、実市場においても次第にDESと交代するようになっている。現在では、AESの共通鍵256ビットを用いた方式であれば当分の間はほぼ安全に運用できるとされている。公開鍵暗号では、民間のRSA社が開発したRSA方式と、米国政府が規格化したECC(楕円曲線暗号)方式が実市場で併用されている。
2025年8月29日