今回はデータを安全に送受信するための暗号化技術である共通鍵暗号方式と公開鍵暗号方式を取り上げます。
暗号化と復号に同じ鍵を用いる暗号化方式
暗号化と復号に異なる鍵を用いる暗号化方式で、一方の鍵は公開し、もう一方の鍵は秘密に管理する。
今回もそもそも暗号化とはという基礎から始めて、共通鍵暗号方式と公開鍵暗号方式それぞれの特徴までしっかり理解していただこうと思います!!
暗号化とは?
暗号化とは一言で言えば、元のデータをある手順に従って変換することです。
元のデータが普通の日本語の文であったとしても、暗号化によって、意味が分からない形に変換してしまえば、誰かに覗かれても安全ですね。
ただし、変換したデータは、再び元のデータに戻せるような仕組みになっていなければいけません。例えば、AさんがBさんにデータを送るような場合に、安全性を保つためにAさんが暗号化を施したとすれば、Bさん側はそのままではデータの中身を理解することができません。Bさんは何らかの手段で暗号化されたデータを元のデータに戻さなければなりません。
暗号化されたデータを元に戻す行為を復号と言い、暗号化と復号は必ずセットで考える必要があります。
冒頭で、暗号化はある手順によって行われると書きましたが、この手順を決めるのが暗号化アルゴリズムと暗号鍵です。
では、暗号化アルゴリズムと暗号鍵のそれぞれの役割は何でしょうか?
暗号化アルゴリズムは暗号化の基本的な手順を定めています。
どのような手順で暗号化が進むのかは暗号化アルゴリズムを見れば分かります。
このように書くと、暗号化アルゴリズムだけあればよいように思ってしまうかもしれませんが、暗号化はそれでは十分とは言えません。
なぜなら、暗号化アルゴリズム自体は世の中に知られてしまうもの(隠し通すことができない)なので、単純にそれだけで暗号化を行なってしまうと安全とは言えないからです。なので、暗号化の基本的な手順は暗号化アルゴリズムに従いつつも、個々のデータのやり取りの場合で手順が若干異なるように、暗号鍵を使います。
少し抽象的で分かりづらいかもしれないので、ごくごく簡単な例を出してみます。
例えば、英語の文章を暗号化するために「原文のアルファベットを別のアルファベットで置き換える」というルールを決めたとします。これは大枠の手順なので、言わば暗号化アルゴリズムです。では、実際にどうやってアルファベットを置き換えるのかは、暗号鍵で決めます。暗号鍵によって、AはBに置き換わるのか、それともCに置き換わるのかが決まるイメージです。これは暗号鍵を作成するたびに異なるので、暗号化アルゴリズムを知っているだけでは、復号することができません。
これが暗号化アルゴリズムと暗号鍵の役割分担です。
共通鍵暗号方式
共通鍵暗号方式は暗号化と復号に同じ鍵を用いる方式です。
AさんがBさんにデータを送りたいとなった場合は、まずAさんからBさんに鍵を送ります。その後で実際にデータのやりとりを始めることになります。
共通鍵暗号方式でよく用いられる暗号化アルゴリズムはRSAと呼ばれます。
一昔前に使われていたDESと呼ばれるアルゴリズムは鍵長(暗号鍵のデータの大きさ)が56bitしかなく、コンピュータの計算処理能力の向上に伴って、脆弱性が指摘されるようになりました。
その後継として採用されたのがRSAです。RSAは様々な暗号化処理を複数回にわたって繰り返すアルゴリズムで、鍵長も128,192,256bitの3種類があります。
後々で公開鍵暗号方式との比較がしやすいように共通鍵暗号方式のメリット・デメリットを以下にまとめておきます。
メリット
- 暗号化や複合の処理が高速
デメリット
- データのやり取りをする相手の数だけ鍵が必要
- 鍵を安全に渡すのが難しい
デメリットとしては、まずデータのやり取りの相手の数だけ鍵が必要ということです。例えば、10人の異なる相手とやり取りするには、10個の鍵を生成しなければならないので、鍵の管理が大変です。
また、相手に対して安全に鍵を送らなければならないというのも課題です。鍵が第三者に盗まれると、暗号化したデータを復号されてしまいます。そのため、鍵を安全に相手に送る必要があるので、その時点で暗号化通信が必要となります。
公開鍵暗号方式
公開鍵暗号方式は暗号化と復号に異なる鍵を用いる方式です。
異なる鍵を用いるということで、2種類の鍵が存在するわけですが、それぞれの役割は次のようになっています。
公開鍵:データを暗号化する
秘密鍵:暗号化されたデータを復号する
公開鍵はデータを暗号化する機能しかないので、公開鍵は誰が持っていても問題はありません。まさに名前の通り、一般に公開される鍵ということです。一方で、復号に使える秘密鍵は他人に知られないようにする必要があります。
公開鍵暗号方式は共通鍵暗号方式に比べて、やりとりの流れが少し複雑なので、以下のように流れを図示してみました。AさんからBさんにデータを送るケースです。
繰り返しになりますが、公開鍵は一般に知られてもよいので、受信者から送信者に向けて公開鍵を渡します。送信者はその公開鍵によってデータを暗号化して送信し、受信者は秘密鍵によってデータを復号します。
ちなみに、公開鍵暗号方式で用いられる代表的なアルゴリズムはRSAと呼ばれ、2種類の鍵(暗号鍵と復号鍵)があることが前提になっています。ここでは詳細には触れませんが、RSAはデジタル署名でも利用されているアルゴリズムです。
以下に、公開鍵暗号方式のメリット・デメリットをまとめます。
メリット
- 鍵(公開鍵)を渡すのが容易
- 公開鍵と秘密鍵の組合せは1つでよい
デメリット
- 共通鍵暗号方式に比べて処理が重い
ご覧になって分かるように、メリット・デメリットは共通鍵暗号方式の逆になっています。
公開鍵暗号方式と共通鍵暗号方式の違いをご理解いただけたでしょうか?
今回は以上となります。