AESは通信データの暗号化でよく使われる暗号化技術。Advanced Encryption
Standardの略。

 米国の国立標準技術研究所(NIST)は1997年、当時標準的に使われていた共通鍵暗号のDES(DataEncryption Standard)の安全性の低下から、DESに代わる共通鍵暗号を募集した。

 そのときに集まった応募案の1つ、「Rijndael(ラインダール)」は暗号の解かれにくさ(強度)だけでなく、処理負荷や計算の速さでも評価され、2000年に選定された。これが、AESになった。

 共通鍵暗号は、データをやりとりする送信者と受信者が同じ暗号鍵を使って、データの暗号化や復号を実行する。送信者と受信者が異なる暗号鍵を使う公開鍵暗号よりも、一般に暗号化や復号の処理にかかる負荷が低い。

 そのためTLSや無線LANの暗号化通信では、送信者と受信者が公開鍵暗号を使ってAESなどの共通鍵暗号の暗号鍵をやりとりし、処理の負荷が小さい共通鍵暗号で通信データを暗号化する。

 これらの暗号化通信では、共通鍵暗号の解読を防ぐために、定期的に暗号鍵を更新する仕組みなどが取り入れられている。

4種類の変換を繰り返す

 AESの特徴は、簡単な処理で実行できる4種類の変換をセットにして、このセットを複数回実行して暗号強度を高めている点だ。

AESの暗号化手順
AESの暗号化手順
[画像のクリックで拡大表示]

 AESで使う4 種類の変換は、「SubBytes」「ShiftRows」「MixColumns」「AddRoundKey」という。実際の処理では、この順番で変換する。

 16バイトごとに区切ったデータに対し、最初のSubBytesでは、1バイト単位で置換する。

 次にShiftRowsで1バイト単位でデータの順序を入れ替えてから、MixColumnsで行列演算を行う。

 最後のAddRoundKeyでは、128ビット、192ビット、256ビットのいずれかの暗号鍵を基に生成した鍵(ラウンド鍵)で変換する。

 AESでは、この一連の処理を複数回繰り返す。いずれの変換も単純な計算で、復号処理では逆の変換を行う。