Cryptography .. ทฤษฎีแห่งการเข้ารหัสลับ

ในคืนนั้น.. เจมส์ บอนด์ (คั้ง คั้ง ฉิก..แสดงโดย โจวซิงฉือ) เข้าไปขโมยเอาแผ่น disk แบบแปลนอาวุธร้ายแรงอันล่าสุดของแก๊งแมงป่องแดงแห่งจังหวัดไซตะมะได้สำเร็จ .. เขาเอาแผ่น disk เสียบเข้า PC เพื่อเปิดดูข้อมูลทันที…เสียง drive อ่านแผ่นได้ซักครู่ก็ปรากฏข้อความที่หน้าจอ..”กรุณาใส่กุญแจถอดรหัส แล้วกด enter” ..ฮั่นแน่..มันร้ายเว้ย..007 คิดในใจ..เขายิ้มที่มุมปากเล็กน้อย ..แล้วก็เอากุญแจ keylock ที่ขโมยมาจากแก๊งคูณสามแห่งจังหวัดบางกอกมาไขที่ keylock ของ PC พร้อมกับกด enter..แต่มันไม่เป็นผล..”อะไรกันกุญแจปลอมรึนี่ ?” 007 บ่นกับตัวเอง “ลองใหม่อีกทีซิ” ..ไม่ว่าจะลองกี่ครั้งก็ไม่สำเร็จ (จะไปสำเร็จได้ยังไง ก็ไข keylock ตัว keyboard ก็ถูกล็อคนะสิ) .. “บ้าที่สุด..เทคโนโลยีโหลยโท่ย .. ไม่เปิดดูก็ได้ฟะ” 007 สุดยอดสายลับสบถกับ PC ของเขาพร้อมกับขว้าง disk ทิ้งไป…

ถ้า 007 รู้จัก PC และเทคโนโลยีของการเข้ารหัสลับอีกซักนิดก็คงจะเปิดแผ่นได้ไม่ยากนักหรอก ครับ.. วันนี้ก็เลยจะมาเล่าเรื่องนี้ให้ฟังกัน “Cryptography .. ทฤษฎีแห่งการเข้ารหัส”. อืมม ..มาเริ่มที่ปัญหาเรื่องความปลอดภัยของข้อมูลกันก่อนนะครับ..จริงๆ แล้วปัญหาเรื่องความปลอดภัยของข้อมูลไม่ได้มีเฉพาะการเก็บข้อมูลเป็นความลับ อย่างเดียวนะครับ แต่เรามักจะนึกถึงการเก็บเป็นความลับนี้เป็นอย่างแรก ปัญหาเรื่องความปลอดภัยของข้อมูลทั้งหมดจะมี 4 อย่างครับ

  1. การเก็บข้อมูลเป็นความลับ (Confidentiality)
  2. การตรวจสอบความสมบูรณ์ของข้อมูล (Integrity)
  3. การตรวจสอบตัวตน และแหล่งที่มาของข้อมูล (Authentication)
  4. การป้องกันการปฏิเสธทั้งได้รับและไม่ได้รับข้อมูล (Non-repudiation)

