Cryptography .. ทฤษฎีแห่งการเข้ารหัส
เกร็ดความรู้วันละเรื่องจากผม เส้นผม (Online)
ผู้เข้าชมรวม
2,937
ผู้เข้าชมเดือนนี้
0
ผู้เข้าชมรวม
เนื้อเรื่อง
คุณแน่ใจว่าต้องการคืนค่าการตั้งค่าทั้งหมด ?
ในคืนนั้น.. เจมส์ บอนด์ (คั้ง คั้ง ฉิก..แสดงโดย โจวซิงฉือ) เข้าไปขโมยเอาแผ่น
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
1.กลยุทธ์ทางทหาร / นาที/ขั่วโมง / 56 bits
2.อัตราดอกเบี้ย / วัน/สัปดาห์ / 56-64 bits
3.ความลับทางการค้า เช่น สูตร Coca-cola / สิบปีขึ้นไป / 64 bits
4.ความลับทางทหาร เช่น Hydrogen bomb / มากกว่า 40 ปี / 128 bits
5.Identity ของสายลับ (007..หึหึหึ) / มากกว่า 50 ปี / 128 bits
6.ความลับส่วนตัวของบุคคล / มากกว่า 50 ปี / 128 bits
7.ข้อมูลทะเบียนราษฎร์ / 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 ค่อยๆ จางลงจนมืดสนิท...แล้วปรากฏภาพ...จุด จุด จุด....จบ
ผลงานอื่นๆ ของ เส้นผม ดูทั้งหมด
ผลงานอื่นๆ ของ เส้นผม
ความคิดเห็น