1. まず暗号化するデータ(以下"平文"といいます)から64bit分のデータ(ブロック)に区切ります。
2. そのビットブロックを「初期転置」と呼ばれるビット間の入れ替えを行います。入れ替えの順序は以下の表で表されます。この表は転置前の第何ビットがどこに来るかを表しており、例えば転置前の第58ビットは転置後の第1ビットに移されます。
初期転置IP (Initial Permutation)
58 | 50 | 42 | 34 | 26 | 18 | 10 | 2 |
60 | 52 | 44 | 36 | 28 | 20 | 12 | 4 |
62 | 54 | 46 | 38 | 30 | 22 | 14 | 6 |
64 | 56 | 48 | 40 | 32 | 24 | 16 | 8 |
57 | 49 | 41 | 33 | 25 | 17 | 9 | 1 |
59 | 51 | 43 | 35 | 27 | 19 | 11 | 3 |
61 | 53 | 45 | 37 | 29 | 21 | 13 | 5 |
63 | 55 | 47 | 39 | 31 | 23 | 15 | 7 |
3. 初期転置をかけた後、64bitのブロックは左右32bitづつのブロックに分けられる。
4. 右32bitはユーザの入力した鍵から生成された内部鍵と一緒に「f関数」と呼ばれる関数に放り込まれ、出てきた結果と左32bitと排他的論理和演算を計算して左ブロックとします。
5. 右32bitと左32bitを入れ替えます。
6. 4.と5.を16回繰り返した後、左右を統合してから再び「最終転置」と呼ばれるビット間の入れ替えを行います。表の見かたは初期転置と同じです。ちなみにこの最終転置はちょうど初期転置の逆関数になっています。つまり初期転置で入れ替えたビット順序を元の位置に戻すように入れ替えているのです。
最終転置FP (Final Permutation)
40 | 8 | 48 | 16 | 56 | 24 | 64 | 32 |
39 | 7 | 47 | 15 | 55 | 23 | 63 | 31 |
38 | 6 | 46 | 14 | 54 | 22 | 62 | 30 |
37 | 5 | 45 | 13 | 53 | 21 | 61 | 29 |
36 | 4 | 44 | 12 | 52 | 20 | 60 | 28 |
35 | 3 | 43 | 11 | 51 | 19 | 59 | 27 |
34 | 2 | 42 | 10 | 50 | 18 | 58 | 26 |
33 | 1 | 41 | 9 | 49 | 17 | 58 | 25 |
|