Confidentiality เป็นปัญหาที่เราจะมองเห็นได้ชัดที่สุดในเรื่องความปลอดภัย เป็นเรื่องของการปกปิดข้อมูลเพื่อให้เฉพาะผู้ที่มีสิทธิสามารถดูได้เท่านั้น เทคนิคในการทำเก็บข้อมูลเป็นความลับก็คือการเข้ารหัสลับไงครับ (Encryption) การเข้ารหัสลับมีมานานมากแล้วตั้งแต่สมัยโรมันโน่นเลย..วิธีการง่ายๆ สมัยนั้นก็คือการเลื่อนตัวอักษร เช่น แทน A ด้วย B แทน B ด้วย C .. ต่อไปเรื่อยๆ จากนั้นก็เป็นแทนด้วยตัวอักษรจริงๆ โดยไม่เลื่อนคือจะสุ่มมั่วไปเลย อย่างเช่น A เป็น Z, B เป็น Q ทั้งสองวิธีนี้ปัจจุบันเป็นของเด็กเล่น..ถอดรหัสกันง่ายโดยวิธีทางสถิติ .. ปัจจุบันจะใช้การเข้ารหัสลับใช้ algorithm ที่ซับซ้อนมาก แต่ algorithm จะไม่ได้เป็นความลับนะครับ ตัวที่ต้องเก็บเป็นความลับจริงๆ คือข้อมูลที่เรียกว่า “กุญแจเข้ารหัสและกุญแจถอดรหัส” (Key) ..แปลว่า algorithm การเข้ารหัสนี้ก็รู้กันไปทั่ว..แจกกันเห็นๆ ..ความลับของข้อมูลอยู่ที่ key ครับ เอ้อ..แล้วทำไมไม่ให้ algorithm เป็นความลับล่ะ..คำตอบคือการเข้ารหัสโดย algorithm ที่เป็นความลับ (ไม่มี key) นี่มันแกะง่ายครับ..ทำลอกเลียนได้ง่ายกว่า เทคนิคมีมากมาย ทั้ง reverse engineering ทั้ง neural network เต็มไปหมด ปัจจุบันที่ใช้งานระดับสุดยอดก็จะเป็นลูกผสมคือเป็นความลับหมดทั้ง algorithm และ key การเข้ารหัสแบ่งหลักๆ ก็มีสองแบบตามการใช้งานของ key ล่ะครับ .. คือแบบที่เรียกว่า Symmetric key cryptography และ Asymmetric key cryptography อันแรกนี่เรียกอีกอย่างว่า Secret key cryptography อันที่สองบางทีเรียกว่า Public key cryptography สองอันนี้ต่างกันที่ key อย่างที่บอกครับ .. คือ symmetric key cryptography นี่จะใช้ key อันเดียวทั้งเข้าและถอดรหัส ส่วน asymmetric key cryptography จะมี key อันนึงสำหรับเข้ารหัส และมี key อีกอันนึงที่เข้าคู่กันกับ key เข้ารหัสเป็นตัวถอด กลไกของ symmetric key นี่คงเข้าใจได้ไม่ยากเนาะ..ใช้ key ไหนเข้ารหัสก็เอา key นั้นถอดออก ทำนองนี้น่ะ .. แต่แบบ asymmetric key นี่มันทำได้ยังไงล่ะเนี่ย ..asymmetric key cryptography จะมี key อันนึงที่ประกาศให้ชาวบ้านรู้ได้ไม่เป็นความลับเรียกว่า public key แล้วก็มี key ที่เข้าคู่กับ public key เราเก็บไว้เองเรียกว่า private key การใช้งานก็คือถ้าเราต้องการส่งข้อมูลลับไปให้ใครบางคน ก็เข้ารหัสด้วย public key ของคนนั้น เมื่อส่งไปถึงเค้าก็จะแกะข้อมูลที่เข้ารหัสได้โดยใช้ private key ซึ่งเป็นคู่ของ public key ที่เข้ารหัสมา ดังนั้นคนอื่นถึงจะเอาข้อมูลไปได้แต่ไม่มี private key ที่เป็นคู่ของมันก็จะแกะไม่ได้

ปัจจุบัน ทั้ง public และ private ที่เข้าคู่กัน สร้างได้จากเลขจำนวนเฉพาะขนาดใหญ่มากๆ เช่น 512 bits .. ถ้ายังไม่เยอะพอก็มีบาง algorithm ที่ใช้ถึง 4096 bits ..เอ..ทำไมต้องเป็นจำนวนเฉพาะล่ะ ?.. ก็เพราะว่าคุณสมบัติพิเศษอันนึงของจำนวนเฉพาะเมื่อเอามาคูณกันจะมีแค่จำนวน เฉพาะคู่นั้นที่หารผลคูณได้ key ส่วนใหญ่จะสร้างโดยใช้จำนวณเฉพาะสองตัวคูณกันเป็นเลขยกกำลังแล้วเอาผลลัพธ์ มาทำการคำนวณร่วมกับการ mod การจะหา key ได้จะต้องเอาผลคูณมาแยกตัวประกอบซึ่งทำได้ยากเพราะมีตัวประกอบเพียงสองตัว .. โดยสรุปเลขจำนวนเฉพาะทำให้การสร้าง key เลียนแบบทำได้ยาก .. ตัวอย่างเช่นการจะหา key ขนาด 664-bit (เลขฐานสิบ 200 หลัก) ถ้าใช้ brute-force (เทคนิคแบบลองทุกทางที่เป็นไปได้) ก็แกะกันประมาณ 4000 ปี โดยใช้เครื่องล้านเครื่องแต่ละเครื่องแยกตัวประกอบได้ล้านครั้งต่อวินาที ถ้าเป็น 1024-bit ก็ 10 กำลัง 10 ปี (เท่านั้นเอง..) ด้วยความยากในการแกะ key ทำให้ asymmetric key cryptography มีความปลอดภัยสูงกว่า เพราะจะรู้ข้อมูลต้องรู้ key..จะรู้ key ก็ต้องแกะเอาถ้าไม่มี ถ้าแกะยากกว่าก็ปลอดภัยกว่า (symmetric key มักจะใช้เลขสุ่มเอ ขนาดตั้งแต่ 56 bits การแกะก็ใช้ operation เท่ากับสองยกกำลังขนาดของ key การแกะจะเร็วกว่าเยอะ เพราะไม่ต้องเสียเวลาหาเลขจำนวนเฉพาะมาแยกตัวประกอบ)

