AESとは
AES(Advanced Encryption Standard)は、2001年にNIST(米国国立標準技術研究所)によって標準化された対称暗号アルゴリズムです。ベルギーの暗号学者Joan DaemenとVincent Rijmenが開発したRijndaelアルゴリズムがAESとして採用されました。
AESは、それ以前の標準であったDES(Data Encryption Standard)の後継として設計され、128ビット、192ビット、256ビットの3種類の鍵長をサポートします。現代のほとんどの暗号化システム(TLS、ディスク暗号化、VPNなど)でAESが使用されています。
AESの特徴
- ブロック暗号:128ビット(16バイト)のブロック単位でデータを処理
- 対称暗号:暗号化と復号化に同じ鍵を使用
- 高速:ソフトウェア・ハードウェアの両方で効率的に実装可能
- AES-NI:最新CPUはAES専用命令セットを搭載し、高速処理が可能
AIエンジニアとしての実体験
AIエンジニアとして、AESは機密データの暗号化に頻繁に使用します。特に機械学習の学習データや、推論結果に含まれる個人情報を保護する際に重要です。
あるプロジェクトでは、医療データを使用した機械学習モデルを開発しました。データの保存時にはAES-256-GCMで暗号化し、処理時のみ復号化する設計にしました:
from cryptography.fernet import Fernet
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
import os
# AES-256-GCMでの暗号化
key = AESGCM.generate_key(bit_length=256)
aesgcm = AESGCM(key)
nonce = os.urandom(12) # 96ビットのナンス
ciphertext = aesgcm.encrypt(nonce, plaintext, associated_data)
# 復号化
plaintext = aesgcm.decrypt(nonce, ciphertext, associated_data)
OpenSSLコマンドラインでのAES暗号化例:
# ファイルをAES-256-CBCで暗号化
openssl enc -aes-256-cbc -salt -in plaintext.txt -out encrypted.enc -pbkdf2
# 復号化
openssl enc -aes-256-cbc -d -in encrypted.enc -out decrypted.txt -pbkdf2
AESの暗号モード
AESは単体では128ビットのブロックしか処理できないため、長いデータを暗号化するには「暗号モード」が必要です:
| モード | 特徴 | 推奨度 |
|---|---|---|
| GCM | 認証付き暗号化、並列処理可能 | ✅ 推奨 |
| CTR | ストリーム暗号のように動作、並列処理可能 | ✅ 良い |
| CBC | 広く使用されるが、パディング攻撃に注意 | ⚠️ 注意 |
| ECB | 各ブロック独立、パターンが漏洩 | ❌ 非推奨 |
AESの内部構造(仕組み)
AESは「SPN(Substitution-Permutation Network)」と呼ばれる構造を採用しており、平文ブロックに対して複数ラウンドの変換を繰り返すことで暗号文を生成します。1ラウンドは主に次の4つの処理から構成されます。
- SubBytes:S-Box(置換表)を用いて各バイトを非線形に置換し、暗号文と平文の統計的な関連性を隠す
- ShiftRows:状態配列(4×4バイトの行列)の各行を左方向に巡回シフトし、バイト位置を拡散させる
- MixColumns:各列に対してガロア体GF(2^8)上の行列演算を適用し、バイト間の依存関係を作る(最終ラウンドでは省略される)
- AddRoundKey:鍵スケジュールアルゴリズムで生成したラウンド鍵と状態配列をXOR演算する
ラウンド数は鍵長によって異なります。
| 鍵長 | ラウンド数 | 想定用途 |
|---|---|---|
| AES-128 | 10ラウンド | 一般的な通信・アプリケーション暗号化で実用上十分な強度 |
| AES-192 | 12ラウンド | 高セキュリティ要件のシステム |
| AES-256 | 14ラウンド | 長期保存データ、金融・政府機関、量子コンピュータを見据えた長期的な安全性が必要な用途 |
ブロック長は鍵長に関わらず常に128ビット(16バイト)で固定されている点もAESの特徴です。この状態配列(State)に対してラウンド処理を繰り返し適用することで、平文の統計的特徴を暗号文から隠蔽します。
AESのメリット・デメリット
メリット
- NIST標準(FIPS 197)として20年以上の実運用実績があり、世界中の暗号解析コミュニティによる検証が継続的に行われている
- AES-NIなどのハードウェアアクセラレーションにより高速な暗号化・復号化が可能
- 鍵長を128/192/256ビットから選択でき、要件に応じて安全性とパフォーマンスのバランスを調整できる
- GCMモードと組み合わせることで、暗号化とデータ完全性の検証を同時に実現できる(AEAD)
デメリット
- 対称鍵暗号のため、通信相手との安全な鍵配送・鍵管理の仕組みが別途必要(実運用ではTLSのようにDiffie-Hellman鍵交換等と組み合わせる)
- 実装を誤るとECBモードの使用やIV/Nonceの再利用など、致命的な脆弱性を生みやすい
- ソフトウェア実装ではキャッシュタイミング攻撃などのサイドチャネル攻撃への対策が別途必要
- 量子コンピュータのGroverアルゴリズムにより理論上の安全性が低下する(AES-128の実効強度がAES-64相当に低下するとされ、長期保存データにはAES-256が推奨される)
類似技術との違い:AES vs ChaCha20
対称暗号のもう一つの代表格としてChaCha20-Poly1305があります。両者はTLS 1.3でも標準的な暗号スイートとして併存しており、用途に応じて使い分けられます。
| 比較項目 | AES(-GCM) | ChaCha20-Poly1305 |
|---|---|---|
| 方式 | ブロック暗号 | ストリーム暗号 |
| ハードウェア高速化 | AES-NI等の専用CPU命令が必要 | 不要(ソフトウェアのみでも高速) |
| モバイル・組込み機器 | AES-NI非搭載環境では処理が遅くなる場合がある | ソフトウェア実装でも高速なため有利 |
| 標準化団体 | NIST(FIPS 197) | IETF(RFC 8439) |
| 主な採用例 | TLS 1.3、ディスク暗号化、Wi-Fi(WPA2/3) | TLS 1.3(モバイル向け)、WireGuard、Google製品群 |
サーバー側の実装では、AES-NI搭載環境ではAES-GCMを、非搭載のモバイル端末等ではChaCha20-Poly1305を優先するネゴシエーションが一般的です。詳細はChaCha20-Poly1305のページも参照してください。
実務での活用シーン・導入時の注意点
主な活用シーン
- TLS/HTTPS通信の暗号化(AES-GCM暗号スイート)
- ディスク・ファイルシステムの暗号化(BitLocker、LUKS、FileVaultなど)
- データベースの保存時暗号化(Transparent Data Encryption等)
- Wi-Fi通信の暗号化(WPA2/WPA3のCCMPプロトコル)
- クラウドストレージの保存時暗号化(AWS S3のSSE-KMS、Google Cloud Storageの既定暗号化等)
導入時の注意点
- モードの選択:新規実装では必ずGCMなどのAEADモードを使用し、ECBモードは使用しない。CBC単体で使う場合は改ざん検知のためHMACを別途組み合わせる
- 鍵管理:鍵をソースコードやリポジトリにハードコーディングせず、HSMやAWS KMS、HashiCorp Vaultなどの鍵管理サービスを利用する
- IV/Nonceの一意性:GCMモードでは同一鍵に対して同じnonceを再利用すると致命的な情報漏洩につながるため、乱数生成やカウンタで確実に一意性を担保する
- ライブラリの選定:AESアルゴリズム自体を自前実装せず、OpenSSL・libsodium・言語標準の暗号ライブラリ(Pythonの
cryptography等)を使用する
最新動向(2026年)
ハードウェアアクセラレーション
最新のCPU(Intel、AMD、ARM)にはAES-NI命令セットが搭載されており、ソフトウェア実装と比較して10倍以上の高速化が可能です。サーバーのTLS処理やディスク暗号化のパフォーマンスに大きく貢献しています。
ポスト量子暗号への準備
量子コンピュータによる攻撃に対して、AES-256は比較的安全とされています(Groverのアルゴリズムにより実効的な強度がAES-128相当に低下)。しかし、長期的な機密性が必要なデータには、より長い鍵長の使用が推奨されます。
トラブル事例と対策
⚠️ ECBモードの誤用
症状:暗号化されたデータからパターンが読み取れる
対策:ECBモードは絶対に使用せず、GCMまたはCBCモードを使用する。
⚠️ IV/Nonceの再利用
症状:同じIVで異なるデータを暗号化すると、XOR攻撃が可能に
対策:暗号化ごとにランダムなIV/Nonceを生成し、決して再利用しない。
権威あるリソース
関連用語
よくある質問(FAQ)
Q. AES(Advanced Encryption Standard)とは何ですか?
AESは2001年にNISTが標準化した対称暗号アルゴリズムです。Rijndaelアルゴリズムに基づき、128・192・256ビットの鍵長をサポートします。現在最も広く使われる暗号で、TLS・HTTPS・Wi-Fi(WPA2/3)・ファイル暗号化・ディスク暗号化等、あらゆるセキュリティシステムで使用されています。
Q. AES-GCMとAES-CBCはどちらが推奨ですか?
AES-GCM(Galois/Counter Mode)が推奨です。GCMはAEAD(認証付き暗号)で、暗号化と完全性認証を同時に行い、パディングオラクル攻撃を防ぎます。CBCは完全性確認のためHMACを別途追加する必要があり、実装ミスのリスクがあります。TLS 1.3もAES-GCMを必須暗号スイートとしています。
Q. AESのハードウェアアクセラレーション(AES-NI)とは何ですか?
AES-NI(AES New Instructions)はIntelが2008年に導入したAES専用のCPU命令セットです。ソフトウェア実装より4〜5倍高速で、CPU内で直接AES演算を実行するためサイドチャネル攻撃にも強くなります。AMD・ARMも同様の命令セットを持ちます。x86のOpenSSLはAES-NIを自動検出して使用します。
