AEADとは
AEAD(Authenticated Encryption with Associated Data)は、暗号化(機密性)と認証(完全性・認証)を単一の操作で提供する暗号方式です。従来の「暗号化→MAC」の組み合わせより安全で効率的です。
AEADの構成要素
- 鍵(Key):暗号化と認証に使用する秘密鍵
- ナンス/IV:一意の値(再利用禁止)
- 平文:暗号化されるデータ
- AAD(Associated Data):認証されるが暗号化されないデータ
- 暗号文 + 認証タグ:出力
代表的なAEADアルゴリズム
- AES-GCM:TLSで最も一般的
- ChaCha20-Poly1305:ソフトウェア実装で高速
- AES-CCM:IoT向け
なぜAEADが重要か
暗号化のみでは改ざんを検知できません。AEADは以下を保証:
- 機密性:データの内容が秘匿される
- 完全性:改ざんが検知される
- 認証:正しい鍵で暗号化されたことを証明
Pythonでの使用例
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
import os
key = AESGCM.generate_key(bit_length=256)
aesgcm = AESGCM(key)
nonce = os.urandom(12)
# AAD: ヘッダーなど認証したいが暗号化しないデータ
aad = b"header: content-type=json"
plaintext = b'{"secret": "data"}'
ciphertext = aesgcm.encrypt(nonce, plaintext, aad)
# 改ざんされていれば例外発生
decrypted = aesgcm.decrypt(nonce, ciphertext, aad)
