สองส่วนหลักของ Blowfish
1. Subkey Generation (Key Expansion)
- รับกุญแจ 32-448 บิต → สร้าง Subkeys 4168 ไบต์ (P-array 18 + S-boxes 4×256)
- ขั้นตอน: Init π → XOR Key → Encrypt Zero 521 รอบ → เติม P, S
- อ็อปเปอเรเตอร์: XOR, Addition mod 2³², Table Lookup
2. Data Encryption (Feistel 16 รอบ)
Input: 64 บิต x → แบ่ง xL, xR (32 บิต)
for i = 1 to 16:
xL = xL ⊕ Pᵢ
xR = F(xL) ⊕ xR
Swap(xL, xR)
Swap(xL, xR) // Undo last swap
xR = xR ⊕ P17
xL = xL ⊕ P18
Ciphertext = xL || xRF-Function (Core of Blowfish)
รับ xL 32 บิต → แบ่ง 4 ไบต์: a, b, c, d
F(xL) = ((S1[a] + S2[b] mod 2³²) ⊕ S3[c]) + S4[d] mod 2³²
- S1-S4: Key-dependent S-boxes (256 entries × 32 บิต)
- ใช้ Addition mod 2³² และ XOR
การถอดรหัส
ใช้ โค้ดเดียวกัน แต่ P-array เรียงย้อนกลับ: P18, P17, ..., P1
คุณสมบัติการดำเนินการ
| ลักษณะ | รายละเอียด |
|---|---|
| Block Size | 64 บิต |
| Key Size | 32-448 บิต (ผันผวน) |
| Rounds | 16 |
| Structure | Feistel (Modified: both halves modified) |
| Operations | XOR, ADD mod 2³², Table Lookup (S-box) |
| Subkeys | P1-P18, S1[0..255]-S4[0..255] |
| Key Expansion | 521 Encryptions (Slow by design) |