
オンラインショッピングでクレジットカード番号を入力するとき、その情報は暗号化されて送られる。でも「暗号化」って具体的に何をしているのか、説明できるだろうか。
公開鍵暗号の仕組みをイメージで掴むには、こう考えるといい。
「南京錠(カギをかける道具)と鍵(南京錠を開ける道具)を別々にする」——私が鍵のかかっていない南京錠をあなたに送る。あなたはメッセージを箱に入れてその南京錠でロックして送り返す。南京錠を開けられるのは、対応する鍵を持っている私だけだ。
「南京錠(公開鍵)」は誰に渡しても問題ない。でも「鍵(秘密鍵)」は私しか持っていない。だから南京錠で施錠された箱は、私にしか開けられない。これが公開鍵暗号の本質だ。
この記事でわかること
- 共通鍵暗号と公開鍵暗号の違いと使い分け
- 公開鍵・秘密鍵とは何か、南京錠の比喩で理解する
- HTTPSが「安全」である理由と仕組み
- ハッシュ関数・デジタル署名の基本
- 高校情報Ⅰ・ITパスポートでよく出る問題パターン
共通鍵暗号:同じ鍵で施錠も開錠もする
📌 要点:共通鍵暗号は暗号化と復号に同じ鍵を使う。処理が速いが「鍵をどうやって安全に相手に渡すか」という問題がある。これを「鍵配送問題」と呼び、公開鍵暗号が生まれた背景になった。

まず「共通鍵暗号」から整理しよう。
共通鍵暗号とは、暗号化(データを読めない状態にすること)と復号(元に戻すこと)に同じ鍵を使う方式だ。
家の鍵をイメージするとわかりやすい。玄関の鍵で施錠して、同じ鍵で開錠する。シンプルで処理が速い。
【共通鍵暗号の流れ】
送信側: 平文 + 共通鍵 → 暗号文 を送る
受信側: 暗号文 + 共通鍵 → 平文 に戻す
問題は「鍵の渡し方」だ。
共通鍵を安全にやり取りするには、事前に別の安全な手段で鍵を共有しなければならない。でもインターネット上で初めて通信する相手と、どうやって鍵を安全に渡すか——これが鍵配送問題だ。
「鍵を送るためにまた別の鍵が必要」という堂々巡りになってしまう。
公開鍵暗号:南京錠を誰にでも配る
📌 要点:公開鍵暗号は暗号化用の鍵(公開鍵)と復号用の鍵(秘密鍵)を分ける。公開鍵は誰に渡しても問題なく、秘密鍵は自分だけが持つ。これで「鍵配送問題」が解決される。
公開鍵暗号は「施錠する道具」と「開錠する道具」を別々にすることで鍵配送問題を解決した。
【公開鍵暗号の仕組み】
鍵のペアを作る:
公開鍵(パブリックキー)→ 南京錠。誰に渡しても問題ない
秘密鍵(プライベートキー)→ 南京錠の鍵。自分だけが持つ
通信の流れ:
1. 受信側が「公開鍵(南京錠)」を相手に送る
2. 送信側は平文を公開鍵で暗号化して送る
3. 受信側は自分だけが持つ秘密鍵で復号する
南京錠(公開鍵)は複製されても問題ない。それで施錠された箱は、対応する鍵(秘密鍵)でしか開けられないからだ。
| 比較項目 | 共通鍵暗号 | 公開鍵暗号 |
|---|---|---|
| 鍵の数 | 1つ(共通) | 2つ(公開鍵・秘密鍵) |
| 処理速度 | ◎ 速い | △ 遅い |
| 鍵配送 | ❌ 問題あり | ✅ 問題なし |
| 主な用途 | データの暗号化(大量データ向け) | 鍵の交換・デジタル署名 |
| 代表的な方式 | AES | RSA、楕円曲線暗号 |
公開鍵暗号は処理が重い。そのため実際のHTTPS通信では「公開鍵暗号で共通鍵を安全に渡して、あとは共通鍵暗号で通信する」というハイブリッド方式を使っている。
HTTPSはどうやって安全を作るか
📌 要点:HTTPSはTLS(Transport Layer Security)というプロトコルで通信を保護する。公開鍵暗号で「セッション鍵(共通鍵)」を安全に交換し、以降の通信はその共通鍵で高速に暗号化する。

