対称暗号とは
対称暗号(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 非対称暗号
| 項目 | 対称暗号 | 非対称暗号 |
|---|---|---|
| 速度 | ✅ 高速 | 遅い |
| 鍵配送 | 困難 | ✅ 容易 |
| 用途 | 大量データ暗号化 | 鍵交換、署名 |
トラブル事例と対策
⚠️ 鍵の安全な配送
課題:対称暗号では鍵を安全に共有する必要がある
対策:非対称暗号で鍵を交換し、その後対称暗号でデータを暗号化(ハイブリッド暗号)。
権威あるリソース
関連用語
- AES - 最も広く使われる共通鍵暗号
- 非対称暗号 - 公開鍵暗号方式
- 暗号モード - ECB, CBC, CTR, GCMなどの動作モード
- 鍵交換 - 共通鍵を安全に共有する方法
- ChaCha20 - AESの代替となる高速ストリーム暗号
2025-2026年の最新動向
ポスト量子共通鍵暗号の研究が活発化しています。AES-256は量子コンピュータのGroverのアルゴリズムに対してもAES-128相当の安全性を維持するとされていますが、将来の量子計算能力の向上を見据えて、AES-256の使用が推奨されています。
AEAD(Authenticated Encryption with Associated Data)がデフォルトとなっています。AES-GCM、ChaCha20-Poly1305のようなAEAD暗号は、暗号化と認証を同時に行い、パディングオラクル攻撃等を根本的に防止します。TLS 1.3ではAEAD暗号のみがサポートされています。
ハードウェアアクセラレーションが一般化し、Intel AES-NI、ARMのAES拡張命令がほぼすべてのモダンCPUに搭載されています。これにより、AES暗号化/復号化のパフォーマンスオーバーヘッドはほぼゼロに近づいています。
よくある質問(FAQ)
Q. 共通鍵暗号とは?
暗号化と復号化に同一の鍵を使用する暗号方式です。AES-256が最も広く使われ、高速な処理が特徴です。鍵の安全な共有が課題となります。
Q. AES-128とAES-256はどちらを使うべき?
2025年現在、AES-128も十分安全ですが、将来の量子コンピュータ対策としてAES-256の使用が推奨されています。性能差はハードウェアアクセラレーションにより無視できるレベルです。
Q. AEADとは?
AEAD(認証付き暗号化)は暗号化と認証を同時に行う方式です。AES-GCM、ChaCha20-Poly1305が代表的で、TLS 1.3のデフォルトとなっています。
