もくじ
暗号化してからMACが重要な理由とその背景
現代のデジタル通信において、データの機密性と完全性を同時に保証するためには、暗号化とMAC(Message Authentication Code)の適切な組み合わせが不可欠です。特にEncrypt-then-MAC(暗号化してからMACを適用)のアプローチが最も安全な方法として推奨されています。この手法がなぜ重要かを理解するためには、暗号化と認証の相互作用を深く分析する必要があります。
1. 暗号化とMACの基本概念
暗号化はデータの機密性を保つための技術で、第三者による内容の盗聴を防ぎます。一方MACはデータの完全性と認証を提供し、改ざんの検出と送信元の正当性を確認します。
- 機密性:AESやChaCha20などの暗号アルゴリズムで実現
- 完全性:HMAC-SHA256などのMACアルゴリズムで保証
- 認証:共有鍵を使ったMAC計算で送信者を特定
2. 3つの主要な組み合わせ方式
2.1 MAC-then-Encrypt(TLSで採用)
平文にMACを計算してから暗号化する方式です。TLS 1.2までで使用されていましたが、以下の課題があります:
- 復号しないとMAC検証が不可能
- パディングオラクル攻撃のリスク
- 改ざんされた暗号文を復号処理する必要あり
# 疑似コード例
mac = HMAC(key_mac, plaintext)
ciphertext = AES_encrypt(key_enc, plaintext + mac)
2.2 Encrypt-and-MAC(SSHで採用)
平文を暗号化すると同時に平文のMACを計算する方式:
- 暗号文とMACを別々に送信
- 機密性と完全性が独立
- 平文のMAC計算がリスク要因
+---------------+
| 平文 |
| 暗号化 → 暗号文 |
| MAC計算 → タグ |
+---------------+
2.3 Encrypt-then-MAC(IPSecで採用)
暗号化後に暗号文のMACを計算する最適な方式:
特徴 | メリット |
---|---|
復号前のMAC検証 | 改ざん検出が高速 |
暗号処理の分離 | セキュリティ境界が明確 |
攻撃表面積の最小化 | 悪意ある暗号文の処理を回避 |
ciphertext = AES_encrypt(key_enc, plaintext)
mac = HMAC(key_mac, ciphertext)
3. Encrypt-then-MACが優れる理由
3.1 暗号文の完全性保証
暗号化されたデータ自体の改ざんを検出可能。例えば、中間者攻撃者が暗号文を1ビット変更した場合:
- 受信側が最初にMACを検証
- 改ざんを即座に検知して破棄
- 復号処理が実行されないため安全
3.2 処理効率の最適化
不正なパケットを早期に破棄できるため:
- サーバーリソースの節約
- DDoS攻撃への耐性向上
- レイテンシの低減
3.3 セキュリティ境界の明確化
暗号化モジュールと認証モジュールを完全に分離:
コンポーネント | 責任範囲 |
---|---|
暗号化 | 機密性の維持 |
MAC | 完全性の検証 |
4. 歴史的な教訓と脆弱性事例
4.1 SSL/TLSのBEAST攻撃(2011年)
MAC-then-Encrypt方式の脆弱性を突いた攻撃。暗号文の改ざんにより平文の推測が可能に。
4.2 SSHのCPNI-957037脆弱性(2008年)
Encrypt-and-MAC方式における鍵導出の問題が原因で、情報漏洩の危険性が発生。
4.3 IPSecの成功事例
Encrypt-then-MACを採用したIPSecは20年以上にわたり重大な脆弱性が報告されていません。
5. 実装上のベストプラクティス
- 鍵の分離:暗号化鍵とMAC鍵を別々に生成
- IVの取り扱い:初期化ベクトルをMAC計算に含める
- アルゴリズム選択:
- 暗号化:AES-GCM(認証付き暗号)
- MAC:HMAC-SHA256
- ライブラリ使用:自作実装を避け、OpenSSLなどの実績ある実装を採用
6. 未来の暗号技術の方向性
AEAD(Authenticated Encryption with Associated Data)の普及が進んでいますが、レガシーシステムとの互換性が必要な場面ではEncrypt-then-MACが依然重要です。量子コンピュータ時代を見据えたポスト量子暗号においても、この基本原則は維持されると予想されます。
現代のセキュリティ設計では、「機密性」「完全性」「可用性」のバランスが鍵となります。Encrypt-then-MACはこれらの要件を満たす最も堅牢なアプローチとして、今後も重要な地位を占め続けるでしょう。システム設計者はこの原則を理解し、適切な暗号モジュールの選択と実装を行うことが求められます。
コメント