ข้ามไปเนื้อหาหลัก

การเข้ารหัสข้อมูลไม่เพียงพอ: ทำไมต้องป้องกันการถูกแก้ไข

เรียนรู้ความแตกต่างระหว่างการรักษาความลับและการตรวจสอบความถูกต้องของข้อมูล พร้อมเหตุผลที่ควรเลือกใช้ AES-GCM แทน AES-CBC

เรียบเรียงโดย AI
Inewgen
22 Sep 2026ที่มา: Dev.to3 นาทีอ่าน (0 ครั้ง)
แชร์
การเข้ารหัสข้อมูลไม่เพียงพอ: ทำไมต้องป้องกันการถูกแก้ไข

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ขนาดตัวอักษร
  • การเข้ารหัสช่วยให้ข้อมูลเป็นความลับ แต่ไม่ได้ป้องกันการถูกแก้ไขหรือแอบเปลี่ยนข้อมูล
  • การโจมตีแบบ bit-flipping อาจทำให้ระบบถอดรหัสข้อมูลที่ถูกสลับบิตกลายเป็นข้อมูลขยะหรือข้อมูลที่ดูเหมือนปกติ
  • AES-GCM จัดเป็น AEAD ที่รวมการรักษาความลับและการตรวจสอบความถูกต้องไว้ในขั้นตอนเดียว
  • การเลือกใช้อัลกอริทึมที่รองรับการตรวจสอบความสมบูรณ์ช่วยตัดความเสี่ยงจากการลืมเพิ่มระบบเช็คข้อมูล

คนส่วนใหญ่มักเข้าใจว่าหน้าที่หลักของการเข้ารหัสคือการเก็บรักษาข้อมูลไม่ให้รั่วไหล ทว่าความจริงแล้วนั่นเป็นเพียงครึ่งหนึ่งของภารกิจทั้งหมด และจุดบอดในครึ่งหลังนี่เองมักทำให้ระบบที่มีการรักษาความปลอดภัยอย่างรัดกุมเกิดช่องโหว่ขึ้นมาได้อย่างเงียบๆ บทความนี้เป็นส่วนหนึ่งของซีรีส์บันทึกการเรียนรู้การพัฒนาโปรเจกต์ CryptoGraphy

หากระบบมีการเข้ารหัสข้อมูลโดยปราศจากกลไกตรวจสอบการดัดแปลง ผู้ไม่หวังสามารถดักจับและแก้ไขบิตข้อมูลใน ciphertext ได้โดยไม่ต้องรู้กุญแจเข้ารหัส แม้พวกเขาจะอ่านข้อความต้นฉบับไม่ออก แต่ในบางโหมดการเข้ารหัส การสลับบิตเหล่านี้จะทำให้ระบบพยายามถอดรหัสออกมาเป็นข้อมูลที่เสียหาย หรือในกรณีที่แย่กว่านั้นคือกลายเป็นข้อมูลที่มีโครงสร้างสมบูรณ์แต่ไม่ใช่ข้อความที่ส่งมาจริงๆ

คำถามว่า "มีใครแอบอ่านข้อมูลนี้ได้ไหม" กับ "มีใครแอบเปลี่ยนข้อมูลนี้โดยที่เราไม่รู้ตัวหรือเปล่า" คือสองการรับประกันความปลอดภัยที่แยกออกจากกันอย่างสิ้นเชิง และระบบที่ดีจำเป็นต้องมีทั้งสองอย่างพร้อมกัน

ในทางปฏิบัติ ช่องโหว่จากการถูกแก้ไขข้อมูลกลางทาง (Tampering) มักอันตรายไม่แพ้การถูกขโมยข้อมูล เนื่องจากระบบซอฟต์แวร์ทั่วไปมักถูกออกแบบมาให้เชื่อถือข้อมูลที่ถอดรหัสสำเร็จ หากไม่มีกลไกตรวจสอบความสมบูรณ์มารองรับ ระบบอาจนำข้อมูลที่ถูกดัดแปลงไปประมวลผลต่อจนเกิดความเสียหายร้ายแรง เช่น การแก้ไขสิทธิ์ผู้ใช้งานหรือยอดเงินในระบบโดยที่ไม่มีข้อผิดพลาดแจ้งเตือน

ชุดคำสั่งใน crypto.py จึงเลือกใช้ AES-GCM แทนที่จะเป็น AES ในโหมด CBC แบบดั้งเดิม โดยมีโครงสร้างการทำงานดังนี้:

  • กำหนดค่า nonce ขนาด 12 ไบต์โดยใช้ os.urandom
  • ฟังก์ชัน encrypt จะทำการเข้ารหัสข้อความต้นฉบับร่วมกับกุญแจและ nonce
  • ฟังก์ชัน decrypt จะทำหน้าที่ถอดรหัสและตรวจสอบความถูกต้องไปพร้อมกัน
python programming code screen workspace

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ชื่อย่อ GCM ย่อมาจาก Galois/Counter Mode ซึ่งอยู่ในกลุ่มอัลกอริทึมที่เรียกว่า AEAD หรือ Authenticated Encryption with Associated Data โดยสามารถทำหน้าที่สองอย่างพร้อมกันในขั้นตอนเดียว ได้แก่ การเข้ารหัสข้อมูลให้เป็นความลับ และการสร้างแท็กตรวจสอบความสมบูรณ์ของข้อมูลขึ้นมา

ไม่อยากพลาดข่าวใหม่?

สมัครรับสรุปข่าวสารใหม่ทางอีเมล ไม่บ่อยจนรำคาญ

โฆษณา

"การเปลี่ยนแปลงแม้เพียงบิตเดียวของ ciphertext หลังจากเข้ารหัส จะทำให้ AES-GCM.decrypt ไม่คืนค่าข้อมูลที่เสียหาย แต่จะโยนข้อยกเว้นและปฏิเสธการส่งคืนข้อมูลใดๆ ทันที"

ผู้พัฒนาโปรเจกต์ CryptoGraphy

ระบบที่ใช้ AES-GCM จะได้ผลลัพธ์เพียงสองทางเท่านั้น คือได้รับข้อความต้นฉบับที่ถูกต้องแม่นยำ หรือไม่ได้อะไรเลย ไม่มีผลลัพธ์แบบที่สามที่ระบบจะยอมรับข้อมูลที่ถูกแอบแก้ไขโดยไม่รู้ตัว ในขณะที่โหมด AES-CBC ดั้งเดิมไม่มีคุณสมบัตินี้ ทำให้ระบบยอมถอดรหัสข้อมูลที่ถูกป่วนจนได้ผลลัพธ์ที่ผู้โจมตีต้องการ

ความแตกต่างระหว่าง "ข้อมูลนี้เป็นความลับ" กับ "ข้อมูลนี้เป็นความลับและมั่นใจได้ว่าไม่มีใครแตะต้อง" ดูเหมือนเป็นเรื่องของคำพูด แต่ในทางปฏิบัติมันคือเส้นแบ่งระหว่างระบบที่เสี่ยงต่อการถูกโจมตีแบบ bit-flipping กับระบบที่ปลอดภัยโดยปริยายจากคุณสมบัติของโหมดการเข้ารหัสที่เลือกใช้

ที่มา: Dev.to

ความคิดเห็น

แสดงความคิดเห็น
0/2000

พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้