鍵Knの求め方
DESの処理が行われている際、鍵K(64bit)はそのままでは使用されない。与えられた鍵Kから、鍵Kn(48bit)を16個生成して使用する。鍵Knの求め方は図9の通りである。図中では、’○’がシフト演算、’□’が値を意味する。また、PC−1とPC−2はそれぞれ鍵の縮約型転置PC−1と鍵の縮約型転置PC−2である。
図9 鍵Knの求め方
|
図9を見ると分かるように、鍵Knは次のように求める。
- 鍵の縮約型転置PC−1によって64bitの入力ビット列を56bitにする。
- 縮約転地されたビット列を左28bitと右28bitに分割し、左右の値をそれぞれC0,D0とする。
- C0,D0をLS0にかけ、その結果をC1,D1とする。
- C1,D1を結合し、56bitの値とする。
- この値を鍵の縮約型転置PC−2にかけ48bitの値にする。この値が鍵K1となる。
- C1,D1をLS1にかけ、その結果をC2,D2とする。
- 3〜6を一般化すると次のようになる。
- Cn−1,Dn−1をLSnにかけ、その結果をCn,Dnとする。
- Cn,Dnを結合し、56ビットの値とする。
- この値を鍵の縮約型転置PC−2にかけ48bitの値にする。この値が鍵Knとなる。
- 以上のことを、鍵K16が求まるまで繰り返す。
LSnはLeft Shiftのことであり、あるビット数分だけ左循環シフトすることである。何ビットシフトするかはnと鍵のシフト回数によって決定される。例えばn=2ならば1ビット左シフトすることになり、n=12ならば2ビット左シフトすることになる。
なお、通常の左シフト(左論理シフト)では最も右のビットには0を補完するが、DESで用いる左循環シフトではシフト前の最上位ビットの値を、シフト後の最下位ビットの値として用いる。
図10 左循環シフト
|