定義:Rijndael暗号はどんな種類の暗号か

Rijndael暗号(以下、Rijndael)は、固定長のデータを処理して暗号文を作る「ブロック暗号」の設計です。入力は「状態(state)」と呼ばれる内部表現に置き換えられ、そこに対してラウンド処理を繰り返すことで最終的な出力を得ます。ここで重要なのは、Rijndaelが“データ全体を一気に変える”というより、“状態を段階的にかき混ぜる”タイプの設計である点です。

一般に、ブロック暗号はモード(CBCやGCMのような、ブロック暗号をどう連結して長いデータを扱うか)と組み合わせて使われます。Rijndael単体の性質は、モードやパディングの選び方によって実際の挙動(どのように暗号文が並ぶか)が変わるため、切り分けて考える必要があります。

仕組みの全体像:状態・ラウンド・鍵展開

Rijndaelの中心は、状態に対する一連の変換と、それを支える鍵展開(ラウンド鍵の作成)です。具体的には、暗号処理では次の流れを繰り返します。

1つ目は、平文(または前ラウンドの中間状態)を状態表現に詰め替えることです。状態は通常、行列のように扱われ、以降の変換はこの表現に対して行われます。

2つ目はラウンド処理です。ラウンドの中には、非線形な置換(Sボックス)や、位置を入れ替えるような操作、さらに複数要素を結びつける線形変換が組み合わさります。これにより、1ビットの違いが多くの要素に広がる方向性(拡散)が生まれ、同時にSボックスによる非線形性が、単なる線形な変換では説明できない性質を作ります。

3つ目は鍵展開です。暗号処理では、同じ鍵をそのまま毎回使うのではなく、ラウンドごとに異なる「ラウンド鍵」を生成して状態に混ぜ込みます。これにより、鍵に依存した形で各ラウンドの結果が変わります。

なお、ラウンド数や鍵長・ブロック長の選び方は、Rijndaelの“設計としての柔軟性”と、特定の標準(AESのように)で“採用される範囲”が一致しない場合があります。ここが理解の境界になりやすい点です。

部品を理解する:Sボックス、混合、拡散と混同の考え方

実務的にRijndaelを把握するには、ラウンド内の部品を「役割」で捉えるのが助けになります。

  • Sボックス(置換):入力の各要素に対して非線形な変換を行います。非線形性は、攻撃者が“線形近似で推測する”ような作業を難しくする方向性を持ちます。
  • 位置の入れ替え:状態内の要素の並びを変えることで、以降の変換が別の要素に作用するようにします。
  • 線形変換(混合):複数の要素の情報を結びつけ、1か所の変化が広範に影響するようにします。これは拡散の観点です。
  • 鍵との混合:ラウンド鍵を使って状態を更新し、鍵情報が出力へ反映されるようにします。

このように、Rijndaelは「非線形性」と「拡散」をラウンドの反復で積み重ねる考え方に基づきます。