การเข้าและถอดรหัส ( Cryptography ) และความเป็นส่วนตัว ( Privacy )

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

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

การที่เราจะเข้าใจว่า cryptosystems ทำงานอย่างไรนั้น เราจะต้องเข้าใจหลักการของ key เสียก่อน โดยที่ key ก็คือตัวเลขหรือตัวอักษรลับจำนวนหนึ่งที่ถูกใช้โดยคอมพิวเตอร์ พร้อมกับการคำนวณโดยสูตรทางคณิตศาสตร์ที่ซับซ้อนที่เรียกว่า อัลกอริทึม ( algorithm ) ในการที่จะเข้ารหัสและถอดรหัสข้อความต่าง ๆ แนวคิดเบื้องหลังเรื่องนี้ก็คือว่า ถ้ามีใครเข้ารหัสข้อความด้วย key เอกไว้แล้ว ก็จะมีเพียงผู้ที่มี key ที่เหมือนกันเท่านั้นที่จะสามารถถอดรหัสข้อความนั้นออกมาได้

ระบบการเข้ารหัสที่ใช้กันอยู่ทั่วไปมีอยู่ 2 ระบบคือ ระบบการเข้ารหัสแบบ secret-key หรืออาจจะเรียกอีกอย่างหนึ่งว่า symmetric cryptography และแบบ public-key หรืออาจจะเรียกว่า asymmetric cryptography ซึ่งระบบ secret-key cryptography ที่ใช้กันมากที่สุดก็คือ Data Encryption Standard ( DES ) ส่วนระบบ public-key ที่รู้จักกันดีที่สุดก็คือ RSA

ในการเข้ารหัสแบบ secret-key เราจะใช้ key เพียงตัวเดียวในการเข้ารหัสและถอดรหัสข้อความ ดังนั้นทั้งผู้ส่งและผู้รับข้อมูลจะต้องทีสำเนา key ลับที่เหมือนกัน แต่การเข้ารหัสแบบ public-key จะมีวิธีการที่ต่างไป โดยจะมี key อยู่ 2 ตัว คือ public-key และ private key ซึ่ง public-key นั้นจะเปิดเผยต่อให้สาธารณชนให้รับรู้ได้ทั่วไป แต่ private key นั้นจะเก็บเป็นความลับอยู่ในคอมพิวเตอร์ของบุคคลนั้น ๆ เราสามารถเข้ารหัสข้อความโดยใช้ public-key แต่การที่จะถอดรหัสข้อความที่ถูกเข้ารหัสโดย public-key ได้จะต้องใช้ private key เท่านั้น ( จะใช้ public-key ตัวเดิมมาถอดรหัสไม่ได้ ) ตัวอย่างเช่น ถ้ามีคนต้องการส่งข้อความมาถึงคุณ เขาหรือเธอจะเข้ารหัสข้อความนั้นด้วย public-key ของคุณ ซึ่งอาจบอกให้ใคร ๆ รู้ก็ได้ แต่จะมีเพียงคุณเท่านั้นที่สามารถใช้ private key ทำการถอดรหัสข้อความนั้นแล้วอ่านมันออกมาได้ โดยที่แม้แต่ public-key ของคุณเองก็จะไม่สามารถที่จะใช้ในการถอดรหัสได้

ระบบการเข้ารหัสแบบ secret-key ไม่สามารถนำมาใช้สำหรับการทำธุรกิจทางอิเล็กทรอนิกส์อย่างกว้างขวางบนอินเตอร์เน็ตได้ ถ้าบริษัทใดทำธุรกิจบนอินเตอร์เน็ตโดยการใช้ระบบ secret-key นั้น ทางบริษัทจะต้องสร้าง key ออกมาเป็นล้าน ๆ ชุดที่แตกต่างกันสำหรับผู้ที่บริษัทติดต่อด้วยแต่ละราย และจะต้องคิดหาวิธีการที่จะส่ง key เหล่านั้นออกไปยังแต่ละคนผ่านอินเตอร์เน็ตอย่างปลอดภัย โดยไม่ให้ใครลอบอ่านหรือขโมยไปได้ด้วย ซึ่งเป็นเรื่องยุ่งยากมาก ในขณะที่ในระบบ public-key นั้น บริษัทเพียงแค่สร้างคู่ของ private และ public-key ชุดเดียวเท่านั้น บริษัทอาจจะส่ง public-key ไปให้ใครก็ได้ เพื่อไปใช้สำหรับเข้ารหัสข้อมูลที่จะส่งมาให้บริษัท แต่จะมีเพียงบริษัทเองนั้นเท่านั้นที่จะรู้และใช้ private key ถอดรหัสข้อมูลนั้นออกมาได้

