plaintext0123456789ABCDEF14 roundsSubBytesShiftRowsMixColumnsciphertext????????????????????????????????AES-256: 14 rounds of confusion + diffusion

AES暗号化

11 最小読み取り暗号化

AES は暗号化アルゴリズムです。複数年にわたる公開競争を経て 2001 年に米国政府によって選ばれ、現代のインターネット時代全体の暗号化の主力として機能してきました。 TLS、WireGuard、BitLocker、FileVault、携帯電話のストレージ暗号化など、内部ではすべて AES です。

記事全文は以下に英語で記載されています。

AES (Advanced Encryption Standard) は、15 の設計を互いに競わせた 5 年間にわたるオープン コンペティションの後、2001 年に NIST によって選択された対称ブロック暗号です。勝者は、ベルギーの暗号学者 Joan Daemen と Vincent Rijmen によって設計された元々 Rijndael という名前でしたが、米国連邦データの暗号化標準となり、急速にほぼすべての商用システムのデフォルトになりました。各方向に個別のキーがある公開キー暗号化 (RSA、ECDH) と比較してください。

ブロック暗号: は、一度に固定サイズのデータ​​ チャンクを暗号化します。 AES は、キー サイズに関係なく 128 ビット (16 バイト) のブロック サイズを使用します。

プレーンテキストはブロックに分割され、各ブロックはキーを使用した一連の数学的演算によって変換されます。出力は入力と同じ長さの暗号文です。

キー サイズ

AES は 3 つのキー サイズをサポートします:

  • AES-128 — 128 ビット キー、10 ラウンドの内部操作
  • AES-192 — 192 ビット キー、12 ラウンド
  • AES-256 — 256 ビット キー、14 ラウンド

3 つすべてが安全であるとみなされます。 AES-128 には 2^128 の可能なキーがあり、これはブルート フォースの範囲をはるかに超えています。1 秒あたり 1 兆回の試行で、キースペースを使い果たすには約 10 60 億年かかります。 AES-256 は、将来の暗号技術の進歩、特に量子に対する名目上の追加セキュリティ マージンを目的として選択されています (グローバーのアルゴリズムにより、量子コンピューターに対して有効なキー強度が半分に低下するため、AES-256 は 128 ビットのポスト量子セキュリティ レベルを提供します)。 rounds:

  • SubBytes — 非線形置換テーブル (S-box) を使用して各バイトを置換します。
  • ShiftRows — 4x4 状態の各行を循環シフトします。行列.
  • MixColumns — 各列を固定行列 (特別な有限フィールド内) で乗算します。
  • AddRoundKey — マスター キーから派生したラウンド固有のキーとの XOR。

置換と置換の組み合わせにより、混乱が生じます。 (各出力ビットは多くの鍵ビットに依存します) と拡散 (各平文ビットは多くの出力ビットに影響します) — シャノンが安全な暗号に不可欠であると特定した 2 つの特性。

動作モード

AES は一度に 1 ブロックを暗号化します。長いデータを暗号化するには、操作の モード でブロック チェーンの方法が定義されます。重要なモード:

  • ECB (電子コードブック) — 各ブロックは個別に暗号化されます。何にも使用しないでください。同一の平文ブロックは同一の暗号文を生成し、構造を明らかにします。
  • CBC (暗号ブロック連鎖) — 各ブロックは暗号化前に前の暗号文と XOR 演算されます。長年の標準。認証されていない場合、パディングオラクル攻撃に対して脆弱です。
  • CTR (カウンター) — 増加するカウンターと平文による XOR を暗号化します。 AES を効率的にストリーム暗号に変換します。
  • GCM (ガロア/カウンター モード) — 1 つのパスで CTR + 認証タグを追加します。主流のモダンモード。 TLS 1.3、WireGuard、およびほとんどの新しいプロトコルで使用されます。 AEAD (Authenticated Encryption with Associated Data) は、このクラスの正式名です。

現在 AES モードを選択している場合は、特別な理由がない限り、AES-GCM を使用してください。

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

