Advanced Encryption Standard

**Advanced Encryption Standard** (**AES**) は、アメリカ国立標準技術研究所（NIST）が2001年に連邦情報処理標準（FIPS 197）として制定した、128ビットのブロック長を持つ共通鍵ブロック暗号である。鍵長56ビットのDESに代わる標準暗号として公開公募により選定された。

AESは、ベルギーの暗号研究者 Joan Daemen とフィンセント・ライメン（Vincent Rijmen）が設計した暗号方式 Rijndael の128ビットブロック長仕様が標準化されたものであり、鍵長128・192・256ビットを規定する。

現在ではTLSなどの通信暗号化をはじめ、政府機関および民間の情報システムで利用されている。

## 概要
AES以前の標準暗号であったDESは、次の2点が問題であった。
* コンピュータの能力とネットワーク技術の上昇による相対的な強度の低下
* NSAの関与がある**設計の不透明性**（詳細はDESの記事を参照）
そこで、新しい標準暗号がアメリカ国立標準技術研究所（NIST）の主導によって公募され、AESが選出された。2001年3月に **FIPS PUB 197** として公表された。

厳密には「AES」は、選出されなかった暗号も含む、手続き期間中から使われた「新しい標準暗号」の総称であり、選出された暗号方式自体の名はRijndael（ラインダール）である。

AESはSPN構造のブロック暗号である。ブロック長は128ビットであり、鍵長には128ビット・192ビット・256ビットの3種類が選択できる（鍵長が大きいほうが暗号強度が高い）。これに対し、AESの元となった **Rijndael** では、ブロック長と鍵長が可変であり、128ビットから256ビットまでの32ビットの倍数が選べる。NISTが公募した際のスペックに従い、米国標準となったAESではブロック長は128ビットに固定され、鍵長も3種類に限られた。

## 経緯

### AESの選定
旧規格 DES (FIPS 46) の安全性が低下したので、1997年9月にNIST（アメリカ国立標準技術研究所）が後継の暗号標準AES (Advanced Encryption Standard) とすべく共通鍵ブロック暗号を公募した。公募要件には下記のような条件が挙げられた。
* 米国に限らず世界中で、制限なく無料で利用できなければならないこと。
* 詳細なアルゴリズム仕様を公開すること。
* ANSI C及びJavaによる実装を行うこと。
* 暗号強度評価を公開すること。

### AESの最終候補
世界から応募された21方式から、公募要件を満たした15方式に対する評価が行われ、安全性と実装性能に優れた5方式が最終候補として残った。最終候補および設計者は下記のとおりである。
* Rijndael - 、フィンセント・ライメン
* Serpent（サーペント、または、サーパン）- 、エリ・ビーハム、ラーズ・ヌードセン
* RC6 - ロナルド・リヴェスト、マット・ロブショー、レイ・シドニー、イーチュン・リサ・イン
* Twofish - ブルース・シュナイアー、ジョン・ケルシー、ダグ・ホワイティング、デーヴィッド・ワグナー、クリス・ホール、ニールス・ファーガソン
*  - カロリン・バーウィック、ドン・カッパースミス、エドワード・ダヴィニョン、ロザリオ・ジェンナロ、シャイ・ハレヴィ、チャランジット・ジュトラ、ステファン・マテリアス Jr.、ルーク・オコーナー、モハンマド・ペイラヴィアン、デヴィド・サフォード、ネヴェンコ・ズニコフ

### AESの決定
最終選考の結果、あらゆる実装条件で優れた実装性能を発揮したベルギーのルーヴェン・カトリック大学の研究者  (Joan Daemen) と フィンセント・ライメン (Vincent Rijmen) が設計した **Rijndael** （ラインダール）が2000年10月に採用された。

Rijndaelという名称のうち、RijnはRijmen、daeはDaemenから取られたことは明白だが、lはどこから来たのかが不明だった。指導教授だった から取ったのではという説があり、Rijmenが講演した際に質問を受けたが、その答えは "**It's a conjecture.**（それは憶測に過ぎないね）" だった。

## 暗号化の方法
AESはSPN構造のブロック暗号で、ブロック長は128ビット、鍵長は128ビット・192ビット・256ビットの3つが利用できる。

暗号化処理では、始めに鍵生成を行う。AES暗号の鍵長によって変換のラウンド数が異なる。次のとおりである。
* 鍵長128ビットのとき、ラウンド数は10回である。
* 鍵長192ビットのとき、ラウンド数は12回である。
* 鍵長256ビットのとき、ラウンド数は14回である。

暗号化は下記の4つの処理から構成される。
# SubBytes - 換字表（Sボックス）による1バイト単位の置換。
# ShiftRows - 4バイト単位の行を一定規則で左シフトする。
# MixColumns - ビット演算による4バイト単位の行列変換。
# AddRoundKey - ラウンド鍵とのXORをとる。
これら4つの処理を1ラウンドとして暗号化を行う。

なお、復号は上記処理の逆変換を逆順で実行する。
# AddRoundKey
# InvMixColumns
# InvShiftRows
# InvSubBytes

## 安全性
関連鍵攻撃により、256ビットのAES暗号の第9ラウンドまでが解読可能である。また、選択平文攻撃により、192ビットおよび256ビットのAES暗号の第8ラウンドまで、128ビットのAES暗号の第7ラウンドまでが解読可能である (Ferguson et al., 2000)。シュナイアーはAESの「代数的単純さに疑問」を感じているが、AESは欧州の暗号規格NESSIEや日本の暗号規格CRYPTRECでも採用された。AESの数学的構造は他のブロック暗号と異なり、きちんとした記述もある。

この暗号は暗号化方式としてはまだどんな攻撃にも屈していないが、実装によってはサイドチャネル攻撃が成功する場合がある。

## 関連項目
* ブロック暗号
* 有限体
* Transport Layer Security - 暗号化として128ビットおよび256ビットのAES-CBC、AES-GCM、AES-CCMを使用可能
* ディスク暗号化
** HFS+ - セキュリティ機能「FileVault」が128ビットAES暗号を使用
** BitLocker
* Wii - 暗号化に128ビットAESを使用
* アーカイブファイル形式
** ZIP - 256ビットAESを使用可能
** 7z - 256ビットAESを使用可能
** RAR - 256ビットAESを使用可能
* CCMP - WEPで用いられていたRC4、WPAで用いられていたTKIP（本質的にRC4と同等）に代わり、WPA2で採用された暗号化プロトコル。128ビットAESをCCMモードで利用
* AACS - 128ビットAESを使用
* CRYPTREC
* NESSIE
* CPUの命令セット
** AES-NI
** CLMUL instruction set

## 脚注



## 参考文献
* 、NIST発行、2001年 
* 、1999年発行-2003年補追 
* 
* 
* 澤田秀樹：「暗号理論と代数学 増補・AES(高度暗号化標準) Kindle版」，（2021年9月16日）．

## 外部リンク
* 公式サイト  
* リファレンスコード 
* 解説 AES概説（2009年5月3日時点のアーカイブ）
* 選定過程  
* Report on the Development of the Advanced Encryption Standard