คราว นี้มาดู algorithm ตัวที่ใช้งานกันจริงๆ บ้าง .. Symmetric key cryptography มีตัวที่เป็นมาตรฐานคือ Data Encryption Standard (DES) คิดค้นโดย IBM แต่กลายมาเป็นมาตรฐานทีหลัง DES ใช้ key 56 bits + 8 parity bits = 64 bits เป็น block cipher คือเข้ารหัสเป็น block ขนาด 64 bits การเข้ารหัสจะแบ่ง block ออกเป็นสองซีกซ้าย-ขวาแล้วเข้ารหัสด้วย key จากนั้นทำการสลับด้านซ้าย-ขวา สร้าง key ใหม่จาก key เดิมมาเข้ารหัส ทำแบบนี้ 16 รอบถึงจะได้ออกมาเป็น ciphertext ..(ลืมบอก…ข้อมูลที่ยังไม่เข้ารหัสจะเรียกว่าเป็น plaintext พอเข้าแล้วก็จะเรียกว่า ciphertext)

มีคนพิสูจน์ด้วย math แล้วว่า DES ปลอดภัยตั้งแต่การเข้ารหัสรอบที่ 4 ..น่าน..เอาเข้าไป..ฝรั่งนี่มันบ้าพิสูจน์จริงๆ.. DES เป็นมาตรฐานที่ตีพิมพ์และจดทะเบียนเป็น NIST FIPS PUB 46 (หาเอาเองเด้อว่าคืออะไร..ถ้าไม่เขียนเป็นตัวย่อจะยาวมาก) ความเร็วในการเข้ารหัสด้วย software บน 486DX-33MHz ได้ประมาณ 4 หมื่น blocks ต่อวินาที ถ้าเป็น DES VLSI Chip ความเร็วก็ประมาณ 4 ล้าน blocks ต่อวินาที แต่เพราะ key มันเล็กอาจทำให้ไม่ปลอดภัยพอ ก็มีคนแปลง DES ออกมาเป็น Triple-DES คือใช้ key สามอันเข้า DES สามครั้งต่อ block ..แกะยากเข้าไปอีก.. อีกอันนึงเป็นลูกพี่ลูกน้องของ DES ชื่อ IDEA (International Data Encryption Algorithm) ที่มี IDEA เพราะ DES นี่เค้าจดเป็นมาตรฐานในสหรัฐฯ ซึ่งมีกฎหมาย exportable code ควบคุมอยู่ ทำให้ประเทศอื่นใช้งานไม่สะดวก แต่ IDEA นี่พัฒนาในยุโรป แถม key ขนาดตั้ง 128 bits ปลอดภัยกว่า DES เยอะ ตัวอื่นๆ ที่เป็น symmetric key cryptography ก็มี FEAL, REDOC, LOKI, KHUFU, KHAFRE, RC2, และ SKIPJACK ส่วนมากจะ patents ไว้เอามาใช้หาเงินไม่ได้ แต่ถ้าจะศึกษาก็ขอเจ้าของก่อนได้ …อ้อ Password ใน UNIX ก็ใช้ algorithm คล้ายๆ กับ DES นี่แหละ รู้สึกว่าจะชื่อ crypt3 ครับ

มาดู Asymmetric key cryptography บ้าง..ที่ดังๆ คือ RSA Data Encryption คิดค้นโดย Ron Rivest, Adi Shamir, และ Leonard Adleman ที่อธิบายเรื่อง asymmetric key cryptography ก็มาจาก RSA นี่แหละ ..RSA มีข้อเสียที่ทำงานช้ามาก ประมาณ 100-1000 เท่าของ DES แต่มีความปลอดภัยสูงมาก ปกติเลยไม่ใช้เข้ารหัสลับกับข้อมูลตรงๆ แต่ใช้เข้ารหัสเพื่อแลก key ของ symmetric key cryptography ที่ทำงานเร็วกว่า เช่น ใช้ RSA เข้ารหัส key ของ DES เพื่อส่งให้ปลายทาง ทีนี้ก็เข้ารหัสข้อมูลโดย DES ส่งหากันได้..อะไรทำนองนี้ … RSA จดลิขสิทธ์ไว้แล้วเรียบร้อยเป็นของ RSA Data Security Inc. กับมหาลัยแห่งนึงในสหรัฐ RSA มีหลายเวอร์ชันตั้งแต่ 512 bits, จนถึง 2048 bits ครับ Asymmetric Key Cryptography นอกจาก RSA ก็มี RABIN, ElGamal, และ Elliptic Curve.

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