Intel は 2010 年に AES-NI 命令セットを導入しました。数年後、ARM も同様のことを行いました。最新の CPU は、コアあたり 10 GB/秒を超える速度で AES を暗号化します。この暗号は基本的に CPU コストが無料です。暗号化通信のボトルネックが AES 自体であることはほとんどありません。

これが、AES-GCM が最新のプロトコルのデフォルトである理由です。AES-GCM は安全であり、ハードウェア上で事実上無料です。ハードウェア サポートがない場合は、単純な CPU や ARM コアではソフトウェア AES より高速な ChaCha20-Poly1305 が推奨されます。

AES が使用されない場所

一部の場所では、AES を明示的に回避します。 WireGuard は、プロトコルが組み込みデバイスと最小限の暗号の多様性を対象としているため、ChaCha20 を使用します。古いプロトコル (レガシー SSH、古い OpenVPN) は、互換性を確保するために依然としてデフォルトで他の暗号を使用しています。 Tor は、パフォーマンスではなく多様性を考慮して選択された暗号を組み合わせて使用​​します。しかし、新しい汎用暗号化 (ディスク暗号化、TLS 接続、ファイル暗号化) の場合は、AES がデフォルトであり、安全な選択です。

計算は成り立ちます

20 年以上にわたる暗号解析の後、AES には実際的な攻撃はありません。完全な暗号に対する最良の学術攻撃は、総当たり攻撃のコストを約 4 分の 1 に削減します。つまり、AES-128 の有効なセキュリティは約 126 ビットであり、解読するのはまだ完全に非現実的です。サイドチャネル攻撃 (タイミング、電力解析) は実装が単純な場合に鍵を明らかにする可能性がありますが、ハードウェア アクセラレーションを備えた定数実装によりその穴は塞がれます。この暗号は、いかなる合理的な手段によっても安全です。

よくある質問

AES-256 は AES-128 よりも優れていますか?
名目上はより安全ですが、実際にはどちらも実際のブルートフォースをはるかに超えています。 AES-256 を選択する主な理由は、量子後の復元力です。グローバーのアルゴリズムは、量子攻撃者に対する有効なセキュリティを半分にするため、AES-256 は、AES-128 の 64 ビット (これは不快になり始めています) に対して 128 ビットの量子後セキュリティを提供します。ほとんどのコンテキストでは、両方とも問題ありません。
AESはクラックできるのでしょうか?
現実的な時間では力ずくではありません。実装が不十分な AES に対するサイドチャネル攻撃によりキーが回復されました。削減ラウンド AES に対する暗号解読攻撃が存在します。しかし、一定時間実装による完全な 10/12/14 ラウンド AES には、実用的なブレークが知られていません。暗号自体は健全です。
一部のシステムでは AES ではなく ChaCha20 が使用されるのはなぜですか?
AES-NI を使用しないハードウェア (組み込みデバイス、古い ARM コア、単純なマイクロコントローラー) でのパフォーマンス。 ChaCha20 は、ハードウェア アクセラレーションによる AES と競合する速度でソフトウェアに実装されています。 AES-NI を備えた最新の x86 および ARM では、通常、AES の方が高速です。 WireGuard は、ハードウェア全体で一貫したパフォーマンスを確保するために ChaCha20 を選択しました。
AES-GCM と AES-CBC とは何ですか?
どちらも AES 動作モードです。 AES-GCM は認証型暗号化であり、1 回のパスで暗号化して検証タグを生成し、改ざんを阻止します。 AES-CBC は単なる暗号化です。認証が必要な場合は、HMAC を別途追加する必要があり、組み合わせを正しく行うと失敗しやすいことはよく知られています。新しい設計には GCM を使用します。
AES は量子コンピューターから保護しますか?
AES のような対称暗号は、RSA や ECDH よりも耐量子性がはるかに優れています。 Grover のアルゴリズムにより、有効なキーの強度が半分に減少します。AES-256 は 128 ビットの古典的なキーと同等になりますが、まだ実現不可能です。 AES-128 が 64 ビットになり、不快です。量子後の推奨事項は、AES-256 に大きな MAC タグ サイズを加えたものです。
AES 暗号化の説明: ほぼすべての暗号化の背後にある暗号