Cryptography 101
เมื่อไม่นานมานี้ ผมได้มีโอกาสเข้าร่วม Workshop เกี่ยวกับมาตรฐานการเชื่อมโยงและแลกเปลี่ยนข้อมูลภาครัฐ (Thailand Government Information eXchange : TGIX) เลยถือโอกาสนี้ทบทวนและสรุปความรู้คร่าว ๆ เกี่ยวกับการเข้ารหัสข้อมูลที่เคยได้เรียนมาด้วย
จุดประสงค์หลักของศาสตร์การเข้ารหัสมีด้วยกันอยู่ 3 อย่าง ได้แก่
- Confidentiality — ข้อมูลต้องเป็นความลับ
- Integrity — ข้อมูลต้องถูกต้องและน่าเชื่อถือ
- Availability — ข้อมูลต้องเข้าถึงได้เฉพาะผู้ได้รับอนุญาต
เราสามารถแบ่งประเภทของระบบการเข้ารหัส (Cryptosystems) ได้เป็น 2 แบบ คือ สมมาตร (Symmetric) กับ ไม่สมมาตร (Asymmetric)
Symmetric-key cryptography
คือการใช้กุญแจหรือ Key ที่เหมือนกันทั้งการเข้ารหัส และการถอดรหัส ตัวอย่างเช่น การเข้ารหัสของ Julius Caesar ที่โด่งดัง โดยวิธีนี้ ผู้รับสารจะถอดรหัสได้เมื่อใช้ Key เดียวกันกับที่ผู้ส่งสารใช้ในการเข้ารหัส
Asymmetric-key cryptography
หรือ Public-key cryptography คือการใช้กุญแจที่ไม่เหมือนกันในการเข้าและถอดรหัส ซึ่งกุญแจทั้งสองก็คือ Public key และ Private key ความพิเศษของกุญแจคู่นี้คือ เมื่อเราเข้ารหัสด้วยกุญแจใด จะมีเพียงคู่ของมันเท่านั้นที่จะถอดรหัสนั้นได้ (ฟังดูโรแมนติกเนอะ) ถ้าเราสร้างกุญแจคู่หนึ่งขึ้นมาใช้งาน แน่นอนว่าเราต้องเก็บ Private key ไว้เป็นความลับ และเปิดเผย Public key ให้คนอื่นรับรู้
โดยมีการใช้งานที่แพร่หลายอยู่ 2 รูปแบบ ได้แก่
1. Public key encryption
เมื่อเราต้องการส่งข้อความให้ใคร และต้องการให้เขาเป็นคนเดียวที่อ่านข้อความของเราได้ => เราจะใช้ Public key ของเขาเข้ารหัส และเขาใช้ Private key ถอดรหัส
หรือพูดอีกมุมก็คือ ใคร ๆ ก็เข้ารหัสข้อความให้เราได้ด้วย Public key ของเรา (ที่เป็นสาธารณะตามชื่อ) แต่จะมีเพียงเราคนเดียวเท่านั้นที่ถอดรหัสข้อความได้ (เพราะเราเป็นคนเดียวที่มี Private key)
2. Digital signatures
เมื่อเราจะยืนยันว่าข้อความที่ส่งให้เขา มาจากเราจริง ๆ => เราจะใช้ Private key ของเราเข้ารหัส และให้เขาใช้ Public key ถอดรหัส
ซึ่งถ้าข้อความนั้น ไม่สามารถถอดรหัสได้ด้วย Public key ของเรา ก้แปลว่ามันไม่ได้ถูกเข้ารหัสมาจาก Private key ของเรานั่นเอง
แม้ว่าการใช้ Public-key cryptography จะฟังดูปลอดภัย แต่มันก็ยังมีประเด็นอยู่ที่ Public key นี่แหละ ว่าเราจะรู้ได้อย่างไรว่า Public key ที่เราใช้ เป็นของคน ๆ นั้นจริง ๆ หรือเปล่า ซึ่งหนึ่งในวิธีแก้ปัญหาคือการใช้ Public key ที่มาจาก Certificate authority (CA) ที่น่าเชื่อถือนั่นเอง