ระบบการเข้าและถอดรหัส ( cryptosystems ) ทำงานอย่างไร ?

เนื่องจากธรรมชาติของอินเตอร์เน็ตเป็นโลกที่เปิดกว้าง ดังนั้นจึงเป็นการง่ายที่คนทั่วไปจะสามารถดังข้อมูลที่ส่งผ่านไปมาได้ และเป็นการยากที่จะส่งข้อความซึ่งเป็นความลับหรือข้อมูลทางด้านการเงินต่าง ๆ เช่น ข้อมูลของบัตรเครดิต เป็นต้น เพื่อแก้ปัญหานี้ จึงได้มีการคิดค้นระบบการเข้าและถอดรหัสหรือ cryptosystems ขึ้นมา ซึ่งระบบที่ได้รับความนิยมมากที่สุดเรียกว่า ระบบ RSA โดยจะใช้ key ในการเข้ารหัสและถอดรหัสข้อความ เพื่อให้มีแต่ผู้ส่งและผู้รับเท่านั้นที่สามารถเข้าใจข้อความนั้นได้ ระบบนี้มีเงื่อนไขว่าแต่ละคนจะต้องมี public-key ซึ่งบอกให้ใคร ๆ รู้ได้ทั่วไป และจะมี private key ซึ่งเก็บไว้ที่คอมพิวเตอร์ของแต่ละคน ข้อมูลที่เข้ารหัสด้วย public-key ของคนหนึ่งจะสามารถถอดรหัสได้โดย private key ของคน ๆ นั้นได้เท่านั้น ตัวอย่างเช่น

1. อุ้มต้องการจะส่งข้อมูลที่เป็นความลับไปให้เกมส์ผ่านระบบอินเตอร์เน็ต ซึ่งเกมส์จำเป็นจะต้องรู้วิธีที่จะถอดรหัสข้อความนั้น พร้อมกับต้องมีวิธีที่จะทำให้แน่ใจได้ว่าข้อมูลนั้นถูกส่งมาจากอุ้มจริง ๆ ไม่ใช่มาจากผู้แอบอ้างหลอกลวง ขั้นตอนแรก อุ้มนำข้อความของเขาไปผ่านอัลกอริทึมที่เรียกว่า hash function จะได้ตัวเลขมาค่าหนึ่งที่เรียกว่า message digest ซึ่งจะทำหน้าที่เหมือน ลายนิ้วมือดิจิตอล ( digital fingerprint ) ที่เกมส์จะใช้ตรวจสอบเพื่อให้แน่ใจว่าไม่มีใครมาแอบเปลี่ยนแปลงข้อความดั้งเดิมที่ส่งมาจากอุ้ม

2. อุ้มใช้ private key ของเขาเพื่อเข้ารหัส message digest ซึ่งจะได้ผลลัพธ์เป็น ลายเซ็นดิจิตอล ( digital signature ) ที่ไม่ซ้ำกับใคร ซึ่งมีเพียงแต่อุ้มเท่านั้นที่สามารถใช้ private key นี้ในการสร้างมันขึ้นมาได้

