はじめに
インターネットでは、毎日さまざまな情報がやり取りされています。
例えば、ネットショップでは次のような情報を送受信します。
- ログイン情報
- 氏名や住所
- 注文内容
- 決済情報
- 顧客情報
これらの情報が第三者に盗み見られると、大きな問題になります。
そこで重要になるのが、**暗号化(Encryption)**です。
暗号化は、情報セキュリティの基本となる技術の1つです。
今回は、はちみつ屋さんがネットショップを運営する場面を例にしながら、暗号化の仕組みを学びましょう。
1. 暗号化とは
1-1. 暗号化の基本
**暗号化(Encryption)**とは、データを第三者が簡単には理解できない形式に変換することです。
例えば、次のようなメッセージがあるとします。
注文内容:はちみつ3個
このまま送信すると、通信を盗み見た第三者に内容を知られる可能性があります。
そこで、暗号化によって内容を変換します。
暗号化前
注文内容:はちみつ3個
↓
暗号化
↓
暗号化後
X7a9K2mP8q...
暗号化されたデータは、適切な鍵を持っていなければ、元の内容を読み取ることが困難になります。
1-2. 復号とは
**復号(Decryption)**とは、暗号化されたデータを元の形式に戻すことです。
元のメッセージ
│
▼
暗号化
│
▼
暗号化されたメッセージ
│
▼
復号
│
▼
元のメッセージ
暗号化と復号は、対になる処理です。
🍯 はちみつ屋さんで例えると
はちみつ屋さんが、お客様に秘密のレシピを送りたいとします。
そのまま手紙を送ると、途中で誰かに読まれてしまうかもしれません。
そこで、レシピを秘密のルールに従って読めない文字列に変換します。
お客様は、決められた鍵を使って元のレシピに戻します。
この仕組みが暗号化と復号です。
2. 暗号化に必要な要素
暗号化を理解するためには、次の5つの要素を押さえる必要があります。
| 要素 | 英語 | 内容 |
|---|---|---|
| 平文 | Plaintext | 暗号化する前のデータ |
| 暗号文 | Ciphertext | 暗号化されたデータ |
| 暗号アルゴリズム | Encryption Algorithm | データを暗号化するための計算手順 |
| 暗号鍵 | Cryptographic Key | 暗号化・復号に使用する情報 |
| 復号アルゴリズム | Decryption Algorithm | 暗号文を元の平文に戻す計算手順 |
それぞれ詳しく見ていきましょう。
2-1. 平文
**平文(Plaintext)**とは、暗号化されていない元のデータです。
例えば、
商品名:高級はちみつ
価格:1,500円
というデータが平文です。
2-2. 暗号文
**暗号文(Ciphertext)**とは、暗号化によって変換されたデータです。
暗号文は、適切な復号鍵がなければ元の情報を読み取ることが困難になるように作られます。
2-3. 暗号アルゴリズム
**暗号アルゴリズム(Encryption Algorithm)**とは、データを暗号化するための計算手順です。
代表的な暗号アルゴリズムには、次のものがあります。
- AES
- DES
- RSA
- Camellia
アルゴリズムによって、鍵の扱い方や処理方法が異なります。
2-4. 暗号鍵
**暗号鍵(Cryptographic Key)**とは、暗号化や復号に使用する情報です。
同じ暗号アルゴリズムを使用していても、鍵が異なれば暗号化結果は通常異なります。
暗号技術では、アルゴリズムそのものを秘密にするのではなく、鍵を適切に管理することが重要です。
2-5. 復号アルゴリズム
**復号アルゴリズム(Decryption Algorithm)**とは、暗号文から元の平文を復元するための計算手順です。
暗号方式に応じた鍵を利用して復号します。
3. 暗号化の基本構造
暗号化の流れを整理すると、次のようになります。
暗号鍵
│
▼
平文 ────────→ 暗号アルゴリズム
│
▼
暗号文
│
▼
復号アルゴリズム
▲
│
復号鍵
│
▼
平文
ここで重要なのは、暗号化に使用する鍵と復号に使用する鍵が、暗号方式によって異なるということです。
暗号化方式は、大きく次の3つに分けて学習します。
- 共通鍵暗号方式
- 公開鍵暗号方式
- ハイブリッド暗号方式
4. 共通鍵暗号方式
4-1. 共通鍵暗号方式とは
**共通鍵暗号方式(Symmetric-key Cryptography)**とは、暗号化と復号に同じ秘密の鍵を使用する暗号方式です。
この鍵を共通鍵と呼びます。
【送信者】 【受信者】
平文 暗号文
│ │
▼ ▼
共通鍵で暗号化 共通鍵で復号
│ │
▼ ▼
暗号文 ───────────────────→ 平文
同じ共通鍵を使用
送信者と受信者は、あらかじめ同じ鍵を共有しておく必要があります。
4-2. 共通鍵暗号方式の特徴
共通鍵暗号方式には、次の特徴があります。
メリット
- 暗号化・復号の処理が高速
- 大量のデータの暗号化に向いている
- 比較的少ない計算量で処理できる
デメリット
- 通信相手と秘密鍵を安全に共有する必要がある
- 通信相手が増えると鍵の管理が複雑になる
- 鍵が漏えいすると暗号化された情報を解読される危険がある
5. 鍵配送問題
5-1. 鍵配送問題とは
**鍵配送問題(Key Distribution Problem)**とは、共通鍵暗号方式で使用する秘密鍵を、通信相手に安全に渡すことが難しいという問題です。
例えば、はちみつ屋さんが秘密のレシピをお客様に送りたいとします。
暗号化して送るためには、はちみつ屋さんとお客様が同じ鍵を持っている必要があります。
しかし、その鍵をインターネット上でそのまま送ると、第三者に盗まれる可能性があります。
はちみつ屋さん
│
│ 共通鍵を送信
▼
インターネット
│
├── 攻撃者が鍵を盗む
│
▼
お客様
暗号文が安全でも、鍵を盗まれてしまえば意味がありません。
この問題を鍵配送問題と呼びます。
5-2. 共通鍵の数
共通鍵暗号方式では、通信相手ごとに異なる鍵を使用する場合があります。
例えば、3人がそれぞれ安全に通信する場合を考えます。
A ─── B
│ /
│ /
C
必要な鍵は次の3つです。
- AとBの共通鍵
- AとCの共通鍵
- BとCの共通鍵
つまり、3人では3個の鍵が必要です。
4人では6個、5人では10個になります。
5-3. 必要な鍵の数を求める公式
n人が、すべての相手と個別の共通鍵を使って通信する場合、必要な鍵の数は次の式で求められます。
[ \boxed{\frac{n(n-1)}{2}} ]
例題
10人がそれぞれ個別の共通鍵を使用して通信する場合、必要な鍵の数はいくつでしょうか。
[ \frac{10(10-1)}{2} ]
[ =\frac{10\times9}{2} ]
[ =\boxed{45} ]
答え:45個
試験でのポイント
共通鍵暗号方式では、通信する人数が増えると、必要な鍵の数が急速に増加します。
ただし、これは全員が互いに個別の鍵を共有する構成を前提とした計算です。
実際のシステムでは、鍵管理サーバーなどを利用して鍵管理を効率化する場合があります。
6. 共通鍵暗号方式の代表例
6-1. DES
**DES(Data Encryption Standard)**とは、古くから利用されていた共通鍵暗号方式です。
主な特徴は次のとおりです。
- 鍵長:56ビット
- ブロック長:64ビット
- ブロック暗号方式
DESは鍵長が短いため、現在では安全な暗号方式として使用するべきではありません。
6-2. 3DES
**3DES(Triple DES)**とは、DESの処理を3回適用する暗号方式です。
DESよりも安全性を高めるために利用されてきました。
ただし、現在では新規システムでの利用は推奨されず、AESなどへの移行が進んでいます。
6-3. AES
**AES(Advanced Encryption Standard)**とは、現在広く利用されている共通鍵暗号方式です。
AESでは、次の3種類の鍵長を使用できます。
| 方式 | 鍵長 |
|---|---|
| AES-128 | 128ビット |
| AES-192 | 192ビット |
| AES-256 | 256ビット |
AESのブロック長は、いずれも128ビットです。
AESは、通信の暗号化やストレージの暗号化など、さまざまな用途で利用されています。
6-4. Camellia
**Camellia(カメリア)**とは、日本で開発された共通鍵暗号方式です。
主な特徴は次のとおりです。
- 128ビットのブロック長
- 128・192・256ビットの鍵長
- 高い安全性と処理効率を目指して設計された暗号方式
7. ブロック暗号とストリーム暗号
共通鍵暗号方式は、データの処理方法によって大きく2つに分類できます。
7-1. ブロック暗号
**ブロック暗号(Block Cipher)**とは、データを一定の長さのブロック単位で暗号化する方式です。
元データ
┌────┬────┬────┐
│ A │ B │ C │
└────┴────┴────┘
│ │ │
▼ ▼ ▼
暗号化処理
│ │ │
▼ ▼ ▼
┌────┬────┬────┐
│ X │ Y │ Z │
└────┴────┴────┘
代表例は次のとおりです。
- AES
- DES
- Camellia
実際には、複数ブロックを安全に処理するための暗号利用モードも重要です。
7-2. ストリーム暗号
**ストリーム暗号(Stream Cipher)**とは、データをビット単位やバイト単位などで連続的に暗号化する方式です。
代表例には次のものがあります。
- RC4
- ChaCha20
RC4は脆弱性が知られているため、現在は安全な用途で使用すべきではありません。
7-3. ブロック暗号とストリーム暗号の違い
| 項目 | ブロック暗号 | ストリーム暗号 |
|---|---|---|
| 処理単位 | 一定長のブロック | 連続するデータ |
| 代表例 | AES、DES | RC4、ChaCha20 |
| 特徴 | ブロック単位で処理 | 鍵ストリームなどを利用して処理 |
8. 公開鍵暗号方式
8-1. 公開鍵暗号方式とは
**公開鍵暗号方式(Public-key Cryptography)**とは、公開鍵と秘密鍵という2つの鍵を利用する暗号方式です。
この2つの鍵は、数学的に関連しています。
| 鍵 | 内容 |
|---|---|
| 公開鍵 | 他人に公開してよい鍵 |
| 秘密鍵 | 所有者だけが秘密に管理する鍵 |
公開鍵暗号方式では、一般的に次のように暗号化と復号を行います。
暗号化:受信者の公開鍵
復号:受信者の秘密鍵
8-2. 公開鍵暗号方式の仕組み
例えば、はちみつ屋さんがお客様に秘密のレシピを送りたいとします。
まず、お客様が公開鍵と秘密鍵のペアを作成します。
お客様は公開鍵をはちみつ屋さんに渡します。
はちみつ屋さんは、その公開鍵を使ってレシピを暗号化します。
【はちみつ屋さん】 【お客様】
平文
│
▼
お客様の公開鍵で暗号化
│
▼
暗号文 ───────────────→ 暗号文
│
▼
お客様の秘密鍵で復号
│
▼
平文
公開鍵は他人に知られても問題ありません。
一方、秘密鍵は厳重に管理する必要があります。
9. 公開鍵暗号方式の特徴
9-1. メリット
公開鍵暗号方式には、次のメリットがあります。
- 秘密鍵を通信相手に渡す必要がない
- 共通鍵暗号方式の鍵配送問題を緩和できる
- 公開鍵暗号技術はデジタル署名にも利用できる
9-2. デメリット
一方、次のデメリットがあります。
- 共通鍵暗号方式より処理負荷が大きい傾向がある
- 大量のデータを直接暗号化する用途には通常向かない
- 公開鍵が本当に通信相手のものか確認する必要がある
10. 公開鍵の信頼性
10-1. 公開鍵は誰のものなのか
公開鍵暗号方式では、公開鍵を他人に渡すことができます。
しかし、ここで問題があります。
例えば、はちみつ屋さんがお客様の公開鍵を受け取ったとします。
その公開鍵が、本当にお客様のものとは限りません。
攻撃者が自分の公開鍵を、お客様の公開鍵だと偽って渡す可能性があります。
はちみつ屋さん
│
│ お客様の公開鍵だと思って受け取る
▼
攻撃者の公開鍵
│
▼
攻撃者が復号できる暗号文を作成
この問題に対処するために、デジタル証明書や**PKI(公開鍵基盤)**などの仕組みが利用されます。
これらは第4記事「デジタル署名とPKI」で詳しく解説します。
11. 公開鍵暗号方式の鍵の数
公開鍵暗号方式では、利用者ごとに公開鍵と秘密鍵のペアを用意します。
例えば、3人が利用する場合です。
| 利用者 | 公開鍵 | 秘密鍵 |
|---|---|---|
| A | Aの公開鍵 | Aの秘密鍵 |
| B | Bの公開鍵 | Bの秘密鍵 |
| C | Cの公開鍵 | Cの秘密鍵 |
3人で合計6個の鍵が存在します。
11-1. 必要な鍵の数を求める公式
n人がそれぞれ1組の公開鍵と秘密鍵を持つ場合、必要な鍵の総数は次のとおりです。
[ \boxed{2n} ]
例題
10人が公開鍵暗号方式を利用する場合、必要な鍵の総数はいくつでしょうか。
[ 2\times10=\boxed{20} ]
答え:20個
11-2. 共通鍵暗号方式との比較
| 利用者数 | 共通鍵暗号方式 | 公開鍵暗号方式 |
|---|---|---|
| 2人 | 1個 | 4個 |
| 3人 | 3個 | 6個 |
| 4人 | 6個 | 8個 |
| 5人 | 10個 | 10個 |
| 10人 | 45個 | 20個 |
| 100人 | 4,950個 | 200個 |
※共通鍵暗号方式は全員が互いに個別の鍵を共有する場合、公開鍵暗号方式は各利用者が1組の鍵ペアを持つ場合の比較です。
試験でのポイント
利用者数をnとすると、
共通鍵暗号方式
[ \frac{n(n-1)}{2} ]
公開鍵暗号方式
[ 2n ]
となります。
この公式は計算問題として出題されることがあります。
12. 公開鍵暗号方式の代表例
12-1. RSA
RSAとは、代表的な公開鍵暗号技術の1つです。
名前は、開発者である次の3人の名前に由来します。
- Rivest
- Shamir
- Adleman
RSAは、大きな整数の素因数分解が困難であるという数学的性質を利用しています。
RSAは、暗号化やデジタル署名に利用できます。
ただし、実際には用途に応じて適切なパディング方式などを使用する必要があります。
12-2. 楕円曲線暗号
**楕円曲線暗号(ECC:Elliptic Curve Cryptography)**とは、楕円曲線上の数学的問題を利用する公開鍵暗号技術です。
RSAなどと比較して、同程度の安全性を比較的短い鍵で実現できる特徴があります。
代表的な関連技術には、次のものがあります。
| 技術 | 主な用途 |
|---|---|
| ECDH | 鍵共有 |
| ECDSA | デジタル署名 |
13. ハイブリッド暗号方式
13-1. ハイブリッド暗号方式とは
**ハイブリッド暗号方式(Hybrid Encryption)**とは、共通鍵暗号方式と公開鍵暗号方式を組み合わせた暗号方式です。
両者の長所を活用することが目的です。
共通鍵暗号方式は処理が高速ですが、鍵配送問題があります。
公開鍵暗号方式は秘密鍵を相手に渡す必要がありませんが、処理負荷が大きい傾向があります。
そこで、2つの方式を組み合わせます。
13-2. ハイブリッド暗号方式の仕組み
代表的な方式では、次の手順で通信を行います。
手順1:共通鍵を生成する
送信者が、データの暗号化に使用する共通鍵を生成します。
手順2:データを共通鍵で暗号化する
生成した共通鍵を使って、送信したいデータを暗号化します。
手順3:共通鍵を公開鍵で暗号化する
受信者の公開鍵を使用して、共通鍵を暗号化します。
手順4:暗号文を送信する
次の2つを受信者へ送信します。
- 共通鍵で暗号化したデータ
- 公開鍵で暗号化した共通鍵
手順5:受信者が共通鍵を復号する
受信者は、自分の秘密鍵を使用して共通鍵を復号します。
手順6:データを復号する
取り出した共通鍵を使用して、元のデータを復号します。
13-3. ハイブリッド暗号方式の図解
【送信者】
元データ
│
▼
共通鍵で暗号化
│
▼
暗号化データ ─────────────┐
│
共通鍵 │
│ │
▼ │
受信者の公開鍵で暗号化 │
│ │
▼ │
暗号化された共通鍵 │
│ │
└──────────┐ │
▼ ▼
【受信者】
│
▼
秘密鍵で共通鍵を復号
│
▼
共通鍵でデータを復号
│
▼
元データ
14. ハイブリッド暗号方式のメリット
ハイブリッド暗号方式には、次のメリットがあります。
① 高速にデータを暗号化できる
大量のデータを共通鍵暗号方式で処理するため、高速な暗号化が可能です。
② 共通鍵を安全に保護できる
共通鍵を公開鍵暗号方式で保護することで、鍵配送問題に対応できます。
③ 両方の方式の長所を活用できる
公開鍵暗号方式の鍵管理上の利点と、共通鍵暗号方式の処理性能を組み合わせられます。
15. ハイブリッド暗号方式の利用例
15-1. HTTPSとTLS
Webサイトとの安全な通信には、**TLS(Transport Layer Security)**が利用されます。
TLSでは、公開鍵暗号技術を使った認証や鍵共有と、共通鍵暗号方式によるデータ保護を組み合わせています。
ただし、現代のTLSでは、先ほどの図のように共通鍵をRSAで直接暗号化して送るとは限りません。
例えばTLS 1.3では、一般にECDHEなどの鍵共有技術を利用して、通信に必要な共通鍵を導出します。
重要なのは、通信データそのものは高速な共通鍵暗号方式で保護するという点です。
16. 3つの暗号方式を比較
ここまで学んだ暗号方式を整理しましょう。
| 項目 | 共通鍵暗号方式 | 公開鍵暗号方式 | ハイブリッド暗号方式 |
|---|---|---|---|
| 使用する鍵 | 共通鍵 | 公開鍵・秘密鍵 | 両方を利用 |
| 処理速度 | 高速 | 比較的低速 | 大量データを高速に処理 |
| 鍵配送 | 課題がある | 秘密鍵の配送は不要 | 公開鍵技術で鍵を保護 |
| 大量データ | 得意 | 通常は不向き | 得意 |
| 代表例 | AES | RSA | TLSなどで利用される構成 |
17. 暗号化とハッシュ化の違い
暗号化と混同しやすい技術に、ハッシュ化があります。
17-1. ハッシュ化とは
**ハッシュ化(Hashing)**とは、データから一定の長さのハッシュ値を計算する処理です。
代表的なハッシュ関数には、SHA-256などがあります。
17-2. 暗号化とハッシュ化の比較
| 項目 | 暗号化 | ハッシュ化 |
|---|---|---|
| 主な目的 | 情報の機密性を確保する | データの特徴を表す値を計算する |
| 元のデータへの復元 | 適切な鍵で復号できる | 通常、ハッシュ値から直接復元できない |
| 鍵 | 一般に使用する | 通常のハッシュ関数では使用しない |
| 代表例 | AES、RSA | SHA-256、SHA-3 |
ハッシュ化は、暗号化とは異なる技術です。
ハッシュ関数については、デジタル署名の記事でも詳しく扱います。
18. 暗号化を利用する際の注意点
暗号化は強力なセキュリティ対策ですが、暗号化するだけで情報が完全に守られるわけではありません。
特に、次の点が重要です。
18-1. 鍵を適切に管理する
どれほど強力な暗号方式でも、秘密鍵が漏えいすれば情報を読み取られる危険があります。
鍵の保管やアクセス権限の管理が必要です。
18-2. 古い暗号方式を使用しない
DESやRC4など、安全性に問題がある暗号方式は使用すべきではありません。
18-3. 暗号化だけでは改ざんを防げない
暗号化は主に機密性を守る技術です。
データの完全性や真正性も確認したい場合は、MACや認証付き暗号、デジタル署名などを組み合わせます。
例えば、AES-GCMは暗号化と改ざん検知を組み合わせた認証付き暗号方式です。
19. 応用情報技術者試験の重要ポイント
| 用語 | 覚えるポイント |
|---|---|
| 平文 | 暗号化前のデータ |
| 暗号文 | 暗号化後のデータ |
| 暗号鍵 | 暗号化・復号に使用する情報 |
| 共通鍵暗号方式 | 同じ秘密鍵を使用 |
| 公開鍵暗号方式 | 公開鍵と秘密鍵を使用 |
| ハイブリッド暗号方式 | 共通鍵暗号と公開鍵暗号を組み合わせる |
| 鍵配送問題 | 共通鍵を安全に共有する問題 |
| DES | 56ビット鍵の古い共通鍵暗号 |
| AES | 代表的な共通鍵暗号 |
| RSA | 代表的な公開鍵暗号技術 |
| ECC | 楕円曲線を利用する公開鍵暗号技術 |
| ブロック暗号 | 一定長のブロック単位で処理 |
| ストリーム暗号 | 連続するデータを処理 |
20. 練習問題
問題1:暗号化の基本
暗号化される前の元のデータを何と呼ぶでしょうか。
A. 暗号文
B. 平文
C. 公開鍵
D. ハッシュ値
解答
正解:B
暗号化される前のデータを平文と呼びます。
問題2:共通鍵暗号方式
共通鍵暗号方式の特徴として、最も適切なものはどれでしょうか。
A. 暗号化と復号に異なる鍵を使用する
B. 暗号化と復号に同じ鍵を使用する
C. 暗号化に公開鍵を使用する
D. 秘密鍵を使用しない
解答
正解:B
共通鍵暗号方式では、暗号化と復号に同じ秘密鍵を使用します。
問題3:公開鍵暗号方式
AさんがBさんに秘密のメッセージを送信する場合、公開鍵暗号方式で暗号化に使用する鍵はどれでしょうか。
A. Aさんの公開鍵
B. Aさんの秘密鍵
C. Bさんの公開鍵
D. Bさんの秘密鍵
解答
正解:C
Bさんだけが復号できるようにするため、Bさんの公開鍵を使用して暗号化します。
問題4:鍵の数
10人が全員と個別の共通鍵を使用して通信する場合、必要な鍵の数はいくつでしょうか。
A. 10個
B. 20個
C. 45個
D. 100個
解答
正解:C
[ \frac{10(10-1)}{2}=45 ]
したがって45個です。
問題5:公開鍵暗号方式の鍵の数
10人がそれぞれ公開鍵と秘密鍵を1組ずつ持つ場合、必要な鍵の総数はいくつでしょうか。
A. 10個
B. 20個
C. 45個
D. 100個
解答
正解:B
[ 2\times10=20 ]
したがって20個です。
問題6:暗号アルゴリズム
次のうち、共通鍵暗号方式に分類されるものはどれでしょうか。
A. RSA
B. AES
C. ECDSA
D. ECDH
解答
正解:B
AESは共通鍵暗号方式です。
問題7:ハイブリッド暗号方式
ハイブリッド暗号方式の特徴として、最も適切なものはどれでしょうか。
A. 公開鍵暗号方式だけで大量のデータを暗号化する
B. 共通鍵暗号方式だけで鍵を配送する
C. 共通鍵暗号方式と公開鍵暗号方式の長所を組み合わせる
D. 暗号鍵を一切使用しない
解答
正解:C
ハイブリッド暗号方式では、共通鍵暗号方式の高速性と公開鍵暗号方式の利点を組み合わせます。
まとめ
今回は、暗号化の基本と3つの暗号方式について学びました。
特に重要なのは、次のポイントです。
- 暗号化:データを第三者が理解しにくい形式に変換する
- 平文:暗号化前のデータ
- 暗号文:暗号化後のデータ
- 共通鍵暗号方式:同じ秘密鍵で暗号化・復号する
- 公開鍵暗号方式:公開鍵と秘密鍵を利用する
- ハイブリッド暗号方式:両方の方式を組み合わせる
- AES:代表的な共通鍵暗号方式
- RSA:代表的な公開鍵暗号技術
- 鍵配送問題:共通鍵を安全に共有するための課題
🍯 はちみつメモ
暗号化は「大切な情報を、鍵を持っている人だけが読めるようにする仕組み」!
はちみつ屋さんの秘密のレシピを送るなら、
共通鍵暗号方式
→ はちみつ屋さんとお客様が、同じ秘密の鍵を持つ方法。
公開鍵暗号方式
→ お客様が公開した鍵で暗号化し、お客様だけが持つ秘密鍵で復号する方法。
ハイブリッド暗号方式
→ データは高速な共通鍵暗号で暗号化し、共通鍵の保護には公開鍵暗号技術を利用する方法。
応用情報技術者試験では、**「鍵の使い方」「処理速度」「鍵配送問題」「必要な鍵の数」**を重点的に覚えておこう!