メインコンテンツまでスキップ

暗号化入門 - なぜ暗号化が必要なのか

このドキュメントの目的

暗号化(Cryptography) の基礎概念を理解し、アイデンティティ管理やセキュアな通信でどのように活用されるかを学ぶことが目標です。


暗号化とは

暗号化(Encryption):

  • データを第三者に読めない形式に変換すること
  • 正しい鍵を持つ者だけが元のデータを復元できる
  • 機密性(Confidentiality) を確保する技術
平文(Plaintext)     →  暗号化(Encrypt)  →  暗号文(Ciphertext)
"Hello, World!" 鍵を使用 "X8f2kL9..."

暗号文(Ciphertext) → 復号(Decrypt) → 平文(Plaintext)
"X8f2kL9..." 鍵を使用 "Hello, World!"

なぜ暗号化が必要か

1. 通信の保護

インターネット上の通信は誰でも傍受できる可能性がある

[ユーザー] ─── パスワード送信 ───→ [サーバー]

[攻撃者] ← 傍受されたら危険!

暗号化すると:
[ユーザー] ─── 暗号化されたデータ ───→ [サーバー]

[攻撃者] ← 読めない!

: HTTPS(TLS/SSL)による通信の暗号化


2. データの保護

保存されたデータが盗まれた場合:

暗号化なし:
データベース流出 → パスワードがそのまま見える → 被害拡大

暗号化あり:
データベース流出 → 暗号化されている → 解読できない

: パスワードのハッシュ化、データベースの暗号化


3. 認証と改ざん検知

送られてきたデータが本物かどうか確認:

[銀行] ─── 振込指示 ───→ [受信者]

[攻撃者] ← 途中で金額を改ざんされたら?

デジタル署名を使うと:
- 送信者が本物であることを確認
- データが改ざんされていないことを確認

: JWT署名、電子証明書


暗号化の3つの柱

1. 機密性(Confidentiality)

  • 許可された者だけが情報を見られる
  • 実現方法: 暗号化

2. 完全性(Integrity)

  • 情報が改ざんされていないことを保証
  • 実現方法: ハッシュ関数、MAC

3. 認証(Authentication)

  • 相手が本物であることを確認
  • 実現方法: デジタル署名、証明書
┌─────────────────────────────────────────────────────────┐
│ CIA トライアド │
├─────────────────────────────────────────────────────────┤
│ │
│ Confidentiality(機密性) │
│ 暗号化 │
│ △ │
│ / \ │
│ / \ │
│ / \ │
│ Integrity / \ Authentication │
│ (完全性) ◁─────────▷ (認証) │
│ ハッシュ デジタル署名 │
│ │
└─────────────────────────────────────────────────────────┘

暗号化の種類

共通鍵暗号(対称暗号)

同じ鍵で暗号化・復号する

[送信者] [受信者]
│ │
│ ─── 共通の秘密鍵を共有 ───→ │
│ │
│ ─── 鍵で暗号化したデータ ───→ │
│ │
鍵で復号

メリット: 高速
デメリット: 鍵の共有が難しい

代表例: AES、ChaCha20


公開鍵暗号(非対称暗号)

2つの鍵(公開鍵・秘密鍵)を使う

[送信者] [受信者]
│ │
│ ←── 公開鍵を公開 ───────── │
│ │
│ ─── 公開鍵で暗号化 ───→ │
│ │
秘密鍵で復号
(秘密鍵は自分だけが持つ)

メリット: 鍵の共有が容易
デメリット: 処理が遅い

代表例: RSA、ECDSA、Ed25519


ハイブリッド暗号

実際のシステムでは両方を組み合わせる

1. 公開鍵暗号で共通鍵を安全に共有
2. 共通鍵暗号で実際のデータを暗号化

[送信者] [受信者]
│ │
│ ←── 公開鍵 ────────────── │
│ │
│ ─── 公開鍵で暗号化した共通鍵 → │
│ │
│ ─── 共通鍵で暗号化したデータ → │
│ │
秘密鍵で共通鍵を復号
共通鍵でデータを復号

: TLS/HTTPS、SSH


アイデンティティ管理での暗号化

1. パスワード保護

パスワードをそのまま保存してはいけない!

❌ 悪い例: password123 をそのまま保存
⭕ 良い例: ハッシュ化して保存

bcrypt("password123") → "$2b$12$..."

2. トークンの署名

JWTにデジタル署名を付ける

ヘッダー.ペイロード.署名

署名により:
- 発行者が本物であることを確認
- 内容が改ざんされていないことを確認

3. 通信の暗号化

OAuth/OIDCでは必ずHTTPS(TLS)を使用

[ブラウザ] ── HTTPS ──→ [認可サーバー]

TLS暗号化

傍受されても読めない

学習の流れ

このセクションでは以下を学びます:

ドキュメント内容
01-symmetric-encryption共通鍵暗号(AES等)
02-asymmetric-encryption公開鍵暗号(RSA、ECDSA等)
03-hash-functionsハッシュ関数(SHA-256、bcrypt等)
04-digital-signaturesデジタル署名
05-key-management鍵管理と実践

重要な用語

用語説明
平文(Plaintext)暗号化前の元のデータ
暗号文(Ciphertext)暗号化後のデータ
鍵(Key)暗号化・復号に使う秘密の値
暗号化(Encryption)平文を暗号文に変換
復号(Decryption)暗号文を平文に戻す
ハッシュ(Hash)データを固定長の値に変換(一方向)
署名(Signature)データの真正性を証明

まとめ

暗号化は情報セキュリティの基盤:

  1. 機密性: 暗号化でデータを保護
  2. 完全性: ハッシュで改ざんを検知
  3. 認証: 署名で本物であることを確認

次のドキュメントでは、共通鍵暗号について詳しく学びます。