【情報セキュリティマネジメント試験対策】暗号化について① 共通鍵と公開鍵とは



4月末に情報セキュリティマネジメント試験を受験したくて毎日勉強していますが、どうしても「暗号化」のところが理解できません。
難しい・・・。

なので、わかるようになるまで調べ尽くそうと思います。 

まずは「小学生でもわかるように説明して！」とchatGPTさんにお願いして、
共通鍵と公開鍵の違いについて説明してもらいました！

:::note info
小学生でもわかる！共通鍵と公開鍵の違い

👦 「鍵って何？」
🔑 「鍵（暗号鍵）」は、秘密のメッセージを守るために使うものだよ！
メッセージを暗号にする（鍵をかける）時と、元に戻す（鍵を開ける）時に使うよ。

＜共通鍵暗号方式（秘密の箱と鍵）＞

💡 イメージ：宝箱と1本の鍵
	•	みくちゃんと友達が「秘密の宝箱」を使ってお手紙を交換するとするよ。
	•	その宝箱には1本の鍵しかない！（= 共通鍵）

🔒 メッセージを送るとき
	1.	みくちゃんが秘密の手紙を宝箱に入れる
	2.	鍵をかけて 友達に渡す

🔑 メッセージを読むとき
3. 友達は、みくちゃんと同じ鍵で宝箱を開ける
4. 手紙を読める！

📌 ポイント！
✅ 1つの鍵をみんなで共有する（＝共通鍵）
❌ 鍵が盗まれたら大変！誰でも宝箱を開けられる💦
　

＜公開鍵暗号方式（郵便ポストと鍵）＞

💡 イメージ：郵便ポストとカギ
	•	みくちゃんが家の前にポストを置くよ。
	•	誰でも手紙を入れられるけど、ポストを開けられるのはみくちゃんだけ！

📩 メッセージを送るとき
	1.	みくちゃんの友達がポストに手紙を入れる（= 公開鍵で暗号化）
	2.	一度入れたら、誰も開けられない！（泥棒でも開けられない）

🔑 メッセージを読むとき
3. みくちゃんだけが持っている**秘密の鍵（秘密鍵）**でポストを開ける
4. 手紙を読める！

📌 ポイント！
✅ 「ポスト（公開鍵）」は誰でも使えるけど、「開ける鍵（秘密鍵）」は本人だけが持っている
✅ 鍵がバレても安全！秘密鍵がないと読めないから！

＜📌 どっちを使うの？＞

💡 「速くてシンプルな共通鍵」 + 「安全な公開鍵」 の組み合わせがよく使われるよ！
例えば、ネットショッピングのカード情報を守るときは、最初に公開鍵方式で安全に共通鍵を送るんだよ！✨ 
:::


ここからは大人向けの解説です。
 
:::note info
＜共通鍵暗号方式（秘密鍵暗号方式）＞

🔑 「同じ鍵」で暗号化と復号をする方法

＜特徴＞
	•	送信者と受信者が 同じ鍵（共通鍵） を使ってデータを暗号化・復号する。
	•	処理が 速い ので、大量のデータを暗号化するときに向いている。
	•	ただし、鍵が第三者に盗まれると内容がバレる ため、安全に鍵をやりとりする方法が課題。

＜具体例＞

📦 宅配便の鍵付きボックスを想像しよう！
	1.	鍵付きボックス（共通鍵）を送信者と受信者が持っている。
	2.	送信者はボックスにデータを入れて鍵をかける（暗号化）。
	3.	受信者は同じ鍵でボックスを開ける（復号）。

＜問題点＞
👉 どのようにして「安全に」共通鍵を渡すのか？
👉 もし誰かが鍵をコピーしたら、データを盗み見られてしまう！

＜代表的な共通鍵暗号の例＞
	•	AES（高速で安全な暗号方式）
	•	DES（昔よく使われたが現在は安全性が低い）
:::    

:::note info
＜公開鍵暗号方式（非対称鍵暗号方式）＞

🔑 「異なる鍵」を使って暗号化と復号をする方法

＜特徴＞
	•	「公開鍵」と「秘密鍵」のペア を使う。
	•	片方の鍵で暗号化すると、もう片方の鍵でしか復号できない。
	•	鍵をやりとりする必要がないので、安全に通信できる。
	•	ただし、共通鍵暗号より処理が重い（時間がかかる）。

＜具体例＞

📬 郵便ポストを想像しよう！
	1.	公開鍵 は「誰でも使えるポストの投入口」。
	2.	送信者は受信者の公開鍵（ポスト）を使って手紙を入れる（暗号化）。
	3.	受信者だけが持つ秘密鍵（ポストの鍵）で手紙を取り出せる（復号）。

