Blowfish Encryption Algorithm
บล็อกไซเฟอร์แบบสมมาตร พัฒนาโดย Bruce Schneier (1993) วางสาธารณะ (Public Domain) ไม่มีสิทธิบัตร
จุดประสงค์การออกแบบ
- แทนที่ DES (ช้า, กุญแจสั้น, ไม่แน่ใจ)
- เร็วในซอฟต์แวร์ 32/64 บิต
- กุญแจยาวได้ (32-448 บิต)
- โครงสร้างเรียบง่าย: XOR, ADD, Table Lookup
คุณสมบัติหลัก
| คุณสมบัติ | ค่า |
|---|---|
| Block Size | 64 บิต |
| Key Size | 32-448 บิต (ตัวอักษร 4-56) |
| Rounds | 16 Feistel Rounds |
| Structure | Modified Feistel (Both halves modified each round) |
| Subkeys | P-array (18×32b) + 4 S-boxes (256×32b each) |
| Operations | XOR, Addition mod 2³², Table Lookup |
| License | Public Domain (Free for any use) |
จุดเด่นทางเทคนิค
- Key-dependent S-boxes: S-boxes สร้างจากกุญแจ → ทน Related-Key Attacks
- Large Subkey Space: 4168 ไบต์ Subkeys → เพิ่มความยากสำหรับโจมตี
- Simple Operations: เหมาะ CPU ทั่วไป ไม่ต้องการ Instruction พิเศษ
- Fast Software: เร็วกว่า DES หลายเท่าในซอฟต์แวร์
Neural Network Implementation (จากเอกสาร)
มีการเสนอใช้ Neural Network (Backpropagation) ลดขนาด S-box และเร่งการคำนวณ น้ำหนักของ NN = กุญแจ แต่เป็นงานวิจัย ไม่ใช่มาตรฐาน
สถานะและข้อแนะนำ
- ✅ ใช้ใน: OpenSSL (Legacy), OpenSSH (Legacy), bcrypt (Password Hashing - ใช้ Key Expansion ที่ช้า), TrueCrypt/VeraCrypt (Legacy)
- ❌ Bruce Schneier แนะนำ Twofish (AES Finalist) หรือ AES แทน
- ❌ บล็อก 64 บิต → Sweet32 Vulnerability
- ❌ Key Expansion ช้า → ไม่เหมาะ Session Key ที่เปลี่ยนบ่อย
- ❌ ไม่มี Hardware Acceleration (AES-NI, ARM Crypto)
สรุป
Blowfish เป็นไซเฟอร์ที่สำคัญทางประวัติศาสตร์ แสดงให้เห็นถึง Key-dependent S-boxes และ Key Expansion ที่ช้าโดยเจตนา (ใช้ใน bcrypt) แต่ ไม่ควรใช้ในระบบใหม่ ให้ใช้ AES-256-GCM หรือ ChaCha20-Poly1305