Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบเครือข่าย >> ความปลอดภัยเครือข่าย

CBC (Cipher Block Chaining) ในความปลอดภัยเครือข่าย: การทำงาน ข้อดี ข้อเสีย และการใช้งานกับ AES

CBC Mode คืออะไร?

Cipher Block Chaining (CBC) เป็นโหมดการทำงานของ Block Cipher (เช่น AES, DES) ที่นำ Ciphertext Block ก่อนหน้า มา XOR กับ Plaintext Block ปัจจุบัน ก่อนเข้ารหัส ทำให้ Block เดียวกันที่อยู่ตำแหน่งต่างกัน ให้ Ciphertext ต่างกันทุกครั้ง — แก้ปัญหา Pattern Leakage ของ ECB Mode

กระบวนการเข้ารหัส CBC (Encryption)

  1. สร้าง Initialization Vector (IV) แบบสุ่ม (Random) ขนาดเท่ากับ Block Size (16 ไบต์สำหรับ AES)
  2. Block แรก: C₁ = Encrypt(P₁ ⊕ IV)
  3. Block ถัดไป: Cᵢ = Encrypt(Pᵢ ⊕ Cᵢ₋₁)
  4. ส่ง IV + Ciphertext ไปยังผู้รับ (IV ไม่ต้องเป็นความลับ แต่ต้องไม่ซ้ำ/คาดเดาไม่ได้)

กระบวนการถอดรหัส CBC (Decryption)

  1. Block แรก: P₁ = Decrypt(C₁) ⊕ IV
  2. Block ถัดไป: Pᵢ = Decrypt(Cᵢ) ⊕ Cᵢ₋₁
  3. ข้อสังเกต: Decryption แบบ Parallel ได้ (ต่างจาก Encryption ที่ Sequential)

AES-CBC: การรวม AES กับ CBC Mode

  • AES = Block Cipher มาตรฐาน (128/192/256-bit key, 128-bit block)
  • CBC = Mode of Operation
  • AES-CBC = ใช้ AES เป็น Primitive ภายในโครงสร้าง CBC — ใช้กันอย่างกว้างใน TLS 1.2, IPsec, SSH, File/Full-disk Encryption (BitLocker, FileVault, LUKS)

ข้อดีของ CBC

  • ไม่มี Pattern Leakage (เหมือน ECB) — Ciphertext ดูเหมือน Random
  • รองรับ Parallel Decryption — เร็วกว่าในการถอดรหัสขนาดใหญ่
  • เข้าใจง่าย มาตรฐานเก่า รองรับทุกไลบรารี/ฮาร์ดแวร์

ข้อเสียและช่องโหว่ของ CBC (Critical)

1. Padding Oracle Attack (POODLE, Lucky Thirteen)

หากระบบบอกว่า "Padding ผิด" vs "MAC ผิด" แตกต่างกัน โจมตีสามารถถอดรหัสได้ Byte-by-byte → ต้องใช้ Encrypt-then-MAC (EtM) หรือ AEAD แทน

2. Malleability (Bit-flipping)

โจมตีสามารถพลิกบิตใน Ciphertext → ทำให้ Plaintext เปลี่ยนแปลงได้ตามที่ต้องการ (หรอไม่มี Integrity Check) → ต้องมี Authentication (HMAC/GCM/CCM)

3. IV Reuse / Predictable IV

ใช้ IV ซ้ำหรือคาดเดาได้ → ระบุ Plaintext ได้ → IV ต้อง Random (CSPRNG) ทุกครั้ง

4. ไม่มี Authentication ทางตัวเอง

CBC ให้แค่ Confidentiality — ต้องผูกกับ HMAC (Encrypt-then-MAC) หรือใช้ AEAD (GCM, CCM, ChaCha20-Poly1305)

เปรียบเทียบ CBC vs ECB vs GCM

คุณสมบัติECBCBCGCM (AEAD)
Pattern Leakageมี (อันตราย)ไม่มีไม่มี
Parallel Encryptได้ไม่ได้ (Sequential)ได้
Parallel Decryptได้ได้ได้
Integrity/Authไม่มีไม่มี (ต้องเพิ่ม HMAC)มี built-in
Paddingต้องการต้องการ (PKCS#7)ไม่ต้องการ
สถานะแนะนำห้ามใช้Legacy/Compatibility เท่านั้นแนะนำ (Modern Standard)

แนวทางปฏิบัติปัจจุบัน (2024+)

  1. โปรเจกต์ใหม่: ใช้ AES-GCM หรือ ChaCha20-Poly1305 (AEAD) — เร็วกว่า ปลอดภัยกว่า ไม่ต้องจัดการ Padding/IV เอง
  2. ระบบ Legacy (TLS 1.2, IPsec, Disk Encryption): AES-CBC ยังคงใช้งานได้ หาก ใช้ Encrypt-then-MAC (RFC 7366) IV Random และจัดการ Key ให้ถูกต้อง
  3. ห้ามใช้: CBC แบบ Raw (ไม่มี MAC), IV คงที่/เป็นศูนย์, Padding แบบไม่ตรวจสอบ

CBC-MAC และ CMAC

CBC-MAC ใช้โครงสร้าง CBC สร้าง Message Authentication Code — แต่ ไม่ปลอดภัยสำหรับข้อความความยาวแปรผัน (Length Extension Attack) → ใช้ CMAC (NIST SP 800-38B) หรือ HMAC แทน

สรุป

CBC เป็นโหมด Block Cipher ที่สำคัญทางประวัติศาสตร์ และยังใช้อยู่ในระบบ Legacy มากมาย แต่สำหรับการพัฒนาใหม่ ควรใช้ AEAD (AES-GCM, ChaCha20-Poly1305) ที่ให้ Confidentiality + Integrity + Authenticity ในขั้นตอนเดียว ลดโอกาสผิดพลาดในการ Implement อย่างมาก