ブラウザのアドレスバーに鍵マーク🔒が表示されているとき、裏側でこんなやり取りが行われている。
【TLSハンドシェイクの流れ(簡略版)】
① ブラウザ → サーバー: 「HTTPS通信したい。対応している暗号方式はこれこれです」
② サーバー → ブラウザ: 「わかった。これがうちの公開鍵(証明書)です」
③ ブラウザ: 公開鍵が本物かどうか「認証局」に確認する
(認証局 = 公開鍵の発行元を保証する第三者機関)
④ ブラウザ → サーバー: 「この通信で使う共通鍵(セッション鍵)を
あなたの公開鍵で暗号化して送ります」
⑤ 以降の通信: 共通鍵(セッション鍵)で暗号化して高速にやり取り
ポイントは③の「証明書の確認」だ。公開鍵が本物かどうかを第三者が保証しないと、「偽物の公開鍵を送りつけて通信を盗聴する」攻撃(中間者攻撃)が成立してしまう。
スマホやPCには「信頼できる認証局」のリストがあらかじめ入っていて、証明書がそのリストに含まれる認証局によって署名されているかを自動で確認する。
ハッシュ関数:データの「指紋」を作る
📌 要点:ハッシュ関数は任意のデータから固定長の値(ハッシュ値)を生成する。同じ入力からは必ず同じ値が出て、ハッシュ値から元データは復元できない。「改ざん検知」や「パスワード保存」に使われる。
暗号化とよく一緒に語られるが別の仕組みが「ハッシュ関数」だ。
ハッシュ関数は、どんなデータを入れても固定の長さの値(ハッシュ値)を出力する関数だ。
「hello」 → ハッシュ関数 → 5d41402abc4b2a76b9719d911017c592
「hello!」(1文字追加)→ ハッシュ関数 → 4e99d9827e7e4be83bddc7a7e4d31ed7
たった1文字変わっただけで、ハッシュ値は全く違う値になる。これを雪崩効果と呼ぶ。
ハッシュ関数の重要な性質:
| 性質 | 内容 |
|---|---|
| 一方向性 | ハッシュ値から元データを復元できない |
| 一意性 | 同じ入力からは必ず同じハッシュ値が出る |
| 雪崩効果 | 入力が少し変わるとハッシュ値が大きく変わる |
使われている場面:
- パスワード保存:パスワードをそのまま保存せず、ハッシュ値だけを保存する。ログイン時に入力値のハッシュ値を計算して照合する。DBが漏洩してもパスワードが直接わからない
- ファイルの改ざん検知:ダウンロードしたファイルのハッシュ値を公式と比較する。値が違えば改ざんされている
- デジタル署名(後述)
デジタル署名:「確かに私が送った」を証明する
📌 要点:デジタル署名は秘密鍵でハッシュ値を暗号化したもの。受信側は送信者の公開鍵で復号して一致を確認する。「送信者が本人であること」と「データが改ざんされていないこと」を同時に証明できる。
「このメッセージは確かに私が送った」「途中で改ざんされていない」の2点を証明する仕組みがデジタル署名だ。
【デジタル署名の仕組み】
送信側:
① メッセージのハッシュ値を計算する
② そのハッシュ値を「自分の秘密鍵」で暗号化する → これがデジタル署名
③ メッセージ本文 + デジタル署名を送る
受信側:
① 受け取ったメッセージのハッシュ値を計算する
② デジタル署名を「送信者の公開鍵」で復号してハッシュ値を取り出す
③ ①と②のハッシュ値が一致すれば → 本人が送った・改ざんなし
「秘密鍵で暗号化できるのは本人だけ」という性質を使って、本人確認と改ざん検知を同時に実現している。
高校情報Ⅰ・ITパスポートでよく出る問題パターン
📌 要点:試験では「共通鍵と公開鍵の違い」「公開鍵・秘密鍵はどちらを誰が持つか」「HTTPSの仕組み」「ハッシュ関数の性質」が頻出。図と言葉をセットで覚えると得点しやすい。
頻出パターン①:鍵の使い分け
Q. AさんがBさんに暗号化メッセージを送るとき、
公開鍵暗号方式で暗号化に使う鍵はどちらの何鍵か?
A. Bさんの公開鍵で暗号化する
(Bさんの秘密鍵でしか復号できないため)
頻出パターン②:デジタル署名の確認
Q. デジタル署名の確認に使う鍵は何か?
A. 送信者の公開鍵
(送信者の秘密鍵で作られた署名は、対応する公開鍵で確認できる)
頻出パターン③:ハッシュ関数の性質
Q. ハッシュ関数について正しいものを選べ
ア. ハッシュ値から元データを復元できる
イ. 異なるデータから同じハッシュ値が出ることはない
ウ. 同じデータからは常に同じハッシュ値が出る ← ✅ 正解
エ. ハッシュ値の長さは入力データの長さに比例する
FAQ
- QHTTPとHTTPSは何が違いますか?
- A
HTTPはHTTPSと違い通信が暗号化されていません。
第三者がネットワークを盗聴すると、送受信されているデータを読める状態です。HTTPSはTLSで通信を暗号化するため、盗聴されても内容が読めません。パスワードや個人情報を送るページでは必ずHTTPSを確認してください。
- Q公開鍵は本当に誰に渡しても安全ですか?
- A
公開鍵自体は渡しても安全です。
ただし「渡す公開鍵が本物であること」の証明が必要です。偽物の公開鍵を渡す「なりすまし」を防ぐために、認証局(CA)が証明書を発行して公開鍵の正当性を保証します。
- QAESやRSAという言葉を見かけますが何です?
- A
暗号化アルゴリズムの名前です。AES(Advanced Encryption Standard)は共通鍵暗号の代表的な方式で、現在最もよく使われます。RSA(Rivest-Shamir-Adleman)は公開鍵暗号の代表的な方式です。ITパスポートでは名前と「どちらの方式か」を覚えておけば十分です。
- Qパスワードはハッシュ化されている。だから安全と聞きますが本当ですか?
- A
ハッシュ化されていることは重要ですが、弱いパスワードは「レインボーテーブル攻撃」で解読される可能性があります。
よくあるパスワードのハッシュ値を事前に大量に計算したリストと照合する方法です。現代のシステムは「ソルト(ランダムな文字列)」をパスワードに追加してからハッシュ化することでこの攻撃を防いでいます。
- Q「エンドツーエンド暗号化」とは何ですか?
- A
送信者と受信者の端末だけが復号できる暗号化方式です。
サーバーを経由しても、サーバー側は内容を読めません。LINEやWhatsAppで使われています。サービス提供者自身も通信内容を見られないため、プライバシー保護が強い反面、犯罪捜査との兼ね合いで議論があります。
- Q暗号化とハッシュ化の違いは何ですか?
- A
暗号化は「鍵があれば元に戻せる」変換です。
ハッシュ化は「元に戻せない」一方向変換です。データを守りたいなら暗号化、データの一致確認や改ざん検知にはハッシュ化を使います。パスワードは「比較できれば元に戻す必要はない」のでハッシュ化が適しています。
まとめ
- 共通鍵暗号は同じ鍵で暗号化・復号。速いが「鍵をどう渡すか」という問題がある
- 公開鍵暗号は公開鍵(南京錠)と秘密鍵(鍵)を分ける。鍵配送問題を解決する
- HTTPSは公開鍵暗号で共通鍵を安全に交換し、以降は共通鍵で高速通信するハイブリッド方式
- ハッシュ関数は元に戻せない一方向変換。パスワード保存・改ざん検知に使われる
- デジタル署名は秘密鍵でハッシュ値を暗号化したもの。本人確認と改ざん検知を同時に証明
「南京錠を誰にでも配る」という発想の転換が、インターネットを安全な場所にした。公開鍵暗号が実用化される前、安全な通信は「事前に鍵を交換できた相手」としかできなかった。今日、見知らぬサーバーと安全に通信できるのは、この仕組みのおかげだ。
関連記事
暗号化が使われているHTTPSのネットワーク基礎を理解したい方はこちら。
→ DNSとIPアドレスの仕組み・NAT・ルーティング
パスワード管理の実務的な考え方はこちら。
→ パスワードの使い回しを今すぐ自分に許しなさい
“`
