AES(Advanced Encryption Standard) - 暗号化全般

暗号化全般 | IT用語集

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 各ブロック独立、パターンが漏洩 ❌ 非推奨

最新動向(2026年)

ハードウェアアクセラレーション

最新のCPU(Intel、AMD、ARM)にはAES-NI命令セットが搭載されており、ソフトウェア実装と比較して10倍以上の高速化が可能です。サーバーのTLS処理やディスク暗号化のパフォーマンスに大きく貢献しています。

ポスト量子暗号への準備

量子コンピュータによる攻撃に対して、AES-256は比較的安全とされています(Groverのアルゴリズムにより実効的な強度がAES-128相当に低下)。しかし、長期的な機密性が必要なデータには、より長い鍵長の使用が推奨されます。

トラブル事例と対策

⚠️ ECBモードの誤用

症状:暗号化されたデータからパターンが読み取れる

対策:ECBモードは絶対に使用せず、GCMまたはCBCモードを使用する。

⚠️ IV/Nonceの再利用

症状:同じIVで異なるデータを暗号化すると、XOR攻撃が可能に

対策:暗号化ごとにランダムなIV/Nonceを生成し、決して再利用しない。

権威あるリソース

関連用語

📝 関連ブログ記事

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

AES実装を含むOpenSSLの最新動向について解説しています。

暗号化実装のご相談

AESに関するご質問や、データ暗号化基盤構築のご相談など、お気軽にお問い合わせください。