CRYPTOGRAPHY / KEY MANAGEMENT
公開鍵暗号と共通鍵暗号の鍵管理とは?
利用者が増えたとき、鍵はいくつ必要になるのか。通信の仕組みから理解する。
社内でAさんとBさんが秘密のメッセージを交換するだけなら、暗号化は簡単に見えるかもしれません。しかし、利用者が10人、100人、1,000人と増えると、誰がどの鍵を保管し、誰に渡すかという運用の問題が大きくなります。
ここで重要なのが、共通鍵暗号と公開鍵暗号では鍵の共有方法が根本的に異なるという点です。
1. 共通鍵暗号:送る人と受け取る人が同じ秘密を持つ
共通鍵暗号(対称鍵暗号)では、送信者と受信者が同じ秘密鍵を使います。Aさんが鍵Kで暗号化した文章は、鍵Kを知っているBさんが復号します。
鍵KはAさんとBさんだけで安全に共有・保管する必要がある。
例えばCさんも加わり、各ペアが自分たちだけの秘密で話したいとします。A–B、A–C、B–Cの3組にそれぞれ別の鍵が必要です。この前提なら、n人から2人を選ぶ組合せの数だけ鍵を用意します。
各ペアに独立した共通鍵を1本ずつ割り当てる場合
n(n − 1) / 2 本
全員が他の n−1 人と鍵を共有するので n(n−1) 回。ただしA–BとB–Aは同じペアなので2で割ります。
このモデルでは10人で45本、100人で4,950本、1,000人で499,500本。人数にほぼ比例するのではなく、ほぼ人数の2乗で増える点が運用上の課題です。
2. 公開鍵暗号:一人が公開鍵と秘密鍵のペアを持つ
公開鍵暗号(非対称鍵暗号)では、各人が2種類の鍵を持ちます。公開鍵は他人に配る鍵、秘密鍵は自分だけが安全に保管する鍵です。
AさんがBさんに秘密の文章を送る
① Bさんが鍵ペアを作る
公開鍵は配布し、秘密鍵は手元に保管
② Aさんが暗号化
Bさんの公開鍵で暗号化
③ Bさんが復号
Bさん自身の秘密鍵で復号
Aさん自身の秘密鍵では復号しません。受信者Bさんの鍵ペアが使われます。
誰がBさんに送る場合も、同じBさんの公開鍵を利用できます。したがって、参加者がn人なら各人が1組の鍵ペアを持てばよく、鍵の個数は次のとおりです。
一人につき公開鍵1個・秘密鍵1個のモデル
2n 個
公開鍵n個 + 秘密鍵n個。鍵ペアを「1組」と数えるならn組です。
10人なら20個、100人なら200個、1,000人なら2,000個。各ペア専用の鍵を増やさずに済み、鍵の数は人数に比例します。
3. 鍵の数を並べて比較する
| 利用者数 n | 共通鍵(ペア別) | 公開鍵暗号(公開+秘密) |
|---|---|---|
| 2人 | 1本 | 4個 |
| 3人 | 3本 | 6個 |
| 5人 | 10本 | 10個 |
| 10人 | 45本 | 20個 |
| 100人 | 4,950本 | 200個 |
注意したいのは、ここで比較しているのが論理的に用意する鍵の数だということです。「公開鍵暗号ならあらゆる実装で鍵は必ず2n個だけ」という意味ではありません。実運用では鍵のローテーション、証明書、セッション鍵なども登場します。
4. 操作ラボ:人数を増やして鍵のつながりを観察する
参加者を増減させ、各ペアの共通鍵がどのように増えるか、公開鍵暗号では各人の鍵ペアだけで済む理由を確認してみましょう。
鍵管理シミュレーター
人数と鍵方式を切り替え、必要な鍵の数を比べる
ペアごとの共通鍵
10 本
n(n−1) / 2
公開鍵 + 秘密鍵
10 個
2n(5組)
線1本 = 1組だけが共有する鍵
5人全員が個別に秘密の通信をする場合
1人当たり4人と鍵を共有します。向きを区別しないペアは全部で10組です。
新たに1人増えると、既存の5人全員とのペア鍵が追加で必要になります。
概念モデルです。実サービスでは複数鍵、鍵更新、セッション鍵、証明書などが加わります。
5. なぜ「公開」してよいのか:真正性の課題もある
公開鍵は秘密にする必要がありません。ただし、受け取った公開鍵が本当にBさんのものかは別問題です。攻撃者が自分の公開鍵をBさんの鍵だと偽って渡すと、Aさんは攻撃者向けに暗号化してしまうおそれがあります。
この問題に対処するため、公開鍵と主体の結び付きを検証する仕組みとして、電子証明書とPKI(公開鍵基盤)が用いられます。鍵の配布が容易でも、本人確認や秘密鍵の保護が不要になるわけではありません。
鍵管理で考えるべきこと
秘密鍵の漏えい・紛失対策、公開鍵の真正性、鍵の期限と更新、失効、アクセス権限、バックアップなど。個数だけで運用コストは決まりません。
6. 実際の通信は「共通鍵 + 公開鍵」の組合せが多い
公開鍵暗号は便利ですが、一般に大きなデータを直接暗号化する処理には向いていません。一方、AESなどの共通鍵暗号は大量データを効率よく暗号化できます。そのため、実際のシステムでは公開鍵暗号などの仕組みで安全に鍵共有を行い、通信データは共通鍵暗号で保護する構成が広く用いられます。
たとえばTLS 1.3では(EC)DHEなどの鍵共有、証明書による認証、対称鍵による通信データの保護を組み合わせます。公開鍵暗号と共通鍵暗号は対立する方式ではなく、それぞれの強みを生かして組み合わせます。
なお電子署名では秘密鍵で署名し、対応する公開鍵で検証します。暗号化による機密性と署名による真正性・完全性の確認は、鍵ペアを使うという共通点があっても目的が違います。
まとめ
共通鍵暗号:各ペアが独立した鍵を持つモデルでは n(n−1)/2 本。
公開鍵暗号:各人が公開鍵と秘密鍵を1組持つモデルでは 2n 個。
実運用:鍵の数に加えて、鍵の真正性・配布・更新・保護を設計する。両方式を組み合わせることも多い。