対称暗号とは
対称暗号(Symmetric Encryption)は、暗号化と復号化に同じ鍵(秘密鍵)を使用する暗号方式です。「共通鍵暗号」とも呼ばれ、非対称暗号(公開鍵暗号)と比較して高速な処理が可能です。
代表的な対称暗号アルゴリズム:
- AES:現代の標準(128/192/256ビット鍵)
- ChaCha20:ソフトウェア実装で高速
- 3DES:DESの後継(現在は非推奨)
- Blowfish/Twofish:bcryptの基盤
対称暗号の種類
ブロック暗号
固定長のブロック単位でデータを処理。AES(128ビットブロック)が代表例。長いデータは暗号モード(CBC、CTR、GCM)で処理します。
ストリーム暗号
1ビットまたは1バイト単位で連続処理。ChaCha20やRC4(非推奨)が該当。リアルタイム通信に適しています。
AIエンジニアとしての実体験
機械学習モデルのデータ暗号化に対称暗号を使用しています:
from cryptography.fernet import Fernet
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
import os
# Fernet(AES-128-CBC + HMAC)
key = Fernet.generate_key()
f = Fernet(key)
encrypted = f.encrypt(b"secret data")
decrypted = f.decrypt(encrypted)
# AES-256-GCM(推奨)
key = AESGCM.generate_key(bit_length=256)
aesgcm = AESGCM(key)
nonce = os.urandom(12)
ct = aesgcm.encrypt(nonce, b"secret data", b"associated data")
対称暗号 vs 非対称暗号
| 項目 | 対称暗号 | 非対称暗号 |
|---|---|---|
| 速度 | ✅ 高速 | 遅い |
| 鍵配送 | 困難 | ✅ 容易 |
| 用途 | 大量データ暗号化 | 鍵交換、署名 |
トラブル事例と対策
⚠️ 鍵の安全な配送
課題:対称暗号では鍵を安全に共有する必要がある
対策:非対称暗号で鍵を交換し、その後対称暗号でデータを暗号化(ハイブリッド暗号)。
