この包括的なガイドでは、現代のセキュアな通信システムで使用される高度な暗号化の概念、アルゴリズム、プロトコルについて解説します。開発者やセキュリティプロフェッショナルに最適です。
注意: このガイドは基本的な暗号化の概念に精通していることを前提としています。初心者の方は、まず初心者向けセキュリティのヒントをご覧ください。
共通鍵暗号化アルゴリズム
AES (Advanced Encryption Standard)
共通鍵暗号化のゴールドスタンダードであり、2001年に米国政府により採用されました。
主な特徴
- 鍵サイズ: 128、192、または256ビット
- ブロックサイズ: 128ビット
- ラウンド数: 鍵サイズに応じて10、12、または14
- パフォーマンス: 高度に最適化され、ハードウェアアクセラレーションが利用可能
一般的なモード
- GCM (Galois/Counter Mode): 認証付き暗号化、ほとんどのユースケースで推奨
- CBC (Cipher Block Chaining): 従来のモード、別途MACが必要
- CTR (Counter): 並列化可能、一部のプロトコルで使用
ChaCha20
Daniel J. Bernsteinによって設計された現代的なストリーム暗号で、AESの代替として人気が高まっています。
利点
- ハードウェアアクセラレーションのないデバイスではAESより高速
- 定数時間実装(タイミング攻撃に耐性)
- シンプルな設計で、安全な実装が容易
- 認証付き暗号化のためにPoly1305と併用
公開鍵暗号化
RSA (Rivest-Shamir-Adleman)
鍵交換とデジタル署名に広く使用されています。
主な考慮事項
- 最小鍵サイズ: 2048ビット(長期的なセキュリティには4096ビット推奨)
- パフォーマンス: 共通鍵暗号化と比較して計算コストが高い
- パディングスキーム: 暗号化にはOAEP、署名にはPSSを使用
- 量子コンピュータの脅威: 量子コンピュータに対して脆弱(Shorのアルゴリズム)
Elliptic Curve Cryptography (ECC)
より小さな鍵サイズで同等のセキュリティを提供する、RSAのより効率的な代替手段です。
人気の楕円曲線
- Curve25519: ECDH鍵交換用に設計され、広く採用されている
- Ed25519: デジタル署名用、SSH、GPGで使用
- P-256 (secp256r1): NIST標準、広くサポートされている
- P-384、P-521: より高いセキュリティレベル
RSAに対する利点
- 256ビットECC ≈ 3072ビットRSAのセキュリティ
- より高速な計算
- より小さな鍵と署名
- 帯域幅とストレージ要件の低減
鍵交換プロトコル
Diffie-Hellman (DH)
安全でないチャネル上で2者間が共有秘密を確立できるようにします。
バリエーション
- Classic DH: オリジナルの実装
- ECDH: 楕円曲線版(より効率的)
- X25519: Curve25519を使用した現代的なECDH
Perfect Forward Secrecy (PFS)
長期鍵が漏洩した場合でも、過去の通信が安全であることを保証します。
実装
- 各セッションごとに一時的な鍵ペアを生成
- 使用後にセッション鍵を破棄
- TLS 1.3、Signal Protocolなどで使用
ハッシュ関数
SHA-2ファミリー
- SHA-256: 256ビット出力、広く使用されている
- SHA-384、SHA-512: より高いセキュリティレベル
- 用途: デジタル署名、証明書検証、パスワードハッシング(適切な技術を使用)
SHA-3 (Keccak)
- SHA-2とは異なる構造(スポンジ関数)
- 長さ拡張攻撃に耐性
- 高いセキュリティマージンを必要とするアプリケーションに適している
BLAKE2/BLAKE3
- SHA-2やSHA-3より高速
- 暗号学的に安全
- BLAKE3: 高度に並列化可能、大容量データに最適
Key Derivation Functions (KDFs)
PBKDF2 (Password-Based Key Derivation Function 2)
- 目的: パスワードから暗号鍵を導出
- 反復回数: 最低100,000回(OWASP推奨)
- ユースケース: パスワード保存、鍵導出
Argon2
Password Hashing Competition(2015年)の優勝者で、新しいアプリケーションに推奨されています。
バリエーション
- Argon2id: ハイブリッド(ほとんどのユースケースで推奨)
- Argon2i: サイドチャネル攻撃に対して最適化
- Argon2d: GPU攻撃に対する最大の耐性
scrypt
- メモリハード関数(ハードウェア攻撃に耐性)
- Litecoin、Tarsnapで使用
- セキュリティと互換性の良いバランス
Message Authentication Codes (MACs)
HMAC (Hash-based MAC)
- ハッシュ関数と秘密鍵を組み合わせる
- 認証と完全性を提供
- 一般的: HMAC-SHA256、HMAC-SHA512
Poly1305
- ワンタイム認証子
- 認証付き暗号化のためにChaCha20と併用
- 高速で定数時間
認証付き暗号化
重要性
暗号化だけでは完全性を保証できません。攻撃者は検出されることなく暗号文を変更できる可能性があります。認証付き暗号化はこの問題を解決します。
AEAD (Authenticated Encryption with Associated Data)
- AES-GCM: 最も広くサポートされている
- ChaCha20-Poly1305: モバイルデバイスでより優れている
- AES-CCM: 一部のワイヤレスプロトコルで使用
デジタル署名
RSA署名
- パディング: PSS (Probabilistic Signature Scheme)を使用
- ハッシュ関数: SHA-256以上
- 鍵サイズ: 最低2048ビット
ECDSA (Elliptic Curve Digital Signature Algorithm)
- RSAより小さな署名
- 慎重なnonce生成が必要(弱いRNG = 鍵の漏洩)
- 決定的バリアント(RFC 6979)推奨
Ed25519
- 決定的(RNG不要)
- 高速な署名生成と検証
- 小さな署名(64バイト)
- サイドチャネル攻撃に耐性
現代的なプロトコル
Signal Protocol
Signal、WhatsApp、Facebook Messengerで使用されている最先端のエンドツーエンド暗号化プロトコルです。
主な特徴
- Double Ratchet: 鍵を継続的に更新
- Perfect Forward Secrecy: 過去のメッセージが安全に保たれる
- Post-Compromise Security: 鍵の漏洩から回復
- 非同期: 受信者がオフラインでも動作
TLS 1.3
Transport Layer Securityプロトコルの最新バージョンです。
改善点
- 弱いアルゴリズムと暗号スイートを削除
- 常にForward Secrecyを提供
- より高速なハンドシェイク(1-RTT、0-RTTオプション)
- 暗号化されたServer Hello
Noise Protocol Framework
セキュアな通信システムを構築するための現代的な暗号プロトコルフレームワークです。
アプリケーション
- WireGuard VPN
- Lightning Network
- I2Pメッセージング
Post-Quantum Cryptography
脅威
量子コンピュータはShorのアルゴリズムを使用してRSAとECCを破ることができます。共通鍵アルゴリズムは影響が少ないですが、より大きな鍵が必要です。