共通鍵暗号と公開鍵暗号の違いを図解で説明 〜暗号化通信の仕組み〜
「共通鍵暗号」と「公開鍵暗号」の違いを説明できますか?
どちらも暗号化の方式ですが、鍵の使い方が大きく違います。
Webサイトの通信でも、この2つは使い分けられています。
2つの方式の違いと暗号化通信の仕組みについて、図を使って説明していきます。

暗号化とは?
暗号化は、データを第三者が読めない形に変換することです。
変換する前のデータを「平文」、変換した後のデータを「暗号文」といいます。
暗号文を元のデータに戻すことを「復号」といいます。
暗号化と復号には「鍵」というデータを使います。
この鍵の使い方によって、共通鍵暗号と公開鍵暗号に分かれます。
共通鍵暗号とは?
共通鍵暗号は、暗号化と復号に同じ鍵を使う方式です。
流れは次のようになります。
① 送信者が、共通鍵で平文を暗号化する
② 送信者が、暗号文を送る
③ 受信者が、同じ共通鍵で復号する

処理が速いので、大きなデータの暗号化に向いています。
代表的な方式は AESです。
ただし、弱点があります。
送信者と受信者が同じ鍵を持つためには、どこかで鍵を受け渡さなければなりません。
途中で鍵を盗まれると、暗号文を読まれてしまいます。
この問題を「鍵配送問題」といいます。
公開鍵暗号とは?
公開鍵暗号は、公開鍵と秘密鍵のペアを使う方式です。
公開鍵で暗号化したデータは、対になる秘密鍵でしか復号できません。
流れは次のようになります。
① 受信者が、公開鍵と秘密鍵のペアを作る
② 受信者が、公開鍵を送信者に渡す
③ 送信者が、受け取った公開鍵で平文を暗号化する
④ 送信者が、暗号文を送る
⑤ 受信者が、自分の秘密鍵で復号する

暗号化に使うのは、受信者の公開鍵です。
公開鍵は誰に見られても問題ありません。
秘密鍵は受信者だけが持っていて、ネットワークに流しません。
そのため、共通鍵暗号の鍵配送問題を解決できます。
ただし、受け取った公開鍵が本当に相手のものかは確認が必要です。Webサイトでは、サーバ証明書でこれを確認しています。
代表的な方式は RSAと 楕円曲線暗号です。
ただし、共通鍵暗号に比べると処理に時間がかかります。
必要な鍵の数の違い
利用者が増えた時の鍵の数も、大きく違います。
共通鍵暗号では、通信する相手ごとに別の鍵が必要です。
同じ鍵を全員で使うと、他の人の通信も読めてしまうからです。
n人の場合、鍵の数は n(n-1)/2個になります。
公開鍵暗号では、1人が公開鍵と秘密鍵のペアを持てば済みます。
n人の場合、鍵の数は 2n個になります。

4人なら共通鍵暗号のほうが少なく、5人で同じ数になります。
それより人数が増えると、共通鍵暗号の鍵の数は一気に増えていきます。
情報処理技術者試験でも鍵の数を求める問題が出ることがあるので、式を覚えておきましょう。
実際の通信は2つを組み合わせている
共通鍵暗号は速いですが、鍵の受け渡しが問題でした。
公開鍵暗号は鍵の受け渡しが楽ですが、処理に時間がかかります。
そこで、2つを組み合わせてお互いの弱点を補います。
この方式を「ハイブリッド暗号」といいます。
① 送信者が、共通鍵を作る
② 送信者が、受信者の公開鍵で共通鍵を暗号化して送る
③ 受信者が、自分の秘密鍵で復号して共通鍵を取り出す
④ 両者が、同じ共通鍵でデータを暗号化して通信する

公開鍵暗号は共通鍵を渡す時だけ使い、データの暗号化は速い共通鍵暗号に任せています。
Webサイトのhttps通信で使われるSSL/TLSも、この考え方が基本です。
ただし、現在主流のTLS 1.3では、共通鍵を暗号化して送るのではなく、鍵交換という方法で共通鍵を作ります。
詳しくはSSL/TLS通信の仕組みを図解で説明の記事で説明しています。
デジタル署名との違いに注意
公開鍵暗号の鍵のペアは、デジタル署名にも使われています。
暗号化では受信者の公開鍵を使いますが、デジタル署名では送信者の秘密鍵を使います。
使う鍵が逆になるので、混同しないようにしましょう。
詳しくはデジタル署名の仕組みを図解で説明の記事で説明しています。
まとめ
今回は共通鍵暗号と公開鍵暗号の違いについて説明しました。
共通鍵暗号は、同じ鍵を使う速い方式ですが、鍵の受け渡しに注意が必要です。
公開鍵暗号は、鍵のペアを使う方式で、鍵の受け渡しは楽ですが処理に時間がかかります。
実際の通信では、この2つを組み合わせて使っています。
「何を守るために、誰の鍵を使うのか」を考えると整理しやすくなると思います。


