暗号モードとは
暗号モード(Block Cipher Mode of Operation)は、ブロック暗号(AESなど)を使用して可変長のデータを暗号化する方法です。AESは128ビットのブロックしか処理できないため、長いデータを処理するには暗号モードが必要です。
主要な暗号モード
| モード | 認証 | 並列処理 | 推奨度 |
|---|---|---|---|
| ECB | なし | 可能 | ❌ 使用禁止 |
| CBC | なし | 復号のみ | ⚠️ レガシー |
| CTR | なし | 可能 | ✅ 良い(+HMAC) |
| GCM | ✅ あり | 可能 | ✅ 推奨 |
GCM(Galois/Counter Mode)
GCMは認証付き暗号(AEAD)を提供し、暗号化と認証を同時に行います。TLS 1.2/1.3で広く使用されています。
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
import os
key = AESGCM.generate_key(bit_length=256)
aesgcm = AESGCM(key)
nonce = os.urandom(12) # 96ビット推奨
# 暗号化(認証タグが自動付与)
ct = aesgcm.encrypt(nonce, b"plaintext", b"associated data")
# 復号化(認証失敗時は例外)
pt = aesgcm.decrypt(nonce, ct, b"associated data")
トラブル事例
⚠️ ECBモードの使用
問題:同じ平文ブロックが同じ暗号文になり、パターンが漏洩
対策:GCMまたはCBCを使用。ECBは絶対に避ける。
