Tổng quan
DES sử dụng 16 vòng (rounds). Mỗi vòng bao gồm các bước cấp cao:
1. Biến đổi khóa (Key Transformation)
- Khóa 64-bit ban đầu → loại bỏ mỗi bit thứ 8 → khóa 56-bit.
- Mỗi vòng: từ khóa 56-bit sinh khóa con 48-bit khác nhau (subkey) bằng quá trình key transformation.
- Khóa 56-bit chia 2 nửa 28-bit. Dịch vòng tròn trái (circular left shift) 1 hoặc 2 vị trí tùy vòng.
- Vòng 1, 2, 9, 16: dịch 1 vị trí. Các vòng còn lại: dịch 2 vị trí.
Bảng số bit dịch mỗi vòng:
| Vòng | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Bit dịch | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 1 |
2. Hoán vị mở rộng (Expansion Permutation)
Sau hoán vị ban đầu: 2 nửa 32-bit LPT (Left Plain Text) và RPT (Right Plain Text). RPT mở rộng 32→48 bit, các bit được hoán vị (expansion permutation).
3. Thay thế S-box (S-box Substitution)
Chấp nhận 48-bit đầu vào từ XOR (khóa nén + RPT mở rộng), tạo 32-bit đầu ra bằng kỹ thuật thay thế.
4. Hoán vị P-box (P-box Permutation)
Đầu ra S-box 32-bit được hoán vị bằng P-box. Hoán vị đơn giản: thay thế mỗi bit bằng bit khác theo bảng P-box, không mở rộng/nén.
Bảng P-box (2 hàng x 16 cột):
| 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 |
Ví dụ: 16 ở khối 1 → bit vị trí 16 input thành bit vị trí 1 output. 10 ở khối 16 → bit vị trí 10 input thành bit vị trí 16 output.
5. XOR và Hoán đổi (XOR and Swap)
Các phép toán trên chỉ áp dụng cho nửa phải 32-bit của plaintext 64-bit gốc. Nửa trái chưa bị ảnh hưởng. Lúc này: nửa trái ban đầu XOR với đầu ra P-box Permutation.