การเข้ารหัสคือการแปลงข้อมูลต้นฉบับหรือที่เรียกว่า “Plaintext” นำไป “Encrypt” คือทำเป็นข้อมูลอีกแบบหนึ่งที่เรียกว่า “Ciphertext” โดยทำให้มีเฉพาะผู้ได้รับอนุญาตเท่านั้นจึงสามารถ “Decrypt” หรือแปลง “Ciphertext” กลับไปเป็น “Plaintext” ได้ ประวัติศาสตร์ของมนุษย์เรามีความลับต่างๆอยู่ในทุกยุคสมัย การคิดค้นวิธีการที่จะปกป้องความลับเหล่านั้นจึงถูกพัฒนาเรื่อยมาตั้งแต่ในอดีตจนถึงปัจจุบัน
การเข้ารหัสในยุคแรก
ในยุคแรกของการเข้ารหัสแน่นอนว่าเทคโนโลยีต่างๆยังไม่ได้เกิดขึ้น แต่ว่าผู้คนในทุกยุคสมัยก็ยังจำเป็นต้องปกป้องข้อมูลสำคัญของตนเอง จึงมีการเข้ารหัสด้วยวิธีต่างๆตั้งแต่การใช้สัญลักษณ์ต่างๆ การใช้อุปกรณ์หรือสิ่งของ จนกระทั่งพัฒนามาใช้คอมพิวเตอร์ในที่สุด ลองไปดูตัวอย่างการเข้ารหัสในแต่ละยุคกัน
1,900 ปีก่อนคริสต์ศักราช: ในอียิปต์มีการใช้ “Hieroglyphs” ที่เป็นอักษรโบราณประกอบด้วยตัวอักษรและสัญลักษณ์ต่างๆ ซึ่งการจะอ่านเข้าใจได้จะต้องมีความรู้เกี่ยวกับตัวอักษรเหล่านั้น จึงนับว่าเป็นการเข้ารหัสในยุคแรกๆ
600 ปีก่อนคริสต์ศักราช: มีอุปกรณ์เข้ารหัสที่ชื่อว่า “scytale” หรือ “skytale” โดยเป็นเส้นแผ่นหนังที่พันบนท่อนไม้ซึ่งตอนที่คลี่ออกมาตัวอักษรบนแผ่นหนังจะอ่านไม่มีความหมาย ซึ่งจะต้องใช้ท่อนไม้ที่มีขนาดถูกต้องเหมือนตอนที่เขียนลงไปเพื่อทำให้ตัวอักษรเรียงกันเหมือนต้นฉบับ
60 ปีก่อนคริสต์ศักราช: Julius Caesar ได้คิดค้นการเข้ารหัสที่ทำการเลื่อนตัวอักษรทุกตัวด้วยจำนวนที่กำหนด ทำให้ไม่สามารถอ่านข้อความที่ถูกเลื่อนแล้วเข้าใจได้ ในปัจจุบันเรียกวิธีการนี้ว่า “Caesar cipher”
ปี 1,918: วิศวกรชาวเยอรมันได้สร้างเครื่อง “Enigma” ออกจำหน่ายในเชิงพาณิชย์ ซึ่งกองทัพนาซีได้นำไปใช้ในการเข้ารหัสข้อมูลทางการทหาร ซึ่งราวปี 1,932 การเข้ารหัสด้วยเครื่อง Enigma นี้ก็ถูกถอดได้โดยนักคณิตศาสตร์ชาวโปแลนด์และส่งผลต่อความได้เปรียบเสียเปรียบในสงครามโลกครั้งที่ 2
ปี 1,970: IBM ได้ตั้งกลุ่มเพื่อสร้างการเข้ารหัสข้อมูลเพื่อปกป้องข้อมูลของลูกค้า ต่อในในปี 1,973 ประเทศสหรัฐอเมริกาก็ได้เลือกวิธีนี้เป็นมาตรฐานการเข้ารหัสที่รู้จักกันในชื่อ “Data Encryption Standard” หรือ “DES” ซึ่งมีการใช้เป็นงานยาวนานจนกระทั้งปี 1,997 ถึงได้ถูกถอดรหัสได้
ปี 2000: ได้มีวิธีการเข้ารหัสที่ถูกใช้แทนที่ DES โดยมีชื่อว่า “Advanced Encryption Standard” หรือ “AES” ซึ่งกลายเป็นมาตรฐานใหม่ที่ใช้งานได้ฟรีและแพร่หลายไปทั่วโลก
การเข้ารหัสปัจจุบันในระบบคอมพิวเตอร์ และ การประยุกต์ใช้การเข้ารหัส
ในปัจจุบันการเข้ารหัสข้อมูลในคอมพิวเตอร์มีการพัฒนาใช้วิธีการที่ซับซ้อนขึ้นและมีวิธีการมากมายถูกคิดค้นขึ้นมา แต่เราสามารถแบ่งวิธีการเข้ารหัสออกเป็น 2 ประเภทจากลักษณะการ “Encrypt” และ “Decrypt” ได้แก่
การใช้รหัสแบบกุญแจสมมาตร (Symmetric Key Cryptography)
เป็นวิธีการเข้ารหัสแบบตรงไปตรงมาคือในขั้นตอนการ “เข้ารหัส” และ “ถอดรหัส” จะใช้ “กุญแจ” เพียงตัวเดียวในการทำ หมายความว่าทั้งฝั่งผู้ส่งและผู้รับข้อมูลจะต้องมีกุญแจที่เหมือนกัน เพื่อให้สามารถส่งผ่านข้อมูลเข้ารหัสได้สำเร็จ เป็นที่มาของคำว่า “สมมาตร” ในชื่อนั่นเอง ซึ่งกุญแจนี้จะอยู่ในรูปแบบของรหัสคอมพิวเตอร์ ถ้าขนาดของกุญแจที่หน่วยเป็นบิท (bit) ยิ่งมาก ความยากในการแกะรหัสก็ยิ่งยากตาม ตัวอย่างการเข้ารหัสแบบกุญแจสมมาตร เช่น RC4, QUAD, AES, DES, Blowfish, 3DES เป็นต้น ซึ่งการใช้งานจริงที่อาจจะเคยใช้กันก็คือการเข้ารหัสข้อมูลต่างๆโดยทั่วไปที่ต้องรู้รหัสผ่านที่ถูกต้องเพื่ออ่านข้อมูล
การใช้รหัสแบบกุญแจอสมมาตร (Asymmetric Key Cryptography)
สำหรับวิธีนี้คำว่า “อสมมาตร” ก็หมายการที่ใช้ “กุญแจ” ที่ไม่เหมือนกันในการเข้าและถอดรหัส ได้แก่ “กุญแจส่วนตัว” (Private Key) และ “กุญแจสาธารณะ” (Publib Key) โดยการใช้งานก็ตรงตามชื่อของแต่ละกุญแจคือกุญแจส่วนตัวต้องเก็บไว้เป็นความลับที่เจ้าของเพียงคนเดียว ส่วนกุญแจสาธารณะต้องเผยแพร่ออกไปให้ทุกคนเข้าถึงได้ ซึ่งการใช้งานก็คือใช้กุญแจดอกหนึ่งเพื่อทำการเข้ารหัส โดยฝั่งผู้รับข้อมูลจะต้องใช้กุญแจอีกดอกเพื่อถอดรหัส โดยจะเริ่มจากกุญแจส่วนตัวหรือกุญแจสาธารณะก็ขึ้นอยู่วัตถุประสงค์ในการใช้งาน ตัวอย่างวิธีการเข้ารหัสที่เป็นกุญแจอสมมาตร เช่น Diffie-Hellman และ RSA เป็นต้น ส่วนการใช้งานจริงเช่นการสร้างลายเซ็นดิจิทัล (Digital Signature) เพื่อยืนยันว่าข้อมูลถูกสร้างโดยบุคคลดังกล่าวจริงๆเหมือนการเซ็นชื่อเพื่อรับรองความถูกต้องนั่นเอง
Hashing Vs Encryption
สำหรับคนที่เคยผ่านตากับสองคำนี้มาบ้าง อาจจะเข้าใจว่ามันเป็นการเข้ารหัสเหมือนๆกัน แต่ว่าจริงๆแล้วทั้ง Hashing และ Encryption นั้นทำงานต่างกันและมีจุดประสงค์ในการใช้งานต่างกัน
การ Hash ที่เราน่าจะเคยเห็นกันมา เช่น MD5, SHA1, SHA256, SHA-512 สิ่งที่วิธีการหรืออัลกอริทึมเหล่านี้ทำก็คือการสร้างชุดข้อมูลขึ้นมาใหม่เพื่อแสดงถึงข้อมูลบางอย่าง โดยเป็น “การแปลงข้อมูลแบบทางเดียว” เพราะว่า’
“ข้อมูลที่แปลงไปแล้วจะไม่สามารถแปลงกลับได้”
และลักษณะของข้อมูลที่ Hash ก็คือไม่ว่าข้อมูลต้นฉบับจะยาวแค่ไหน แต่เมื่อ Hash ด้วยอัลกอริทึมเดียวกันแล้วก็จะได้ข้อมูลที่มีความยาวเท่าเดิมเสมอ เอาเป็นว่ายกตัวอย่างการใช้งาน Hashing ก็แล้วกัน เช่น
- ในการเก็บข้อมูลรหัสผ่านของผู้ใช้งาน ระบบส่วนใหญ่จะเก็บเป็นข้อมูลที่ถูก Hash แล้วไว้ในระบบ เพราะถึงแม้ในอนาคตจะเกิดเหตุการณ์ข้อมูลหลุดออกไป แต่คนที่ได้ข้อมูลไปก็จะเห็นเป็นเพียงข้อมูลที่ Hash แล้ว ไม่สามารถแปลงกลับไปเป็นรหัสผ่านจริงๆได้อยู่ดี
- อีกการใช้งานก็คือการใช้เพื่อ “ยืนยันความถูกต้องของข้อมูล” หรือ “ตรวจสอบว่าข้อมูลไม่ถูกเปลี่ยนแปลง” อย่างตอนที่เราโหลดไฟล์สำคัญๆเมื่อดาวน์โหลดเสร็จแล้ว ไฟล์ที่ได้อาจจะเกิดความผิดพลาดระหว่างดาวน์โหลด ซึ่งเจ้าของไฟล์เหล่านั้นก็อาจจะสร้างไฟล์ Hash จากต้นฉบับเอาไว้ เราก็แค่นำมาเปรียบเทียบกับ Hash ที่ได้จากไฟล์ที่เราดาวน์โหลดมา ซึ่งถ้าไฟล์ถูกต้องสมบูรณ์ค่า Hash ก็ต้องเหมือนกันนั่นเอง
สรุปก็คือ
- Hashing จะใช้เพื่อแปลงข้อมูลให้เป็นข้อมูลใหม่ที่มีความยาวเท่าเดิมเสมอไม่ว่าต้นฉบับจะยาวแค่ไหน และค่าที่ Hash แล้ว จะไม่สามารถแปลงกลับไปเป็นข้อมูลดั้งเดิมได้
- Encryption จะใช้เพื่อเข้ารหัสเพื่อป้องกันการเข้าถึงโดยไม่ได้รับอนุญาต ซึ่งจะถอดรหัสเพื่อให้ได้เป็นข้อมูลต้นฉบับได้เมื่อมีกุญแจที่ถูกต้อง
แหล่งอ้างอิง:
- https://www.w3schools.in/cyber-security/modern-encryption
- https://www.nrca.go.th/content/02-1.html
- https://en.wikipedia.org/wiki/Encryption
- https://www.thalesgroup.com/en/markets/digital-identity-and-security/magazine/brief-history-encryption
- https://www.sans.org/reading-room/whitepapers/vpns/history-encryption-730