対称暗号(共通鍵暗号) - 暗号化全般

暗号化全般 | IT用語集

対称暗号とは

対称暗号(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のデフォルトとなっています。

📝 関連ブログ記事

【2026年最新】OpenSSLの深刻な問題とは?

暗号化実装のご相談