暗号の道具箱 — 共通鍵・公開鍵・ハッシュ・署名
共通鍵・公開鍵・ハッシュ・デジタル署名の 4 つの道具を「何を解決するか」で区別し、TLS がなぜハイブリッド方式なのかをつかむ。
4 つの道具を「何を解決するか」で並べる
第 1 章で、TLS は 3 つの保証(機密性・完全性・真正性)の組み合わせだと確認しました。この章では、それを実現する 4 つの道具を開けていきます。暗号の教科書は道具の「仕組み」から入りがちですが、この講座では一貫して「その道具がない世界では何に困るか」から入ります。
| 道具 | 解決する困りごと | 答える保証 |
|---|---|---|
| 共通鍵暗号 | 大量のデータを高速に暗号化したい | 機密性 |
| 公開鍵暗号 | 会ったことのない相手と、どうやって鍵を共有するか | 機密性(の入口) |
| ハッシュ | 内容が変えられたことに気づきたい | 完全性 |
| デジタル署名 | 「本人が作った」ことを確かめたい | 真正性 |
共通鍵暗号 — 速いが、鍵をどう渡すか
共通鍵暗号(AES など)は、同じ鍵で暗号化と復号を行います。非常に高速で、大量の通信本文を守るのに向いています。TLS で実際にあなたのデータを暗号化しているのは、ほぼこの共通鍵暗号です。
弱点は 1 つ — その鍵を、相手にどうやって安全に渡すか。鍵をメールで送れば盗聴され、盗聴されない経路があるならそもそも暗号は要りません。これが鍵配送問題です。さらに、通信したいペアの数だけ鍵が必要なので、人数が増えると鍵の本数は 2 乗のペースで増えます。
公開鍵暗号 — 鍵を「開ける鍵」と「閉める鍵」に分ける
公開鍵暗号は、対になる 2 つの鍵 — 公開鍵と秘密鍵 — を使います。公開鍵で暗号化したものは、対になる秘密鍵でしか復号できません。
これで鍵配送問題が変わります。各自が「南京錠」を公開しておくだけで、誰とでも秘密の通信を始められる — 事前に秘密を共有する必要がなくなりました。ただし公開鍵暗号は共通鍵暗号より桁違いに遅いため、本文を全部これで暗号化するのは現実的ではありません。
TLS の答え = ハイブリッド方式: 公開鍵の技術で「共通鍵」を安全に共有し(第 3 章の鍵合意)、本文は高速な共通鍵暗号で守る。遅い道具は最初の一瞬だけ、速い道具を本番に使う分業です。
ハイブリッド方式の分業。第 5 章で見る TLS 1.3 ハンドシェイクは、この「最初の一瞬」を 1 往復で済ませる手順です。
小問 2-1 — 鍵配送問題を数える
共通鍵方式の限界と、公開鍵方式がそれをどう解くかを、手を動かして確認します。
Q1. 10 人のグループ全員が、他の 9 人それぞれと共通鍵方式で秘密に通信したいとします。ペアごとに別の鍵を使うとき、必要な鍵は全部で何本ですか。
ペアの数は 10 × 9 ÷ 2 = 45 本です。n 人なら n(n−1)/2 本で、人数の 2 乗のペースで増えていきます。しかも各ペアは「最初の 1 本」を安全に渡す手段が要ります。これが鍵配送問題で、公開鍵暗号はこれを『各自が公開鍵 1 つを公開するだけ』に変えました。
Q2. 公開鍵暗号を使って、A さんにだけ読めるメッセージを送りたいとき、暗号化に使う鍵はどれですか。
A さんの公開鍵で暗号化したものは、対になる A さんの秘密鍵でしか復号できません。公開鍵は誰でも知ってよい鍵なので、事前に秘密の鍵を渡し合う必要がなくなります。「公開鍵で閉めて、秘密鍵で開ける」— この向きを体に入れてください。
ハッシュ — 内容の「指紋」を取る
ハッシュ関数(SHA-256 など)は、どんな長さの入力からも固定長の値(ハッシュ値)を作る一方向の関数です。次の 3 つの性質がそろって、はじめて「指紋」として使えます。
- 同じ入力 → 必ず同じ出力。照合に使える
- 1 ビットでも違う入力 → まったく違う出力。わずかな改ざんでも指紋が一致しなくなる
- 出力から入力を逆算できない。指紋から本体は復元できない
ただし、ハッシュ値をデータと一緒に送るだけでは改ざん検知になりません。途中の攻撃者が本文を書き換え、ハッシュ値も計算し直して差し替えればよいからです。そこで実際の通信では、ハッシュに鍵を混ぜ込みます。鍵を知る者にしか正しい値を作れない指紋 — これが MAC(メッセージ認証コード)で、TLS では暗号化と改ざん検知を一体で行う認証付き暗号(AEAD)という形で使われています(第 5 章で再登場します)。
デジタル署名 — 「本人が作った」ことの証明
公開鍵暗号の鍵ペアは、逆向きにも使えます。秘密鍵で署名を作り、公開鍵で検証する — 秘密鍵は本人しか持っていないので、検証に成功すれば「この内容は秘密鍵の持ち主が確かに承認したもので、その後変わっていない」と言えます。
| 暗号化(機密性) | 署名(真正性) | |
|---|---|---|
| 作る側が使う鍵 | 相手の公開鍵 | 自分の秘密鍵 |
| 受け取る側が使う鍵 | 自分の秘密鍵 | 相手の公開鍵 |
| 守るもの | 内容を読まれない | 作った本人と内容の無改変を確かめる |
署名は、この講座の後半を支える道具です。第 4 章の証明書は「CA がドメインの持ち主の公開鍵に署名したもの」であり、第 5 章のハンドシェイクではサーバが「秘密鍵を本当に持っていること」を署名で証明します。
小問 2-2 — 道具を取り違えない
4 つの道具はそれぞれ別の問いに答えます。「どの道具が何を解決するか」を確認します。
Q3. TLS は通信本文の暗号化に、公開鍵暗号ではなく共通鍵暗号を使います。主な理由はどれですか。
公開鍵暗号は共通鍵暗号に比べて桁違いに計算コストが高く、大量の通信本文には向きません。そこで TLS は『共有の難しい共通鍵を、公開鍵の技術を使った鍵合意で作り、本文は速い共通鍵暗号で守る』というハイブリッド方式を取ります。強度が高いからでも、鍵共有が簡単だからでもありません(共有が難しいのはむしろ共通鍵の弱点です)。
Q4. 暗号学的ハッシュ関数の性質としてあてはまらないものはどれですか。
ハッシュは一方向の要約であって、暗号化ではありません。出力から入力を復元できないからこそ、改ざん検知やパスワード保存に使えます。「ハッシュ = 復号できない」「暗号化 = 鍵があれば復号できる」— この区別は実務の会話でも頻繁に効きます。
Q5. デジタル署名を検証するとき、検証する側が使う鍵はどれですか。
署名は秘密鍵で作り、対になる公開鍵で検証します。暗号化(公開鍵で閉めて秘密鍵で開ける)とは鍵の使う向きが逆です。「秘密鍵の持ち主にしか作れないものを、誰でも検証できる」— この性質が第 4 章の証明書の土台になります。
この章で持ち帰ること
- 共通鍵暗号は速いが鍵配送問題を抱える。n 人の総当たりで鍵は n(n−1)/2 本
- 公開鍵暗号は鍵配送問題を解くが遅い。TLS は両者のハイブリッドで分業する
- ハッシュは一方向の指紋。鍵を混ぜた MAC / AEAD ではじめて改ざん検知になる
- 署名は秘密鍵で作り公開鍵で検証。暗号化と鍵の向きが逆
次章では、「会ったことのない相手と共通鍵を作る」を実際に手計算します。公開鍵の技術が魔法ではないことを、自分の手で確かめてください。