แนวคิด
การทำธุรกิจกรรมอิเล็กทรอนิกส์จำเป้นต้องมีการยืนยันเอกสารหรือข้อมูลว่าถูกส่งมาจากผู้ส่งจริง เพื่อป้องกันการปฏิเสธความรับผิดชอบ (Non-repudiation) และเป็นการพิสูจน์ทราบตัวตน (Authentication) จากที่เราเคยศึกษาไปในหัวข้อ Asymmetric Key Cryptography ทำให้ทราบว่าการเข้ารหัสข้อมูลด้วย Private Key สามารถยืนยันผู้ส่งได้ ดังนั้น เนื้อในส่วนนี้จึงนำเสนอการประยุกต์ใช้กุญแจส่วนตัวกับกุญแจสาธารณะที่เรียนผ่านว่านำมาใช้ประโยชน์ได้จริงอย่างไรในชีวิตประจำวัน และเป็นการป้องกันความเข้าใจผิดที่หลายคนมักคิดว่าลายเซ็นอิเล็กทรอนิกส์คือการนำลายมือไปสแกนลงเครื่องสแกนเนอร์
วัตถุประสงค์
1. เพื่อให้เข้าใจหลักการทำงานของการแลกเปลี่ยนกุญแจส่วนตัว กับ กุญแจสาธารณะ
2. เพื่อให้ตระหนักถึงความปลอดภัยในการรับส่งข้อมูลในระบบเครือข่ายอินเทอร์เน็ต
3. เพื่อให้เข้าใจหลักการทำงานของ Certificate Authentication: CA
Digital Signatures
การทำธุรกรรมอิเล็กทรอนิคส์จำเป็นที่จะต้องมีการยืนยันเอกสารหรือข้อมูลว่าถูกส่งมาจากผู้ส่งจริงเพื่อป้องกันการปฏิเสธความรับผิดชอบ (Non-repudiation) และเป็นการพิสูจน์ทราบตัวตน (Authentication) จากที่เราได้ศึกษาไปในหัวข้อ Asymmetric Key Cryptography ทำให้ทราบว่าการเข้ารหัสข้อมูลด้วย Private Key สามารถยืนยันผู้ส่งได้ เช่น ผู้ใช้ A เข้ารหัสข้อมูลด้วย Private Key ของตนเองแล้วส่งข้อมูลไปให้ผู้ใช้ B และผู้ใช้ C จากนั้นผู้ใช้ B และผู้ใช้ C ก็ถอดรหัสโดยใช้ Public Key ของผู้ใช้ A ได้ เป็นการยืนยันว่าข้อมูลมาจากผู้ใช้ A จริง เพราะเป็นคนเดียวที่มี Private Key ของผู้ใช้ A
ในการส่งข้อมูลที่ “ไม่เป็นความลับ” และเป็นข้อมูลมีขนาดใหญ่ หากต้องการที่จะยืนยันผู้ส่งด้วยวิธีการข้างต้นเราจะต้องเข้ารหัสข้อมูลทั้งหมดด้วย Private Key ของผู้ส่ง (เพื่อเป็นการยืนยันตัวตนผู้ส่ง) แต่มีข้อเสียคือ จะต้องมีการเข้ารหัสข้อมูลขนาดใหญ่ทั้งหมด และผู้รับต้องถอดรหัสข้อมูลทั้งหมดเช่นกัน ซึ่งทำให้เปลือง CPU และเปลืองเวลาในการประมวลผล แต่อย่างไรก็ตามเราสามารถประยุกต์กรรมวิธีข้างต้น ให้ใช้ CPU และเวลาน้อยลงโดยใช้ฟังก์ชั่น Hash
เริ่มโดยนำข้อความต้นฉบับมาทำการ Hash เพื่อย่อยให้เป็นข้อมูลขนาดเล็ก (Message Digest) จากนั้นนำ Message Digest มาเข้ารหัสด้วย Private Key ของผู้ส่ง (ในขั้นตอนนี้จะใช้ CPU น้อยเพราะ Message Digest มีขนาดเล็ก) จากนั้นก็ส่งข้อมูลต้นฉบับ (ที่มีขนาดใหญ่และเป็นข้อมูลที่ “ไม่เป็นความลับ”) และ Message Digest ที่เข้ารหัสด้วย Private Key ไปยังผู้รับ เมื่อผู้ได้รับข้อมูลทั้งสอง ก็ทำการตรวจสอบว่าข้อมูลต้นฉบับมาจากผู้ส่งจริงหรือไม่และไม่มีการแก้ไขข้อมูลระหว่างทางใช่หรือไม่ โดยการนำ Message Digest (ที่เข้ารหัสด้วย Private Key ผู้ส่ง) มาถอดรหัสด้วย Public Key ของผู้ส่งให้กลับไปเป็น Message Digest ต้นฉบับเหมือนเดิม จากนั้นก็นำข้อมูลต้นฉบับที่มีขนาดใหญ่มาผ่านฟังก์ชั่น Hash ได้เป็น Message Digest อีกอันหนึ่ง จากนั้นก็ทำการเปรียบเทียบกัน หาก Message Digest ทั้งสองตรงกันก็แสดงว่าข้อมูลนั้นมาจากผู้ส่งจริงและไม่ได้ถูกเปลี่ยนแปลงระหว่างทาง จะเห็นได้ว่าสิ่งที่สามารถยืนยันว่าข้อมูลไม่ถูกเปลี่ยนแปลงและถูกส่งมาโดยผู้ส่งจริงนั้นคือ “Message Digest ที่ผู้ส่งได้เข้ารหัสด้วย Private Key ของผู้ส่ง” ซึ่งสิ่งนี้เองเราเรียกว่า Digital Signatures
รูปที่ 1 การทำงานของ Digital Signature
จากรูปสามารถสรุปขั้นตอนการทำงานของ Digital Signature ได้ดังนี้
1. นำข้อมูลต้นฉบับ (ซึ่งอาจจะมีขนาดใหญ่) มาทำการ Hash (ด้วยแฮชชิ่งอัลกอริทึมอย่างใดอย่างหนึ่ง เช่น MDS หรือ SHA1) ได้เป็นข้อมูลก้อนเล็กๆ เรียกว่า Message Digest
2. นำ Message Digest มาเข้ารหัสด้วย Private Key ของผู้ส่งได้เป็น “Digital Signatures”
3. ส่งข้อมูลต้นฉบับ (อาจจะขนาดใหญ่) ซึ่งอยู่ในรูปของ Plain Text ไปให้ผู้รับ โดยแนบ Digital Signatures ไปด้วย (มีการส่งข้อมูลไปยังผู้รับ 2 ชิ้น คือ (a) ข้อมูลต้นฉบับ และ (b) Digital Signatures)
4. ผู้รับเมื่อได้รับข้อมูลแล้วให้ตรวจสอบข้อมูลที่ได้รับ โดยการนำ Digital Signatures มาถอดรหัสโดยใช้ Public Key ของผู้ส่ง ได้เป็น Message Digest
5. ผู้รับนำข้อมูลต้นฉบับมา Hash (ด้วยอัลกอริทึมเดียวกันกับผู้ที่ส่งใช้ เช่น MD5 หรือ SHA1) ได้เป็น Message Digest อีกอันหนึ่ง
6. นำ Message Digest ทั้งสองมาเปรียบเทียบกัน หากตรงกันก็แสดงว่าข้อมูลต้นฉบับถูกต้องมาจากผู้ส่งจริงและไม่มี การเปลี่ยนแปลงข้อมูลระหว่างทาง
ข้อสังเกต
· สิ่งที่ทำให้มั่นใจได้ว่าข้อมูลถูกส่งมากผู้ส่งจริงคือ การที่ผู้รับสามารถอด Digital Signatures โดยใช้ Public Key ของผู้ส่งได้ แสดงว่าข้อมูลนั้นถูกเข้ารหัสโดยใช้ Private Key ของผู้ส่งจริงซึ่งผู้ที่มี Key นี้มีอยู่คนเดียวเท่านั้นคือผู้ส่ง
· สิ่งที่ทำให้มั่นใจได้ว่าข้อมูลไม่ถูกเปลี่ยนแปลงระหว่างทางคือ การเปรียบเทียบค่า Hash ทั้งสองแล้วพบว่าตรงกัน โดยค่าแฮชตัวหนึ่งมาจากการนำข้อมูลต้นฉบับ ดังนั้นหากทั้งสองค่านี้ตรงกันก็แสดงว่ามาจากข้อมูลเดียวกันเราสามารถส่ง Data, Digital Signatures และ Public Key ไปพร้อมกันได้ โดยส่ง Public Key ในรูปแบบของ Certificate (Public Key ที่ถูกรับรองโดย CA แล้ว) นอกจากนั้นการส่ง “ข้อมูลลับ” และลงลายเซ็นดิจิตอล ก็สามารถทำได้เช่นกัน โดยการนำขั้นตอนของ Digital Signatures ทั้ง 6 ขั้นตอนมาปรับโดยการแก้ไขขั้นตอนที่ 3 และ 5 ดังนี้
ขั้นตอนที่ 3 (ปรับใหม่) นำข้อมูลต้นฉบับ (อาจจะมีขนาดใหญ่) ซึ่งเป็น Plain Text มาเข้ารหัสด้วย Public Key ของผู้รับ ให้กลายเป็น Cipher Text จากนั้นจึงส่ง Cipher Text ไปให้ผู้รับ โดยแนบ Digital Signatures ไปด้วย (มีการส่งข้อมูลไปยังผู้รับ 2 ชิ้นคือ (a) ข้อมูลที่เป็น Cipher Text และ (b) Digital Signatures)
ขั้นตอนที่ 5 (ปรับใหม่) ผู้รับนำข้อมูลที่เป็น Cipher Text มาถอดรหัสด้วย Private Key ของตนเองได้เป็นข้อมูลต้นฉบับแบบ Plain Text จากนั้นทำการ Hash (ด้วยอัลกอริทึมเดียวกันกับที่ผู้ส่งใช้ เช่น MD5 หรือ SHA1) ได้เป็น Message Digest อีกอันหนึ่ง (เมื่อนำขั้นตอนที่ 3 และ 5 ที่ปรับใหม่ไปใช้ร่วมกับข้อที่ 1, 2, 4, 6 เดิมก็จะสามารถส่งข้อมูลลับพร้อมลงลายเซ็นดิจิตอลได้)
หลายคนเข้าใจผิดคิดว่าลายเซ็นดิจิตอลหมายถึงสิ่งต่อไปนี้
การเซ็นชื่อใส่กระดาษแล้วสแกนเก็บไว้ในรูปภาพแบบดิจิตอล
การเซ็นชื่อลงบนอุปกรณ์อิเล็กทรอนิคส์เพื่อเก็บลายเซ็นไว้ในรูปแบบดิจิตอล
รูปที่ 2 สิ่งที่คนทั่วไปมักจะเข้าใจ "ผิด" คิดว่าเป็น Digital Signatures