AESの定義:何をする暗号か

AES(Advanced Encryption Standard)は、一定サイズのデータ(ブロック)を鍵を使って暗号化し、同じ鍵を使って復号する「共通鍵暗号(対称鍵暗号)」の代表的なアルゴリズムです。ブロック暗号のため、単一のAES処理ではなく、モード(複数ブロックをどう扱うか)と組み合わせて実際のデータ処理になります。

仕組み:ブロック暗号としての基本モデル

AESは、ブロックを内部の状態(state)として扱い、ラウンドと呼ばれる処理を繰り返して暗号文を生成します。ラウンド数は主に鍵の長さに依存し、典型的には鍵長が長いほどラウンドが多くなります。各ラウンドには、次のような変換の要素が組み合わさります。

  • 鍵の加算(AddRoundKey):ラウンドごとに導出した鍵情報を状態に混ぜ込みます。
  • 置換(SubBytes):状態の各バイトに対して、決まった対応表(S-box)による非線形な変換を行います。
  • 行/列の入れ替え(ShiftRows):バイトの位置関係を変えることで、繰り返しが単なる単純置換にならないようにします。
  • 列の混ぜ合わせ(MixColumns):列方向にデータを混ぜて拡散を高めます。

さらに、暗号化ではこれらの変換と鍵の加算をラウンド単位で進め、最後に所定の処理で暗号文を得ます。復号は、暗号化と対になる形で逆変換を使い、同じ鍵を前提に元の平文へ戻します。

重要な構成要素:鍵長・モード・パラメータ

AESを「使う」ときに実際へ影響するのは、アルゴリズムそのものだけではありません。代表的に次が重要です。

鍵長(例:AES-128/192/256の考え方)

AESは鍵長の選択肢があり、鍵長に応じてラウンド数や鍵派生の扱いが変わります。一般に、鍵が長いほど総当たり攻撃などへの耐性が高くなる方向で理解されますが、実際の安全性は運用条件にも左右されます。

モード(ブロックを連結する方法)

ブロック暗号は同じ平文ブロックが同じ鍵で同じ扱いになりやすい性質を持ちます。そのため、実運用ではモードにより「同じ平文なら常に同じ暗号文」という単純な関係を避けたり、完全性(改ざん検出)を確保したりします。

たとえば、よく知られたモードの考え方として以下があります。

  • CBCの考え方:前のブロックの情報を次へ反映させ、同一平文の繰り返しがそのまま同一暗号文として現れにくくする。
  • GCMの考え方:暗号化に加えて、認証用の値(タグ)で改ざんを検出する方向を持つ(詳細は実装と仕様に依存)。

どのモードを選ぶかで、同じAESでも満たせる性質(例:改ざん検出の有無)や必要なパラメータ(例:IVの扱い)が変わります。

IV/nonceと再利用

モードによっては、暗号化ごとに初期化に使う値(IVやnonce)が必要です。 ここで重要なのは、同じ鍵で同じIV/nonceを安易に再利用しないことです。