暗号化関数f
図11は暗号化関数fのアルゴリズムである。
図11 暗号化関数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ボックスでの入力ビット列の処理
|
例えば、入力ビット列として「101100」が入力されたときは行が「10」、列が「0110」となり、2行6列を読めばよいことがわかる。
もしS1を読んでいるのであれば、入力「101100」に対するS1ボックスの出力は2(2進数では「0010」)になる(図13)。
図13 Sボックスの換え字表の読み方
|
暗号化関数fの処理
図11を見ると分かるように、暗号化関数fの処理は次のように行われる。
- 図5のRn−1(32ビット)を入力として得る。
- 拡大転置Eによって、Rn−1を48ビットに拡大転置する。
- Rn−1を拡大転置した結果と鍵Knを排他的論理和にかける。
- この結果求まったビット列を、第1ビットから順に6ビットずつに分割し、8つのビット列を生成する(表1、図14)。
図14 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 |
- 分割後の8つのビット列を、Siボックスにかける。どのビット列がどのSiボックスを使用するかは表1を参照。
- Siボックスからの出力(4ビット×8)を結合する。どのSiボックスからの出力が結合後のビット列のどこに位置するかは表2、図15を参照。
図15 Siボックスからの出力を結合する様子
|
表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ビット |
- Siからの出力を結合した結果を、置換Pにかける。
- 置換Pの結果が暗号化関数fの出力となる。