＜ポイント＞
👉 「公開鍵」はみんなに公開してもOK！
👉 「秘密鍵」は持ち主しか知らないので、安全！

＜代表的な公開鍵暗号の例＞
	•	RSA（多くのウェブサイトやVPNで使われている）
	•	ECC（RSAよりも計算量が少なく、安全な方式）    
:::

<table>
  <caption>HTMLの要素</caption>
  <thead>
    <tr>
      <th>方式</th> <th>鍵の種類</th><th>処理速度</th><th>安全性</th><th>主な用途</th>
    </tr>
  </thead>
  <tr>
    <td>共通鍵暗号</td><td>1つの鍵（送信者と受信者が同じ鍵を使う）</td><td>速い</td><td>鍵の受け渡しが危険</td><td>大量のデータの暗号化（ファイルの暗号化など）</td>
  </tr>
  <tr>
    <td>公開鍵暗号</td> <td>2つの鍵（公開鍵と秘密鍵）</td><td>遅い</td><td>安全に鍵を共有できる</td><td>鍵交換・デジタル署名・SSL通信</td>
  </tr>
</table>

:::note info　
実際には「ハイブリッド方式」がよく使われる！

📡 インターネットでの通信（SSL/TLS）
	1.	まず公開鍵暗号方式を使って「共通鍵」を安全に送る。
	2.	その後、共通鍵暗号方式でデータをやりとりする（高速化のため）。
:::

:::note info 
まとめ
	•	共通鍵暗号方式 → 速いけど、鍵の管理が難しい
	•	公開鍵暗号方式 → 鍵の管理は安全だけど、処理が重い
	•	実際のシステムでは 両方を組み合わせたハイブリッド方式 を使うことが多い 
:::

:::note alert 
●「共通鍵暗号方式を用いて通信を暗号化するときは、送信者と受信者で異なる鍵を用いるが通信相手にそれぞれの鍵を知らせる必要はない。」
○か×か？
:::


共通鍵暗号方式では、送信者と受信者は同じ鍵（共通鍵）を使用します。そのため、送信者と受信者の間で同じ鍵を共有する必要があるのがポイントです。

 
<共通鍵暗号方式の流れ>

	1.	送信者と受信者が同じ共通鍵を持つ（事前に共有する必要がある）。
	2.	送信者は共通鍵を使ってデータを暗号化する。
	3.	受信者は同じ共通鍵を使ってデータを復号する。

つまり、異なる鍵を使うわけではなく、同じ鍵を使うので、「通信相手にそれぞれの鍵を知らせる必要はない」という説明は誤りになります。

 　
＜共通鍵暗号方式の課題＞

共通鍵暗号方式の最大の課題は、
「どうやって安全に共通鍵を送信相手と共有するか？」 という点です。

もし悪意のある第三者に共通鍵が盗まれると、暗号化した通信内容がすべて解読されてしまうため、共通鍵の受け渡しには特別な仕組み（例えば公開鍵暗号方式を併用する）を使うことが多いです。

:::note warn
正しい説明
「共通鍵暗号方式では、送信者と受信者は同じ鍵を用いる。そのため、通信相手と事前に共通鍵を安全に共有する必要がある。」 
:::

 
:::note alert
「公開鍵暗号方式で通信文を暗号化して内容を秘密にした通信をする時には、複合鍵を公開することによって、鍵管理の手間を減らす。」
○か×か。
:::

 いいえ、その説明は間違いです。

公開鍵暗号方式の正しい使い方

公開鍵暗号方式では、「暗号化に使う鍵（公開鍵）」と「復号に使う鍵（秘密鍵）」が異なるのが特徴です。

**通信文を暗号化して内容を秘密にする場合（＝機密通信）**は、以下の手順になります。

	1.	受信者が「公開鍵」と「秘密鍵」のペアを持つ。
	2.	受信者の公開鍵を送信者に共有する（これは公開されていてもOK）。
	3.	送信者が受信者の公開鍵を使って暗号化する。
	4.	受信者が秘密鍵を使って復号する。

なぜ「復号鍵（秘密鍵）」を公開してはいけないのか？
	•	秘密鍵を公開してしまうと、誰でも暗号文を復号できてしまうため、通信の秘密が守られなくなります。
	•	公開するのは「公開鍵」のみであり、「秘密鍵」は受信者だけが持っている必要があります。 

鍵管理の手間を減らす仕組み

確かに公開鍵暗号方式は、共通鍵暗号方式と比べて「鍵の共有」の手間が少なくなりますが、それは**「公開鍵」を公開することで送信者が自由に暗号化できるから」**であり、秘密鍵を公開するわけではありません。

