back index next

DESによる暗号化


 DESでの暗号化は図5のように行われる。図中では、’○’が演算、’□’が値を意味する。また、「転置」も一種の演算である。xorの記号はビット毎の排他的論理和を意味する。Knは鍵Kを縮約型転置にかけた48bitの値である。Knの求め方については後ほど説明する。また関数fについても後ほど説明する。
図5 DESでの暗号化
DESでの暗号化の手順

図5を見ると分かるように、入力された平文M(64bit)に対し、まず
初期転置IPが行われる。転置の処理を理解するためには、まず転置表の読み方を知らなければならない。


転置表の読み方


転置表の読み方は次の通りである。 例えば、
初期転置IPでは次のようになる。 以上を図にすると図6のようになる。
図6 初期転置IPの入出力
初期転置IPの入出力

 初期転置IPでは入力ビット列のビット数と、出力ビット列のビット数は同数である。しかし、DESで使用する転置にはこのほかに次のようなものがある。
拡大転置
 入力ビット列のビット数よりも、出力ビット列のビット数が多い転置。このため、入力ビットに対応する出力ビットが複数存在するものもある(例えば、入力ビット列第2ビットの値は、出力ビット列第7ビットと第31ビットの値として出力される、など)。
縮約型転置
 入力ビット列のビット数よりも、出力ビット列のビット数が少ない転置。このため、入力ビットに対応する出力ビットが存在しないものもある(例えば、入力ビット列第20ビットは、どの出力ビットの値としても出力されない、など)。
Sボックス
 6ビットの入力から4ビットの出力を得る操作。但し、Sボックスは転置ではない。転置と違う点は、入力の値に対する出力の値があらかじめ定義されていることである。したがってSボックスの換え字表の読み方は転置表とは異なる。詳しくは後ほど説明する。


DESでの暗号化の処理


 図5を見ると分かるように、DESによる暗号化は次のように行われる。(
図5を別のウィンドウで表示)
  1. 初期転置IPによって入力ビット列を転置する。
  2. 転置されたビット列を左側32bitと右側32bitに分割する。(図7)
    図7 ビット列の分割
    ビット列の分割
  3. この左右の値をL0,R0とする。
  4. R0はそのままL1となる(すなわちL1=R0)。
  5. L0は、R0と鍵K1(48bit)を関数fで計算した結果の値との排他的論理和にかけらる。その結果をR1とする。
    (すなわちR1=L0f(R0,K1)
  6. ここで、4,5を一般化すると次のようになる。
  7. 6での式をn=16になるまで繰り返す。
  8. R16とL16を結合し64ビットの値とする(図8)。n=16に限り、LとRの左右が逆になることに注意(図5)。
    図8 ビット列の結合
    ビット列の結合
  9. 結合された値を最終転置IP−1にかける。
  10. 最終転置IP−1の結果がDESの最終的な出力となる。すなわち暗号化が完了する。

back index next