Secure Steady
共通鍵暗号 - 共通鍵暗号(AES 等) の使い方・オプション・サンプル

共通鍵暗号 - 共通鍵暗号(AES 等)

送信者と受信者が同じ鍵を共有して暗号化・復号を行う方式。AES が現在の標準。高速だが鍵配送に課題がある。

概念図

共通鍵暗号(AES 等) diagram

実例

AES-256-CBC でファイルを暗号化

bash
openssl enc -aes-256-cbc -salt -in secret.txt -out secret.enc -k mypassword

AES-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 のように暗号化と改ざん検知を同時に行うモードを推奨

関連トピック