概要
公開鍵暗号、鍵交換、デジタル署名について、共通鍵暗号との違いが分かるように説明する。
共通鍵暗号では、通信する前に同じ鍵を安全に共有する必要があった。
公開鍵暗号は、暗号化に使う鍵と復号に使う鍵を分けることで、鍵配布の問題に新しい解決策を与えた。
この記事で扱うこと
- 公開鍵暗号が、共通鍵暗号の鍵配布問題をどう変えたか。
- Diffie-Hellman鍵交換とRSAの基本的な役割。
- ハイブリッド暗号で、公開鍵暗号と共通鍵暗号を組み合わせる理由。
- デジタル署名が、暗号化とは別の目的を持つ理由。
- 楕円曲線暗号が、短い鍵で高い安全性を得やすい理由。
公開鍵暗号で変わった鍵の扱い
- 鍵を分ける発想
公開鍵暗号では、外部に公開してよい公開鍵と、本人だけが持つ秘密鍵を使う。
公開鍵で暗号化した情報は、対応する秘密鍵でしか復号できない。
これにより、送信者は受信者の公開鍵だけを知っていれば、受信者にだけ読める形で情報を送れる。 - 鍵配布問題の変化
共通鍵暗号では、通信する前に秘密の鍵を安全に渡す必要があった。
一方、公開鍵暗号では、公開鍵を広く配布できる。
もちろん、その公開鍵が本当に相手のものかを確認する仕組みは必要になるが、鍵配布の形は大きく変わった。
Diffie-Hellman鍵交換
- 共有鍵を直接送らない
Diffie-Hellman鍵交換は、通信路上に共通鍵そのものを送らずに、双方が同じ共有秘密を作る方法となる。
攻撃者が通信内容を見ていても、双方の秘密値を知らなければ共有秘密を求めにくい。
この考え方は、現在のTLSなどでも重要な役割を持つ。 - 前方秘匿性
一時的な鍵を使って毎回違う共有鍵を作ると、後で長期鍵が漏れても、過去の通信をすべて復号されにくくなる。
この性質を前方秘匿性という。
現代の安全な通信では、鍵交換の方式だけでなく、一時鍵を適切に使うことも重要になる。
素因数分解の難しさを使うRSA暗号
- 大きな数の性質を使う
RSA暗号は、大きな整数の素因数分解が難しいことを利用した公開鍵暗号となる。
RSAでは、公開鍵で暗号化したデータを秘密鍵で復号できる。
また、秘密鍵で署名を作り、公開鍵で検証する用途にも使われる。 - 実用上の注意
RSAを安全に使うには、鍵長、パディング方式、乱数、実装上の対策が重要になる。
RSAの仕組みをそのまま単純に使うのではなく、標準化された安全な方式で扱う必要がある。
暗号の数学的な強さと、実装・運用の安全性は分けて考えると理解しやすい。
ハイブリッド暗号
- 公開鍵暗号と共通鍵暗号を組み合わせる
公開鍵暗号は鍵配布や鍵交換に便利だが、大量データの暗号化には共通鍵暗号の方が高速となる。
そのため実際の通信では、公開鍵暗号でセッション鍵を安全に共有し、その後の本文は共通鍵暗号で暗号化することが多い。
この組み合わせをハイブリッド暗号と考えると分かりやすい。実際の流れは、次のように分けると理解しやすい。
- 公開鍵暗号や鍵交換で、短期的に使うセッション鍵を共有する。
- 共有したセッション鍵を使い、本文データを共通鍵暗号で暗号化する。
- 通信中は、必要に応じてセッション鍵を更新する。
役割 主に使う暗号 理由 セッション鍵の共有 公開鍵暗号・鍵交換 事前に同じ鍵を渡さなくても共有しやすい。 本文の暗号化 共通鍵暗号 大量データを高速に処理しやすい。
デジタル署名
- 暗号化とは目的が違う
デジタル署名は、内容を隠すためではなく、送信者の本人性とデータの改ざん有無を確認するために使う。
送信者は秘密鍵で署名を作り、受信者は公開鍵で検証する。
署名が正しく検証できれば、その秘密鍵を持つ人が署名したこと、署名後にデータが変わっていないことを確認できる。デジタル署名は、次のような手順で考えると分かりやすい。
- 送信者が文書からハッシュ値を作る。
- 送信者が秘密鍵で署名を作る。
- 受信者が同じ文書からハッシュ値を作る。
- 受信者が公開鍵で署名を検証する。
確認できること 意味 本人性 対応する秘密鍵を持つ人が署名したと確認できる。 改ざん検知 署名後に文書が変わると検証に失敗する。 - 電子証明書との関係
公開鍵を使うには、その公開鍵が本当に相手のものかを確認する必要がある。
そこで、認証局が公開鍵と主体情報を結び付けて署名したものが電子証明書となる。
WebサイトのHTTPSでは、この証明書を使ってサーバーの身元を確認する。
楕円曲線暗号(ECC)
- 短い鍵で高い安全性を得やすい
楕円曲線暗号は、楕円曲線上の離散対数問題の難しさを利用する公開鍵暗号となる。
RSAと比べて短い鍵長で同程度の安全性を得やすいため、通信量や処理量を抑えたい場面で使われる。
ECDHは鍵交換、ECDSAやEdDSAはデジタル署名の用途で使われる。 - 現代通信との関係
現代のTLSでは、楕円曲線を使った一時的な鍵交換がよく使われる。
ただし、RSAやECCのような従来の公開鍵暗号は、大規模な量子コンピュータが実現した場合に危険になると考えられている。
そのため、後の耐量子暗号への移行が重要な課題になる。
違いを整理する
| 比較する項目 | 整理するポイント |
|---|---|
| 公開鍵で暗号化すると誰でも読めるのか | 公開鍵で暗号化したものは、対応する秘密鍵を持つ人だけが復号できる。 |
| 暗号化と署名 | 暗号化は内容を隠す目的、署名は本人性と改ざん検知が目的。 |
| RSAとDiffie-Hellman | RSAは暗号化や署名に使われ、Diffie-Hellmanは共有鍵を作る鍵交換として使われる。 |
| 公開鍵暗号と通信本文 | 本文全体を公開鍵暗号で暗号化するのではなく、共通鍵と組み合わせることが多い。 |
実務とのつながり
- HTTPS
サーバー証明書、鍵交換、共通鍵暗号を組み合わせて通信を保護する。 - ソフトウェア配布
パッケージやアップデートファイルに署名し、改ざんされていないことを確認する。 - 鍵管理
公開鍵は配布できるが、秘密鍵は厳重に守る必要がある。
まとめ
- 公開鍵暗号は、公開鍵と秘密鍵を分けることで鍵配布の問題を変えた。
- 実用通信では、公開鍵暗号と共通鍵暗号を組み合わせるハイブリッド暗号が重要になる。
- デジタル署名は、内容を隠すものではなく、本人性と改ざん検知を支える仕組みとなる。
- RSAやECCは広く使われてきたが、耐量子暗号への移行も考える必要がある。
参考文献
- RFC 8446, The Transport Layer Security(TLS)Protocol Version 1.3
- RFC 8032, Edwards-Curve Digital Signature Algorithm(EdDSA)