back index next

暗号化関数f


 図11は暗号化関数fのアルゴリズムである。
図11 暗号化関数fのアルゴリズム
暗号化関数fのアルゴリズム

 図11を見ると、暗号化関数fは
拡大転置Eという処理、Snという処理、転置Pという処理を行なっているのが分かる。拡大転置Eの読み方は転置表の読み方で述べた通りである。したがって、図11を理解するためには、Sボックスで使用される換え字表の読み方を知らなければならない。


Sボックスの読み方


 Sボックスは6ビットを入力し4ビットを出力する。 Sボックスの換え字表は表は4行16列で構成されており、0〜3行、0〜15列までが存在するものとする (通常の行列は行・列ともに1行(列)から数えはじめる)。 表のどこの値を読むかは入力ビット列によって決定される。入力ビット列の第1ビットと第6ビットの値が行を表し、入力ビット列の第2ビットから第5ビットまでの4ビットが列を表す(図12)。
図12 Sボックスでの入力ビット列の処理
Sボックスでの入力ビット列の処理

例えば、入力ビット列として「101100」が入力されたときは行が「10」、列が「0110」となり、2行6列を読めばよいことがわかる。 もしS1を読んでいるのであれば、入力「101100」に対するS1ボックスの出力は2(2進数では「0010」)になる(図13)。
図13 Sボックスの換え字表の読み方
Sボックスの換え字表の読み方


暗号化関数fの処理


 図11を見ると分かるように、暗号化関数fの処理は次のように行われる。
  1. 図5のRn−1(32ビット)を入力として得る。
  2. 拡大転置Eによって、Rn−1を48ビットに拡大転置する。
  3. Rn−1を拡大転置した結果と鍵Knを排他的論理和にかける。
  4. この結果求まったビット列を、第1ビットから順に6ビットずつに分割し、8つのビット列を生成する(表1、図14)。

    図14 48ビットを6ビットに分解する様子
    48ビットを6ビットに分解する様子

    表1 48ビットの分割
    分割前のビット位置利用されるSiボックス
    第1ビット〜第6ビットS1
    第7ビット〜第12ビットS2
    第13ビット〜第18ビットS3
    第19ビット〜第24ビットS4
    第25ビット〜第30ビットS5
    第31ビット〜第36ビットS6
    第37ビット〜第42ビットS7
    第43ビット〜第48ビットS8

  5. 分割後の8つのビット列を、Siボックスにかける。どのビット列がどのSiボックスを使用するかは表1を参照。
  6. Siボックスからの出力(4ビット×8)を結合する。どのSiボックスからの出力が結合後のビット列のどこに位置するかは表2、図15を参照。

    図15 Siボックスからの出力を結合する様子
    Sボックスからの出力を結合する様子

    表2 Siボックスからの出力の結合
    出力するSiボックス結合後のビット列の位置
    S1第1ビット〜第6ビット
    S2第7ビット〜第12ビット
    S3第13ビット〜第18ビット
    S4第19ビット〜第24ビット
    S5第25ビット〜第30ビット
    S6第31ビット〜第36ビット
    S7第37ビット〜第42ビット
    S8第43ビット〜第48ビット

  7. Siからの出力を結合した結果を、置換Pにかける。
  8. 置換Pの結果が暗号化関数fの出力となる。

back index next