暗号化と認証|共通鍵暗号・公開鍵暗号・デジタル署名の仕組み
インターネットでは、通信の途中でデータを盗み見られたり、書き換えられたり、他人になりすまされたりするおそれがあります。これを防ぐ技術が暗号化と認証です。共通テストでは、どの鍵で暗号化し、どの鍵で復号するか、鍵がいくつ必要か、デジタル署名で何が分かるか、がよく問われます。
暗号の基本
| 用語 | 意味 |
|---|---|
| 平文 | 暗号化する前の、誰でも読めるデータ |
| 暗号文 | 暗号化して、第三者には読めなくしたデータ |
| 暗号化 | 平文を暗号文に変換すること |
| 復号 | 暗号文を平文に戻すこと |
| 鍵 | 暗号化や復号に使う情報 |
シーザー暗号
アルファベットを決まった数だけずらす、昔からある暗号です。「3文字後ろにずらす」なら、A→D、B→E、C→F、…となります。
例: 平文 CAT → 暗号文 FDW
この場合、「3文字ずらす」が鍵です。ずらし方は25通りしかないので、すべて試せばすぐに解読されてしまいます。現代の暗号は、試すべき鍵の組合せが天文学的な数になるように作られています。
共通鍵暗号方式
**共通鍵暗号方式**は、暗号化と復号に同じ鍵を使う方式です。
- 長所:処理が速い
- 短所:鍵を相手に安全に渡す方法が問題になる(鍵を盗まれると解読される)
- 通信する相手ごとに別の鍵が必要
必要な鍵の数
n 人が、2人ずつの組ごとに別々の共通鍵を使うとき、必要な鍵の数は
n × (n − 1) ÷ 2 個
例えば10人なら 10 × 9 ÷ 2 = 45個、100人なら4,950個と、人数が増えると急激に増えます。
公開鍵暗号方式
**公開鍵暗号方式**は、対になる2つの鍵を使う方式です。
- 公開鍵:誰にでも公開してよい鍵
- 秘密鍵:本人だけが持ち、絶対に公開しない鍵
一方の鍵で暗号化したものは、対になるもう一方の鍵でしか復号できません。
AさんがBさんに秘密のデータを送るとき
- Bさんは、自分の公開鍵を公開しておく
- Aさんは、Bさんの公開鍵で暗号化して送る
- Bさんは、自分(Bさん)の秘密鍵で復号する
Bさんの秘密鍵はBさんしか持っていないので、途中で盗まれてもBさん以外は読めません。受信者の公開鍵で暗号化し、受信者の秘密鍵で復号する、と覚えましょう。
必要な鍵の数
1人が公開鍵と秘密鍵を1組(2個)持てばよいので、n 人なら 2n 個です。10人なら20個です。
| 共通鍵暗号方式 | 公開鍵暗号方式 | |
|---|---|---|
| 鍵 | 暗号化と復号に同じ鍵 | 公開鍵と秘密鍵の組 |
| 処理の速さ | 速い | 遅い |
| 鍵の受け渡し | 安全に渡す必要がある | 公開鍵は公開してよい |
| n 人で必要な鍵の数 | n(n − 1)/2 個 | 2n 個 |
ハイブリッド方式(HTTPSのしくみ)
公開鍵暗号は鍵の受け渡しが楽ですが処理が遅く、共通鍵暗号は速いですが鍵の受け渡しが難しい。そこで両方の長所を組み合わせたのがハイブリッド方式です。
- 送信者が、通信に使う共通鍵を作る
- その共通鍵を、受信者の公開鍵で暗号化して送る
- 受信者は、自分の秘密鍵で復号して共通鍵を受け取る
- 以降のデータは、共通鍵で高速に暗号化してやり取りする
Webの HTTPS(SSL/TLS)は、この方式で通信を暗号化しています。
ハッシュ関数
ハッシュ関数は、どんな長さのデータからも、決まった長さの値(ハッシュ値)を計算する関数です。
- 元のデータが1文字でも変わると、ハッシュ値は大きく変わる
- ハッシュ値から元のデータを求めることは、事実上できない
この性質を使うと、データが改ざんされていないかを確かめられます。パスワードをそのまま保存せず、ハッシュ値にして保存する用途にも使われます。
デジタル署名
デジタル署名は、公開鍵暗号を応用して、送信者が本人であることとデータが改ざんされていないことを確かめる仕組みです。
- 送信者は、データのハッシュ値を自分の秘密鍵で暗号化して、署名を作る
- データと署名を一緒に送る
- 受信者は、送信者の公開鍵で署名を復号し、受け取ったデータから計算したハッシュ値と比べる
- 一致すれば、本人が作り(なりすましでない)、途中で改ざんされていないと分かる
暗号化のときとは逆に、送信者の秘密鍵で作り、送信者の公開鍵で確かめる点に注意しましょう。
電子証明書と認証局
公開鍵が本当にその人(その会社)のものかを保証するのが電子証明書で、信頼できる第三者機関の認証局(CA)が発行します。ブラウザは、Webサイトの電子証明書を確認して、本物のサイトかどうかを判断しています。
共通テストでの出題
- 2025年の本試験 第1問 問1 a:デジタル署名で、発信者が本人であることのほかに確認できること(改ざんされていないか)。「暗号化されているか」「盗聴されていないか」「複製されていないか」は確かめられません。
- 鍵の使い方:誰の、どの鍵で暗号化・復号するかを問う問題。
- 鍵の数:n 人で必要な共通鍵・公開鍵の数を計算する問題。
よくある間違い
- 「送信者の公開鍵で暗号化する」:秘密のデータを送るときは、受信者の公開鍵で暗号化します。
- 「デジタル署名でデータの中身を隠せる」:デジタル署名は本人確認と改ざん検知の仕組みで、中身を隠すのは暗号化です。
- 「公開鍵暗号の方が速い」:処理が速いのは共通鍵暗号です。
まとめ
- 共通鍵暗号は同じ鍵で暗号化・復号。速いが鍵の受け渡しが課題。n 人で n(n − 1)/2 個
- 公開鍵暗号は受信者の公開鍵で暗号化し、受信者の秘密鍵で復号。n 人で 2n 個
- HTTPSは、共通鍵を公開鍵暗号で受け渡すハイブリッド方式
- デジタル署名は送信者の秘密鍵で作り、送信者の公開鍵で確かめる。本人確認と改ざん検知ができる