ประเภทของข้อมูล อายุ ขนาด key
กลยุทธ์ทางทหาร นาที/ขั่วโมง 56 bits
อัตราดอกเบี้ย วัน/สัปดาห์ 56-64 bits
ความลับทางการค้า เช่น สูตร Coca-cola สิบปีขึ้นไป 64 bits
ความลับทางทหาร เช่น Hydrogen bomb มากกว่า 40 ปี 128 bits
identity ของสายลับ (007..หึหึหึ) มากกว่า 50 ปี 128 bits
ความลับส่วนตัวของบุคคล มากกว่า 50 ปี 128 bits
ข้อมูลทะเบียนราษฎร์ 100 ปี อย่างน้อย 128 bits

สำหรับ นักศึกษาภาคคอมฯ..มีความลับเยอะและต้องเก็บรักษาเป็นเวลานาน.. แต่มักถูกเปิดเผยในเวลาอันสั้น.. โดยเฉพาะความลับแบบ”รู้แล้วอย่าบอกใครนะ..” หึๆๆ หลายคนสงสัยว่ามีวิธีเข้ารหัสที่ไม่มีวันแกะออกถ้าไม่มี key มั้ย ? … แปลกแต่จริง..มีครับ..แถมเข้ารหัสง่ายมากเลย วิธีนี้เรียกว่า one-time pad คิดค้นในปี 1917 โดยบริษัท AT&T เป็น Symmetric Key Cryptography ครับ วิธีเข้ารหัสและถอดรหัสใช้แค่ XOR อย่างเดียวและทำแค่ครั้งเดียวก็เสร็จ..key ก็สร้างง่ายเป็นข้อมูลสุ่มธรรมดา..เป็นไปได้ยังไงเนี่ย ?? แต่..มีดีก็มีเสีย..ข้อเสียคือ key จะมีขนาดใหญ่มากคือเท่ากับขนาดของข้อมูลที่จะเอามาเข้ารหัส แหะๆๆ ^^” ….เนื่องจาก key เป็นค่าที่สุ่มมา .. พอ XOR กับข้อมูลอะไรก็ตามมันก็จะกลายเป็นข้อมูลที่ไม่มีรูปแบบ ไม่มี pattern เป็นข้อมูลที่เรียกว่า truely random แกะยังไงก็ไม่ออกถ้าไม่มี key ยกตัวอย่างเช่น ข้อมูลเป็น

ONETIMEPAD

มี key เป็น

TBFRGFARFM

จะเข้ารหัสได้เป็น

IPKLPSFHGQ

ถ้าแกะด้วยข้อมูลที่ไม่ใช่ key ของมัน เช่น

POYYAEAAZX

จะกลายเป็น

SALMONEGGS

หรือใช้ key

BXFGBMTMXM

จะได้เป็น

GREENFLUID

ซึ่งแกะได้ อ่านออก แต่ไม่ใช่ข้อมูลที่แท้จริง ดังนั้นไม่ว่าจะใช้เครื่อง supercomputer ซักกี่เครื่อง ใช้เวลาเท่าไหร่ก็ตามข้อมูลจะไม่มีวันถูกถอดรหัสได้ถ้าไม่มี key ของจริง .. อ้อ…ที่เรียก one-timepad เพราะ key จะใช้ครั้งเดียวแล้วทิ้งเหมือนเข็มบริจาคเลือด (อย่าคิดเป็นอย่างอื่น…) ปัจจุบัน one-time pad ก็ยังมีคนใช้งานอยู่โดยจะเป็นการเข้ารหัสที่ต้องการความปลอดภัยสูงมากๆ ใน low-bandwidth communication เช่นสายโทรศัพท์ ..ว่ากันว่าโทรศัพท์ที่สายลับโซเวียตสมัยก่อนใช้ one-time pad เป็นตัวเข้ารหัสด้วยล่ะครับ

..วันถัดมา..ชินจังเก็บ disk ที่ 007 ทิ้งได้..เลยแอบไปใช้ PC ของคาซาม่าคุงเปิดดู..

“กรุณาใส่กุญแจถอดรหัส แล้วกด enter” ..ข้อความเดิมปรากฏที่หน้าจอ..ชินจังคิดซักครู่แล้วพิมพ์ลงไปว่า

“มอระกด มะนีจ๋าย” หน้าจอ PC ค่อยๆ จางลงจนมืดสนิท…แล้วปรากฏภาพ…จุด จุด จุด….จบ


References

  1. Bruce Schneier, Applied Cryptography, Wiley, 1994, ISBN 0-471-59756-2.
  2. Kitt Tientanopajai, and Prathan Srimanchandra, The Internet Security, Special Study Report, Asian Institute of Technology, March 1998.
  3. National Institute of Standard and Technologies, NIST FIPS PUB 46, January 1977.