Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

อัลกอริทึมการเข้ารหัส Blowfish คืออะไร?

Blowfish Encryption Algorithm

บล็อกไซเฟอร์แบบสมมาตร พัฒนาโดย Bruce Schneier (1993) วางสาธารณะ (Public Domain) ไม่มีสิทธิบัตร

จุดประสงค์การออกแบบ

  • แทนที่ DES (ช้า, กุญแจสั้น, ไม่แน่ใจ)
  • เร็วในซอฟต์แวร์ 32/64 บิต
  • กุญแจยาวได้ (32-448 บิต)
  • โครงสร้างเรียบง่าย: XOR, ADD, Table Lookup

คุณสมบัติหลัก

คุณสมบัติค่า
Block Size64 บิต
Key Size32-448 บิต (ตัวอักษร 4-56)
Rounds16 Feistel Rounds
StructureModified Feistel (Both halves modified each round)
SubkeysP-array (18×32b) + 4 S-boxes (256×32b each)
OperationsXOR, Addition mod 2³², Table Lookup
LicensePublic 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