DESでの暗号化は図5のように行われる。図中では、’○’が演算、’□’が値を意味する。また、「転置」も一種の演算である。
はビット毎の排他的論理和を意味する。Knは鍵Kを縮約型転置にかけた48bitの値である。Knの求め方については後ほど説明する。また関数fについても後ほど説明する。
図5 DESでの暗号化
|
図5を見ると分かるように、入力された平文M(64bit)に対し、まず初期転置IPが行われる。転置の処理を理解するためには、まず転置表の読み方を知らなければならない。
転置表の読み方は次の通りである。
例えば、初期転置IPでは次のようになる。
- 転置表の一番左上の値は58である。よって、入力ビット列第58ビットの値が、出力ビット列第1ビットに出力される。
- 転置表の一番右上の値は2である。よって、入力ビット列第2ビットの値が、出力ビット列第8ビットに出力される。
- 転置表の一番右下の値は7である。よって、入力ビット列第7ビットの値が、出力ビット列第64ビットに出力される。
以上を図にすると図6のようになる。
図6 初期転置IPの入出力
|
初期転置IPでは入力ビット列のビット数と、出力ビット列のビット数は同数である。しかし、DESで使用する転置にはこのほかに次のようなものがある。
- 拡大転置
- 入力ビット列のビット数よりも、出力ビット列のビット数が多い転置。このため、入力ビットに対応する出力ビットが複数存在するものもある(例えば、入力ビット列第2ビットの値は、出力ビット列第7ビットと第31ビットの値として出力される、など)。
- 縮約型転置
- 入力ビット列のビット数よりも、出力ビット列のビット数が少ない転置。このため、入力ビットに対応する出力ビットが存在しないものもある(例えば、入力ビット列第20ビットは、どの出力ビットの値としても出力されない、など)。
- Sボックス
- 6ビットの入力から4ビットの出力を得る操作。但し、Sボックスは転置ではない。転置と違う点は、入力の値に対する出力の値があらかじめ定義されていることである。したがってSボックスの換え字表の読み方は転置表とは異なる。詳しくは後ほど説明する。
図5を見ると分かるように、DESによる暗号化は次のように行われる。(図5を別のウィンドウで表示)
- 初期転置IPによって入力ビット列を転置する。
- 転置されたビット列を左側32bitと右側32bitに分割する。(図7)
図7 ビット列の分割
|
- この左右の値をL0,R0とする。
- R0はそのままL1となる(すなわちL1=R0)。
- L0は、R0と鍵K1(48bit)を関数fで計算した結果の値との排他的論理和にかけらる。その結果をR1とする。
(すなわちR1=L0
f(R0,K1)
- ここで、4,5を一般化すると次のようになる。
- Ln=Rn−1
- Rn=Ln−1
f(Rn−1,Kn)
- 6での式をn=16になるまで繰り返す。
- R16とL16を結合し64ビットの値とする(図8)。n=16に限り、LとRの左右が逆になることに注意(図5)。
図8 ビット列の結合
|
- 結合された値を最終転置IP−1にかける。
- 最終転置IP−1の結果がDESの最終的な出力となる。すなわち暗号化が完了する。