【セキュリティ】公開鍵暗号方式・共通鍵暗号方式
はじめに
暗号技術は、通信やデータのセキュリティを守るうえで欠かせない存在です。
私たちがインターネットにアクセスする際に、HTTPリクエストがサーバーに送られます。
しかし、この中身が第三者に見られてしまうと、個人情報を流出することになり、取り返しのつかない被害を受ける可能性があります。そうしたことがないよう、やり取りするメッセージを暗号化する技術が使われています。中でも代表的な暗号方式として、公開鍵暗号方式と共通鍵暗号方式があります。
本記事では、この2つの違いと仕組み、使い分けのポイントをわかりやすくまとめていきます。
暗号
暗号とは、他人に内容を知られないようにするための変換技術です。
元の情報を平文と言います。この平文を他人には読めない形である暗号文に変換します。
こうすることによって、一見するだけでは何を表しているかわからない文字列になるため、第三者が見ても中身がわからなくなります。
イメージ
※引用:https://time-space.kddi.com/au-kddi/20220610/3324.html より
公開鍵暗号方式
公開鍵暗号方式とは、ペアの鍵(公開鍵と秘密鍵)を使って暗号化・復号を行なう方式です。
この方式では、受信者側があらかじめ自分しか使用することができない秘密鍵を生成し、その秘密鍵から誰もがアクセスできる公開鍵を生成しておきます。その名の通り、「公開」されます。
これにより、誰でもメッセージを送信できますが、そのメッセージを読むことができるのは秘密鍵を持っている受信者に限定されます。
公開鍵暗号方式の本質は、「誰でも送ってこれるけど、自分だけが読める」というしくみなのです。
具体的な通信の流れを見ていきましょう!
イメージ図
通信の流れ
- 受信者が公開鍵を公開(誰でも取得可能)
- 送信者がその公開鍵でメッセージを暗号化
- 暗号化された文章を受信者宛てに送信
- 受信者だけが持つ秘密鍵で受け取った文章を復号できる
公開鍵で暗号化された文書は、対になる秘密鍵を用いないと復号できないため、第三者による解読が非常に困難になります。
公開鍵暗号方式は、第三者による解読が困難になりますが、データが重くなりがちというデメリットもあります。
共通鍵暗号方式
共通鍵暗号方式とは、送信者と受信者が同じ鍵を使って暗号化・復号を行なう方式です。
この方式では、鍵を知っている者同士でしか、暗号文を復号できません。
イメージ
※引用:https://time-space.kddi.com/au-kddi/20220610/3324.html より
通信の流れ
- 双方で共通鍵を共有しておく
- 送信者が共通鍵でメッセージを暗号化
- 受信者が同じ共通鍵で復号
この方式は、処理が高速であるため、大量データの暗号化に向いています。
しかし、同時に鍵の配送が難しいというデメリットもあります。
仮に第三者に共通鍵を盗まれてしまうと、第三者が解読できてしまい、暗号化の恩恵を受けることができなくなってしまいます。
実際の使い分け
実際のシステム(例:SSL/TLS)では、両方の暗号方式が使われています。
共通鍵暗号方式は、処理は高速だが、共通鍵の受け渡し方法に課題があります。
一方、公開鍵暗号方式は、共通鍵を安全に渡すことができるが、処理が遅くなってしまうという課題があります。
SSL/TLSといった実際のシステムでは、両方の暗号方式の弱点を補う合うように両方の技術が使われています。
どのように使われているのか、簡単に見ていきましょう!
簡略版 SSL/TLS の通信の流れ
- サーバーが公開鍵を送る
・クライアント(例:Webブラウザ)が、サーバー(例:https://example.com
)にアクセスする
・サーバーは、デジタル証明書付きの公開鍵を送る - クライアントが共通鍵を作る
クライアントがランダムな共通鍵(セッション鍵)を生成する - 共通鍵を公開鍵で暗号化して送信
クライアントは、その共通鍵を サーバーの公開鍵で暗号化
暗号化された共通鍵をサーバーに送信 - サーバーが秘密鍵で復号
サーバーは自分の秘密鍵で復号して共通鍵を取得 - 共通鍵で通信を開始
ここからは、クライアントとサーバーが共通鍵で通信(高速・安全)
このようにして、両者のいいとこ取りをした通信を実現しています。
まとめ
公開鍵暗号方式と共通鍵暗号方式は、それぞれ異なる特徴と役割を持つ暗号技術です。
公開鍵暗号方式は、「公開鍵」と「秘密鍵」のペアを使って暗号化と復号を行ないます。公開鍵は誰でも取得できる一方、秘密鍵は自分だけが保持します。この仕組みにより、安全な鍵のやり取り(鍵交換)や、デジタル署名などの認証が可能になります。ただし、処理が重いため、大量のデータを暗号化するには向いていません。
一方、共通鍵暗号方式は、暗号化と復号の両方に同じ鍵(共通鍵)を使用します。仕組みがシンプルで処理が高速なため、大量のデータを効率的に暗号化できますが、安全に鍵を相手と共有するためには、事前に安全な経路が必要という課題があります。
そのため、実際のシステム(例えば SSL/TLS)では、まず公開鍵暗号方式を使って共通鍵を安全に共有し、その後の通信には処理の軽い共通鍵暗号方式を使う、というハイブリッドな構成が採用されています。
このように、両者はそれぞれの弱点を補い合いながら、安全で効率的な通信を実現しています。
参考・画像引用元URL
Discussion