共通鍵暗号 - 共通鍵暗号(AES 等)
送信者と受信者が同じ鍵を共有して暗号化・復号を行う方式。AES が現在の標準。高速だが鍵配送に課題がある。
概念図
実例
AES-256-CBC でファイルを暗号化
bash
openssl enc -aes-256-cbc -salt -in secret.txt -out secret.enc -k mypasswordAES-256-CBC でファイルを復号
bash
openssl enc -d -aes-256-cbc -in secret.enc -out secret.txt -k mypasswordどこで使われているか
共通鍵暗号はあらゆるデータ保護の基盤です。
- HTTPS 通信: TLS ハンドシェイク後のデータ暗号化は AES / ChaCha20 で行われる
- ディスク暗号化: BitLocker(Windows)/ FileVault(macOS)はフルディスクを AES で暗号化
- データベース暗号化: AWS RDS / Azure SQL の TDE(Transparent Data Encryption)は AES-256
- ファイル暗号化: ZIP のパスワード保護、7-Zip の AES-256 暗号化
- VPN: IPsec / WireGuard のトンネル暗号化
使わなかった場合のリスク
- 通信の盗聴: 暗号化されていない HTTP 通信は、同一ネットワーク上の第三者が平文のまま読める
- 端末紛失時のデータ漏洩: ディスク暗号化なしの PC が盗難にあうと、HDD を取り出すだけで全データが読める
- バックアップの漏洩: 暗号化されていないバックアップが流出すると、そのまま復元・閲覧される
共通鍵暗号の仕組み
共通鍵暗号では、暗号化と復号に同じ鍵(秘密鍵)を使用します。
- ブロック暗号: データを固定長のブロックに分割して暗号化する(AES, DES など)
- ストリーム暗号: データを 1 ビットまたは 1 バイト単位で暗号化する(ChaCha20, RC4 など)
代表的なアルゴリズム:
- AES(Advanced Encryption Standard): 128 / 192 / 256 ビットの鍵長。現在最も広く使われている
- ChaCha20: Google が推進するストリーム暗号。モバイル環境で高速
- DES / 3DES: 旧世代の規格。56 ビット鍵の DES は既に安全ではない
運用上の注意点とベストプラクティス
- 鍵配送問題: 共通鍵を安全に相手に渡す手段が必要。実際には公開鍵暗号や鍵交換プロトコル(Diffie-Hellman)と組み合わせて使う
- 鍵長の選択: AES-128 でも十分な強度があるが、長期保護が必要なデータには AES-256 を推奨
- 暗号利用モード: ECB モードは同じ平文ブロックが同じ暗号文になるため使用禁止。CBC, GCM, CTR などを使う
- 初期化ベクトル(IV): 暗号化ごとにランダムな IV を生成する。IV の再利用は暗号の安全性を損なう
- 認証付き暗号(AEAD): AES-GCM のように暗号化と改ざん検知を同時に行うモードを推奨