:::note warn
正しい説明
「公開鍵暗号方式では、受信者の公開鍵を公開し、送信者がそれを使って暗号化することで、安全な通信を行う。秘密鍵は受信者のみが保持し、復号の際に使用する。」
:::

:::note alert
「公開鍵暗号方式では、署名に用いる鍵を公開しておく必要がある。」○か×か。
:::

いいえ、その説明は間違いです。

電子署名における鍵の使い方

公開鍵暗号方式を使った電子署名では、署名には秘密鍵を使い、検証には公開鍵を使うのが正しい方法です。

電子署名の流れ

	1.	送信者（署名者）が自分の秘密鍵でデータに署名をする。
	2.	受信者（検証者）は、送信者の公開鍵を使って署名を検証する。

なぜ署名に使う鍵（秘密鍵）を公開してはいけないのか？

	•	秘密鍵は本人しか持っていないことが重要だから。
	•	もし秘密鍵を公開してしまうと、誰でも署名を作成できてしまい、なりすましが可能になってしまう。 

:::note warn
正しい説明
「公開鍵暗号方式では、電子署名の検証に用いる鍵（公開鍵）を公開し、署名には秘密鍵を使用する。」
:::

:::note alert
「AESは公開鍵暗号方式、RSAは共通鍵暗号方式の一種である。」
○か×か。
:::

いいえ、その説明は間違いです。

AESとRSAの分類
	•	AES（Advanced Encryption Standard）
→ 共通鍵暗号方式（＝秘密鍵暗号方式）
→ 送信者と受信者が同じ鍵を使って暗号化・復号を行う
　
	•	RSA（Rivest-Shamir-Adleman）
→ 公開鍵暗号方式
→ 公開鍵で暗号化し、秘密鍵で復号する（または逆に秘密鍵で署名し、公開鍵で検証する）

:::note warn
正しい説明
「AESは共通鍵暗号方式の一種であり、RSAは公開鍵暗号方式の一種である。」
:::

:::note alert
「公開鍵暗号方式を通信内容の秘匿に使用する場合は、暗号化に使用する鍵を秘密にして、復号に使用する鍵を公開する。」
○か×か。
:::
いいえ、その説明は間違いです。

公開鍵暗号方式で通信内容を秘匿する場合
	•	送信者は 受信者の「公開鍵」 で暗号化する
	•	受信者は 自分の「秘密鍵」 で復号する

つまり、暗号化に使う鍵（公開鍵）は公開し、復号に使う鍵（秘密鍵）は秘密にする のが正しいです。

 間違いのポイント

	「暗号化に使用する鍵を秘密にして、復号に使用する鍵を公開する」

🔺 誤り：暗号化に使う鍵を秘密にするのは逆
✅ 正しくは「暗号化に使う鍵（公開鍵）を公開し、復号に使う鍵（秘密鍵）を秘密にする」

:::note warn
正しい説明
「公開鍵暗号方式では、通信内容の秘匿のために暗号化には受信者の公開鍵を使用し、復号には受信者の秘密鍵を使用する。」
:::
:::note alert
「ディジタル署名に公開鍵暗号方式が使用されることはなく、共通鍵暗号方式が使用される。」
○か×か。
:::

いいえ、間違いです。

ディジタル署名には 公開鍵暗号方式が使用されます。共通鍵暗号方式はディジタル署名には使われません。

＜ディジタル署名の仕組み＞

	1.	署名の作成（送信者側）
	•	送信者は、メッセージのハッシュ値を求める
	•	そのハッシュ値を 送信者の秘密鍵で暗号化（署名生成）
	•	署名と元のメッセージを送信する
	2.	署名の検証（受信者側）
	•	受信者は、メッセージのハッシュ値を求める
	•	受け取った署名を 送信者の公開鍵で復号 し、元のハッシュ値を取得
	•	それらが一致すれば、送信者が確かに署名したことが証明される 
＜共通鍵暗号方式がディジタル署名に使えない理由＞

	•	共通鍵暗号方式では、送信者と受信者が同じ鍵を持つため、誰が署名したのかを証明できない
	•	公開鍵暗号方式なら、送信者だけが秘密鍵を持つため、送信者本人の署名だと証明できる
    
:::note warn
＜正しい説明＞

❌ 「ディジタル署名に公開鍵暗号方式が使用されることはなく、共通鍵暗号方式が使用される。」
✅ 「ディジタル署名には公開鍵暗号方式が使用され、送信者の秘密鍵で署名し、受信者は公開鍵で検証する。」
:::

また共通鍵と公開鍵についてわからないことが出てきたら
この記事の続きを書こうと思います。