3. อุ้มจะสร้าง key ที่สุ่มขึ้นมาอีกตัวหนึ่ง โดยเขาจะใช้ key นี้ในการเข้ารหัสข้อมูลเดิมและลายเซ็นดิจิตอล และเกมส์ก็จะต้องมีสำเนา key ตัวนี้เพื่อที่จะถอดรหัสข้อความที่อุ้มส่งมา key นี้จะเป็น key เพียงตัวเดียวในโลกที่สามารถถอดรหัสเอาข้อมูลเดิมกลับมาได้ และ ณ จุดนี้ก็จะมีเพียงอุ้มเท่านั้นที่มี key นี้อยู่

4. อุ้มเข้ารหัส key ที่สุ่มมานี้ด้วย public-key ของเกมส์ ซึ่ง key สุ่มที่ถูกเข้ารหัสนี้จะถูกเรียกว่า ซองจดหมายดิจิตอล ( digital envelope ) ดังนั้นจึงมีเพียงเกมส์เท่านั้นที่สามารถถอดรหัส key สุ่มนี้ได้ เพราะว่ามันถูกเข้ารหัสด้วย public-key ของเกมส์เอง ดังนั้นเกมส์จึงเป็นผู้เดียวที่สามารถถอดรหัสได้ด้วย private key ของเขาเอง

5. อุ้มส่งข้อมูลทั้งหมดให้เกมส์ทางอินเตอร์เน็ต ซึ่งจะประกอบด้วย ข้อมูลเดิมที่ถูกเข้ารหัส ลายเซ็นดิจิตอลที่ถูกเข้ารหัส และซองจดหมายดิจิตอลที่ถูกเข้ารหัส

6. เมื่อเกมส์ได้รับข้อความนั้นแล้ว เกมส์จะถอดรหัสซองจดหมายดิจิตอลด้วย private key ของเกมส์เอง ซึ่งก็จะได้ key สุ่มที่อุ้มใช้ในการเข้ารหัสข้อความออกมา

7. เกมส์จะใช้ key สุ่มที่ได้นี้ในการถอดรหัสข้อมูลของอุ้ม จากนั้นเกมส์ก็จะสามารถอ่านข้อมูลเดิมที่อุ้มส่งมาได้ อย่างไรก็ตามเกมส์ก็ยังไม่อาจจะแน่ใจได้ว่า ข้อความนั้นถูกแก้ไขระหว่างทางที่ส่งมา หรือเป็นข้อความที่อุ้มส่งมาจริงหรือไม่

8. เกมส์จะใช้ public-key ของอุ้มในการถอดรหัสลายเซ็นดิจิตอล เพื่อจะได้ message digest ออกมา ซึ่งจะถือว่าเป็น ลายนิ้วมือดิจิตอล ( digital fingerprint ) ของข้อความนั้น ( เหมือนกับในข้อ 1. )

9. เกมส์จะใช้ message digest นี้เพื่อตรวจสอบว่าข้อความที่ถูกส่งมานั้น มาจากอุ้มจริงหรือไม่ และถูกผู้อื่นมาแก้ไขเปลี่ยนแปลงไปหรือไม่ โดยเกมส์จะนำข้อมูลเดิมที่เกมส์ถอดรหัสแล้วนั้นมาผ่านอัลกอริทึมที่เรียกว่า hash function เช่นเดียวกับที่อุ้มเคยรันในข้อ 1. ผลก็คือจะได้ message digest ตัวใหม่ออกมา

10. เกมส์จะเปรียบเทียบ message digest ที่ได้มาจากการคำนวณที่เกมส์เอง และจากที่ได้มาจากการถอดรหัสลายเซ็นดิจิตอลของอุ้ม ถ้าหากตรงกันทุกประการ เกมส์ก็สามารถแน่ใจได้ว่าข้อความนั้นมาจากอุ้มจริง ๆ และไม่ได้ถูกเปลี่ยนแปลงระหว่างทางที่ส่งมา แต่ถ้าหากตัวเลขทั้งสองไม่ตรงกัน เกมส์ก็จะทราบว่าข้อความนั้นไม่ได้ส่งมาจากอุ้ม หรือมีคนมาเปลี่ยนแปลงข้อความหลังจากที่อุ้มได้เขียนมันขึ้นมา

7 มีนาคม 2541




[ home ] [ menu ] [ Internet ]