公開鍵暗号
公開鍵暗号(非対称暗号、Symmetric Key)は、暗号化と復号(解除)に異なる2つの鍵を使う暗号方式です。
送信側と受信側で同じ1つの鍵をあらかじめ安全に共有・保持しなければならない従来型の共通鍵暗号(対称暗号、Asymmetric Key)の弱点(鍵の受け渡し中に盗まれるリスク)を解決するために開発されました。
公開鍵暗号では、対(ペア)になる2つの鍵をあらかじめ生成して利用します。一方の鍵で暗号化したデータは、ペアになっているもう一方の鍵でしか復号できません。
- 公開鍵 (Public Key):
公開する鍵。送信者がデータを暗号化する際や、署名を検証する際に使用します。 - 秘密鍵 (Private Key):
本人だけが厳重に保管する鍵。受信したデータを復号する際や、デジタル署名を作成する際に使用します。
暗号化通信の流れ
受信者が送信者からメッセージを受け取る流れは以下の通りです。
- 鍵の準備:
受信者は公開鍵と秘密鍵のペアを作成し、公開鍵だけを公開(送信者に送信)します。秘密鍵は自分だけが厳重に保管します。 - 暗号化:
送信者は、入手した受信者の公開鍵を使ってメッセージを暗号化し、送信します。 - 復号:
受信者は、秘密鍵を使って受信した暗号文を復号します。
※第三者が通信途中で暗号文と公開鍵を盗み取っても、復号に必要な秘密鍵は受信者しか持っていないため、内容を解読することは数学的に極めて困難です。
メリットとデメリット
公開鍵暗号のメリットとデメリットは以下になります。
- メリット:
- 秘密鍵をネットワーク上でやり取りする必要がないため、鍵の盗聴リスクが低い。
- 秘密鍵で暗号化(署名)し、公開鍵で検証することで、本人が作成したこと(なりすまし防止)や改ざんされていないことを証明できる。
- デメリット:
- 複雑な数学的計算(巨大な素因数分解など)を伴うため、共通鍵暗号に比べて処理に数百〜数千倍の時間がかかる。
主な用途
日常のインターネットセキュリティの裏側で広く活用されています。
- HTTPS(Webサイトの安全な通信):
SSL/TLS通信において、最初に安全に通信を確立(共通鍵を交換)するフェーズで公開鍵暗号が使われます。 - SSH接続:
サーバにリモートログインする際の安全な認証手段。 - デジタル署名・電子証明書:
メールやPDF文書などの送信者証明・改ざん検知。 - 暗号資産(仮想通貨):
ビットコイン(Bitcoin)などのウォレット認証や取引の署名。
ハイブリッド方式
公開鍵暗号と共通鍵暗号は、それぞれ異なる長所・デメリットを持っています。実際のインターネットの通信では、両者の長所を組み合わせたハイブリッド暗号方式が標準的に使われています。
公開鍵暗号と共通鍵暗号の比較
| 項目 | 共通鍵暗号 | 公開鍵暗号 |
| 使用する鍵 | 暗号化と復号で同じ1つの鍵を使用 | 公開鍵(暗号化)と秘密鍵(復号)のペア |
| 処理速度 | 非常に高速(公開鍵の数百〜数千倍) | 遅い(複雑な数学的計算が必要) |
| 鍵の配送・管理 | 難易度が高い 事前に安全な方法で鍵を渡す必要がある(盗聴リスクがある) |
容易・安全 公開鍵は誰に見せてもOK。秘密鍵は手元で厳重管理 |
| 主な用途 | 大容量データの暗号化(ファイル保護、通信のデータ本体) | 鍵の交換、デジタル署名、本人認証 |
| 代表例 | AES, ChaCha20 | RSA, ECC(楕円曲線暗号) |
ハイブリッド暗号方式の仕組み
ハイブリッド暗号方式は、公開鍵暗号の安全性と共通鍵暗号の高速性の各長所を生かした仕組みです。実際のデータやり取りは共通鍵暗号で行い、共通鍵の受渡しの時だけ公開鍵暗号を使います。
- 受信者の公開鍵を取得:
送信者は、受信者の公開鍵を入手します。 - 一時的な共通鍵を生成:
送信者は、今回の通信のためだけの共通鍵(セッション鍵)を生成します。 - 2つの暗号化を実行
- データの暗号化:手順2で作った共通鍵でデータを暗号化します(高速)。
- 共通鍵の暗号化:受信者の公開鍵で手順2で作った共通鍵を暗号化します(安全)。
- 暗号化したデータと鍵を送信
送信者は、暗号化されたデータと暗号化された共通鍵を受信者に送信します。 - 受信側で復号
受信者は、自分の秘密鍵で暗号化された共通鍵を復号します。その共通鍵を使って暗号化されたデータを復号します。
公開鍵と秘密鍵
公開鍵と秘密鍵は、ペアで生成された鍵で、一方の鍵で暗号化・署名したデータは、もう一方の鍵でしか複合・検証できないという性質を持っています。
役割と特徴
| 項目 | 公開鍵 (Public Key) | 秘密鍵 (Private Key) |
| 公開範囲 | 誰にでも公開してOK | 自分以外には絶対秘密 |
| 主な役割 | ①メッセージの暗号化 ②デジタル署名の検証 |
①メッセージの復号(解除) ②デジタル署名の作成 |
| 管理方法 | サーバやWeb上に配置、相手に送付 | ローカル環境やハードウェアに厳重保管 |
| 関係性 | 秘密鍵から計算して生成できる | 公開鍵から秘密鍵を計算・特定することは数学的にほぼ不可能 |
主な用途
- 暗号化通信(データの機密確保)
受信者にだけにメッセージを送る場合。- 送信者:受信者の公開鍵を使ってメッセージを暗号化して送信。
- 受信者:自分の秘密鍵を使って復号する。
- デジタル署名(送信者を証明・改ざん検知する)
メッセージが送信者のもので、途中で改ざんされていないことを証明する。- 送信者:自分の秘密鍵を使ってデータにデジタル署名を付与して送信。
- 受信者:送信者の公開鍵を使って署名を検証。
電子署名
電子署名(デジタル署名)は、紙の書類における手書き署名や押印に相当する役割を、電子文書上で実現する技術です。公開鍵暗号とハッシュ関数という技術を組み合わせることで、作成者の証明と改ざんされていないことの証明を保証します。
電子署名が解決する課題
電子署名を付与することで、以下の2点を同時に証明できます。
- 本人証明(なりすまし防止):
本人しか持っていない秘密鍵で署名するため、作成者を特定できます。 - 改ざん検知:
文書の内容が変更されると署名の検証に失敗するため、改ざんを確実に検知できます。
電子署名の流れ
送信者が電子文書に電子署名を付与して送信し、受信者がそれを確認するステップは以下の通りです。
- 文書のハッシュ値を計算:
送信者は、署名したい電子文書からハッシュ関数を用いてハッシュ値(文書固有の短い要約データ)を生成します。 - 秘密鍵でハッシュ値を暗号化(署名生成):
送信者本人の秘密鍵を使って、手順1で求めたハッシュ値を暗号化します。この暗号化されたデータが電子署名となります。 - 文書と電子署名を送信:
元の電子文書、電子署名、送信者の電子証明書(公開鍵)を受信者に送信します。 - 公開鍵で電子署名を復号:
受信者は、送信者の公開鍵を使って電子署名を復号し、元のハッシュ値(ハッシュ値A)を取り出します。 - 文書から再度ハッシュ値を計算して照合:
受信者は届いた電子文書から直接ハッシュ値(ハッシュ値B)を計算し、ハッシュ値Aと一致するか比較します。- 一致した場合:送信者本人が作成し、途中で改ざんされていないことが証明されます。
- 不一致の場合:文書が途中で書き換えられたか、別の鍵で署名された(なりすました)ことが分かります。



