[暗号] ラウンド関数
ITC Advent Calendar 5日目.
今日はDESのラウンド関数についてです.
誰も興味ないとか知らねーです.
ラウンド関数
32bitのビット列と48bitのサブ鍵を入力し, 32bitのビット列を出力する関数である.
1. Expansion function(E)
32bitのビット列を48bitに拡張する.
拡張には以下のテーブルが用いられる.
32 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
4 | 5 | 6 | 7 | 8 | 9 |
8 | 9 | 10 | 11 | 12 | 13 |
12 | 13 | 14 | 15 | 16 | 17 |
16 | 17 | 18 | 19 | 20 | 21 |
20 | 21 | 22 | 23 | 24 | 25 |
24 | 25 | 26 | 27 | 28 | 29 |
28 | 29 | 30 | 31 | 32 | 1 |
DES supplementary material (August. 7, 2017, 08:20 UTC). In Wikipedia: The Free Encyclopedia. Retrieved from https://en.wikipedia.org/wiki/DES_supplementary_material
2. XORを取る
サブ鍵と48bitに拡張されたビット列のXORを取る.
3. Subscription(S)
サブ鍵と48bitに拡張されたビット列のXORから得られたビット列を, 6bitずつに分割し, Sボックス(substitution box, S-box)に入力する.
8つのSボックスは入力された6bitのビット列から4bitのビット列を生成して出力される.
このとき, 非線形な変換が行われ, ルックアップテーブルの形式で出力される.
SボックスがDESの安全の根幹であるため, このプロセスが無い場合, 暗号は線形なものとなり容易に破ることができるようになる.
4. Permutation(P)
Sボックスから出力された32bit(4bit * 8)のビット列に対して固定の並び替えを施す.
並び替えには以下のテーブルが用いられる.
16 | 7 | 20 | 21 |
---|---|---|---|
29 | 12 | 28 | 17 |
1 | 15 | 23 | 26 |
5 | 18 | 31 | 10 |
2 | 8 | 24 | 14 |
32 | 27 | 3 | 9 |
19 | 13 | 30 | 6 |
22 | 11 | 4 | 25 |
DES supplementary material (August. 7, 2017, 08:20 UTC). In Wikipedia: The Free Encyclopedia. Retrieved from https://en.wikipedia.org/wiki/DES_supplementary_material
Eでの拡張とSボックスでの置換, Pでの並び替えが各ラウンドで左側32bitと右側32bitに交互に行われることで, クロード・シャノンが安全で実用的な条件とした「拡散とかく乱」が提供される.