โดยทั่วไปแล้วการเข้ารหัสนั้นจะใช้สำหรับการเข้ารหัสนั้นจะใช้สำหรับการแปลงข้อมูลในรูปแบบหนึ่งออกไปยังอีกรูปแบบหนึ่งที่สามารถนำไปใช้งานต่อได้ แต่การเข้ารหัสทั้ง 3 แบบในวันนี้นั้นจะมีความแตกต่างกันออกไป บางวิธีอาจจะไม่ใช้รหัสเลย บางวิธีใช้รหัส และบางวิธีเข้ารหัสโดยไม่สามารถถอดรหัสได้
บทความนี้จะแบ่งเนื้อหาการเข้ารหัสออกเป็น 2 ส่วน โดยส่วนแรก Encoding จะเป็นการเข้ารหัสเพื่อแปลงรูปแบบข้อมูลให้สามารถใช้กับแพลตฟอร์มอื่น ๆ ได้ โดยไม่มีการรหัสหรือการทำ hashing สามารถนำไปถอดรหัสได้ เพียงแค่รู้ว่าฟอร์แมตที่จะนำไปใช้ต่อคืออะไร ส่วนที่ 2 จะเป็น Encryption and Hashing คือการเข้ารหัสเพื่อความปลอดภัย และการพิสูจน์ข้อมูล
หลายคนคงเคยสงสัยว่าทำไมเราต้องมีการเข้ารหัสข้อมูลต่าง ๆ และการเข้ารหัสข้อมูลนั้นมีประโยชน์ในเรื่องใดบ้าง แน่นอนว่าการเข้ารหัสข้อมูลมีมาตั้งแต่สมัยที่เรายังไม่มีคอมพิวเตอร์เสียอีก ทั้งยุคของจูเลียส ซีซาร์ที่มีการเข้ารหัสด้วยวิธีการขยับอักษร เพื่อให้ฝ่ายตรงข้ามไม่สามารถอ่านข้อมูลได้อย่างถูกต้อง หรือแม้กระทั่งการเข้ารหัสจากฝั่งนาซีเกี่ยวกับการโจมตีพื้นที่ต่าง ๆ โดยไม่ให้ฝ่ายตรงข้ามสามารถรู้ข้อมูลได้
อย่างไรก็ตามเราสามารถถอดรหัสได้ว่าข้อความดังกล่าวนั้นถูกบันทึกว่าอย่างไร โดยจะต้องทราบวิธีการถอดรหัสก่อน อย่างเคสของจูเลียส ซีซาร์ เมื่อเราพบว่ามีการขยับตัวอักษรจากเดิมไป 4 ตำแหน่ง เราก็จะใช้วิธีย้อนอักษรบนข้อความเข้ารหัส เพื่อให้ได้ข้อความต้นฉบับ หรือแม้กระทั่งเคสสงครามโลกที่ได้มีการผลิตเครื่อง enigma ที่ใช้สำหรับถอดรหัสข้อความจากฝ่ายนาซี จนได้รับความชนะ
ก่อนอื่น เราจะต้องแยกก่อนว่าการเข้ารหัสนั้นมี 2 รูปแบบ คือการเข้ารหัสแบบทางเดียว ที่ใช้สำหรับการตรวจสอบความเหมือน / ความแตกต่างกันของข้อมูลแต่ละชุด การเข้ารหัสแบบทางเดียวจะไม่สามารถถอดรหัสได้ ถ้าไม่มีข้อความต้นฉบับมาใช้เข้ารหัสแล้วเอาข้อมูลไปเทียบกัน
การเข้ารหัสแบบ 2 ทาง คือการที่เราสามารถเข้ารหัสโดยถือ Key ไว้ แล้วส่งต่อ Key ชุดดังกล่าวให้กับผู้ที่ต้องการถอดรหัสข้อความ หากมี key ที่ตรงกันก็จะสามารถถอดรหัสข้อความออกมาได้สมบูรณ์ แต่หาก Key ไม่ตรงกันก็จะได้ข้อความที่ไม่ถูกต้อง ไม่สามารถนำไปใช้งานต่อได้
หากใครเคยส่งจดหมาย ก็น่าจะสามารถเข้าใจหลักการเข้ารหัสที่จะกล่าวข้างต้นนี้ได้ง่ายขึ้น
รูปแบบของการเข้ารหัสโดยไม่มี Key ในการถอดรหัส เราสามารถแปลงข้อความกลับไปเป็นข้อความเดิมผ่านการ decoding ได้หากรู้ฟอร์แมตมาตรฐานที่ใช้ในการ decode ยกตัวอย่าง เช่น เราเปิดไฟล์ Excel แล้วเป็นภาษาที่เราไม่สามารถอ่านออกได้ เราสามารถเลือกแปลงเป็น ASCII , UTF-8 เพื่อให้ได้ภาษาที่เราต้องการนำไปใช้ อย่างไรก็ตามการ encoding นั้นไม่ได้ถูกทำมาเพื่อมาตรฐานด้านความปลอดภัยเป็นหลัก แต่ใช้สำหรับการที่แอพพลิเคชั่นจะสามารถอ่านไฟล์ตามความสามารถของภาษานั้นๆ ได้ สังเกตได้ว่าไม่ได้มีแค่ไฟล์ text เท่านั้น
Encoding ยังสามารถใช้กับไฟล์มีเดียอื่น ๆ ได้ด้วยเช่นกัน คุณสามารถอ่าน Use Case ของ encoding ได้จากบทความแก้ไขภาษาแปลก ๆ เมื่อคุณทำงานบน Excel
ยกตัวอย่างเช่น จดหมายนี้เป็นภาษาอังกฤษ ถ้าคุณสามารถแปลข้อความภาษาอังกฤษเป็นภาษาไทยได้ คุณก็สามารถอ่านมันออกได้นะ
Encryption & Decryption คือวิธีการเข้ารหัส และถอดรหัสแบบ 2 ทาง โดยปกติแล้วจะใช้สำหรับการรับส่งข้อความเพื่อความปลอดภัย และให้ผู้รับสามารถรับสารได้อย่างถูกต้อง โดยใช้รหัสถอดข้อความชุดเดียวกัน (Key) ตัว Key ตรงนี้ก็เปรียบเสมือนลายเซ็นต์ของเรานั่นเอง
โดยเราจะมี Cipher Text หรือตัวกำหนดคุณสมบัติการแปลงข้อความ เช่น การเลื่อนตัวอักษร (Shift Cipher) ,การแทนที่ตัวอักษร (Substitution Cipher) และ การจัดเรียงตัวอักษรในรูปแบบเส้น (Transposition Cipher)
การเข้ารหัสในรูปแบบนี้มีทั้งจะนิยมใช้กัน 2 รูปแบบ
Asymmetric Encryption คือการใช้ Public Key ในการเข้ารหัส และใช้ Private key ที่อยู่บนเซิร์ฟเวอร์ในการถอดรหัส ซึ่งหมายความว่าใครก็ตามสามารถส่งข้อความเข้าหาเราได้ แต่จะมีเพียงเราเท่านั้นที่สามารถเปิดออกได้ เพราะเรามีลายเซ็นต์สำหรับการเกิดอ่านข้อความ (Key)
Symmetric Encryption คือการที่ผู้ใช้งานทั้งผู้ส่ง และผู้รับ ใช้ Private Key เหมือนกัน สามารถถอดรหัสได้ และมีการทำการยืนยันตัวตนก่อนที่จะแลกเปลี่ยนข้อมูลกัน (SSL Handshake) ซึ่งหมายความว่า ก่อนที่เราจะส่งหรือรับจดหมาย เราจะมีการยืนยันตัวตนก่อนว่าเราใช้ภาษาเฉพาะเดียวกันเพื่อสื่อสารกัน ถ้าคนส่งจดหมายใช้ภาษาไม่ถูกต้อง เราก็จะรู้ว่าคนส่งไม่ใช่คนที่มีภาษาเฉพาะแบบเดียวกัน หรือบางทีเราก็อาจจะไม่ใช่ผู้รับที่แท้จริง (แบบเคสจดหมายผิดซอง)
อัลกอรึทึมที่มีการใช้เข้ารหัสในปัจจุบัน
1. AES (Advanced Encryption Standard) เป็นอัลกอรึทึมเข้ารหัสแบบสมมาตร เป็นการเข้ารหัสระดับบล็อคข้อมูล 128 บิต ก่อนจะนำไปแปลงเป็น 256 บิต เราเรียกว่าการนำไปเข้ารหัสซ้ำ ๆ ดังนั้นจึงมีความเป็นไปได้มหาศาล จำนวนนี้มี 78 หลักและมีค่าใหญ่มากจนไม่สามารถแสดงผลอย่างเต็มที่ได้ในรูปแบบปกติของคอมพิวเตอร์ทั่วไป
2. RSA (Rivest-Shamir-Adlemen) เป็นอัลกอรึทึมเข้ารหัสแบบอสมมาตร การทำงานของ RSA จะใช้วิธีการแยกตัวประกอบของจำนวนเฉพาะในการเข้ารหัสข้อมูล
3. ECC (Elliptic Curve Cryptography) เป็นการเข้ารหัสโดยอาศัยโครงสร้างพีชคณิตเชิงเส้น ของเส้นโค้งวงรีแบบจำกัด
4. PGP (Pretty Good Privacy) ความพิเศษของ PGP คือมันรวมเอาอัลกอริทึมหลายรูปแบบเอาไว้ภายในตัว เพื่อใช้ในขั้นตอนการ Hashing, Data Compression, Public Key และ Private Key โดยในแต่ละขั้นตอนจะใช้อัลกอริทึมที่แตกต่างกันในการเข้ารหัส อย่างไรก็ตาม PGP ถูกตำหนิว่ามีข้อจำกัดในการใช้งาน, ขาดความหลากหลาย และความยาวของ Key
เราสามารถส่งไฟล์ข้อมูลสำคัญในรูปแบบต่างๆ โดยสามารถ encrypt file แล้วส่งรหัสให้กับผู้รับไฟล์ เพื่อให้ผู้รับไฟล์สามารถเปิดอ่านไฟล์ที่เข้ารหัสได้
การ Hashing ถูกนำมาใช้เพื่อเข้ารหัสข้อมูลแบบทางเดียว โดยที่ไม่ต้องการให้ผู้รับถอดข้อความออกมา แต่ผู้รับเองต้องมีข้อมูลที่จะต้องไปนำมา Hashing ในรูปแบบเดียวกัน แล้วนำมาเทียบกัน เพื่อตรวจสอบความถูกต้องของข้อมูล
คุณสมบัติของการ Hashing
- ข้อความเดียวกันส่งผลให้มีค่าแฮชเดียวกันเสมอ
- คำนวณค่าแฮชอย่างรวดเร็ว
- เป็นไปไม่ได้ที่จะมีข้อความสองข้อความที่มีค่าแฮชเดียวกัน เรียกว่า "การชนกัน" (Collision)
- เป็นไปไม่ได้ที่จะสร้างข้อความที่ให้ค่าแฮชที่กำหนด
- การเปลี่ยนแปลงเล็กน้อยในข้อความควรเปลี่ยนค่าแฮชที่ได้รับอย่างกว้างขวางเพื่อให้ดูเหมือนว่าไม่สัมพันธ์กับแฮชดั้งเดิม (Salt)
การ hashing จะทำงานโดยการเข้ารหัสข้อมูลที่ไม่มีโอกาสซ้ำกัน หากข้อความต้นฉบับเป็นคนละชุด อย่างไรก็ตามในช่วงแรก Google ค้นพบว่ามีโอกาสที่ข้อมูลจะซ้ำกันได้ (Collision) จากช่องโหว่บางอย่างของ SHA-2 ซึ่งเป็นมาตรฐานในการเข้ารหัสในช่วงแรก แต่ก็แทบจะเป็นไปไม่ได้เลย ที่จะเกิดเหตุการณ์แบบนั้น
อย่างไรก็ตามข้อมูลที่ถูก Hashing ก็สามารถถูกถอดรหัสได้ผ่านวิธีการ Reverse Engineer ย้อนกลับข้อมูลที่ถูกเข้ารหัสแบบทางเดียว แม้ว่าจะเป็นไปได้ยากก็ตาม เพราะฉะนั้นจึงมีการทำ Salt เพื่อเพิ่มความยากในการถอดรหัส โดยการ Salt คือการเติม รหัสสุ่มต่อท้ายข้อความไป ยกตัวอย่างเช่น ข้อความ todayiswendy แล้วเราสุ่ม salt เป็น A2%eIE นำไปต่อท้าย ก็จะได้ค่า hashed ที่ไม่เหมือนกับ todayiswendy สามารถทดสอบได้ที่ SHA256 Generator
นอกจากจะเพิ่มความยากในการถอดรหัสได้แล้ว Salt ยังช่วยให้เรารอดจากการโจมตีแบบ Brute force
โดยเราสามารถเก็บ Salt แยกคนละไฟล์แล้วส่งให้ผู้รับใช้ในการช่วย Hashing ข้อความก่อนนำมาเปรียบเทียบกัน และ Salt ควรจะเป็นค่าสุ่มที่ไม่เหมือนกันในแต่ละแถว กรณีที่มีข้อมูลเข้ารหัสหลายแถว
อัลกอรึทึมที่ใช้ในการ hashing
1. MD4 (Message-Digest Algorithm 4) เป็น อัลกอรึทึมที่ถูกพัฒนาในช่วงแรกๆ แต่ก็มีช่องโหว่เรื่องความปลอดภัย
2. MD5 (Message-Digest Algorithm 5) ถูกพัฒนามาจาก MD4 แต่ก็มีปัญหาเรื่องความปลอดภัย วิธีการแปลงค่า MD5 สามารถทำได้โดยวิธีการนำ a-z แล้วนำไปวนซ้ำต่อไปเรื่อยๆ จนเกิด Hash Collision เช่นกัน จนต้องยกเลิกแล้วไปใช้ MD6 แทน
3. SHA (Security Hashing Algorithm) เป็นอัลกอรึทึมที่ใช้ในการแปลงข้อความ แล้วคืนค่าข้อความตามความยาวของ BIT ที่เราเลือกใช้ ตัวอย่างที่นิยมใช้กันมากคือ SHA256 นอกจากจะมีความปลอดภัยสูงแล้ว ยังสามารถนำไปใช้กับ Marketing Platform อย่าง Facebook และ Google ในการส่งข้อมูลอีเมลล์และเบอร์โทรแบบเข้ารหัสไปเทียบกับข้อมูลที่ Facebook และ Google มีเพื่อสร้างกลุ่มเป้าหมายสำหรับการตลาดได้ และยังเป็นที่นิยมในการเข้ารหัสข้อมูลสำหรับ Analytics Platform เพื่อป้องกันข้อมูลตามกฎหมาย PDPA , GDPR ที่บังคับใช้ได้
4. RIPEMD (RIPE Message Digest) ถูกสร้างโดยกลุ่มนักวิจัยที่โจมตีการเข้ารหัสแบบ MD5 สำเร็จ โดยได้ร่วมพัฒนาออกมา แต่หลังจากนั้นไม่นานก็มีคนโจมตี RIPEMD สำเร็จ ทางทีมวิจัยก็ได้ร่วมมือกับผู้โจมตี เพื่อออกแบบการเข้ารหัสที่ปลอดภัย RIPEMD -160 ที่จะคืนค่า 160 บิต และมีรูปแบบคล้ายกับ SHA-1
5. WHIRLPOOL เป็นระบบการเข้ารหัสทางเดียวทีพัฒนามาจาก AES ก่อนที่จะมาเป็น ผ่านการปรับปรุงมาสองครั้ง พัฒนามาแสดงเป็นตัวเลขฐาน 16 จำนวน 128 หลัก
6. TIGER เป็นอัลกอริทึมรูปแบบใหม่ที่เริ่มได้รับความนิยมเพิ่มขึ้น ในระบบแบ่งปันไฟล์ และ เว็บทอร์เรนต์ (Torrent Web) จนถึงตอนนี้ยังไม่มีการค้นพบว่ามันถูกโจมตีได้สำเร็จมาก่อน
Use Case ที่มีการใช้ Hashing จะใช้เพื่อป้องกันการโจมตี dictionary attacks, Brute Force Attacks, Lookup Tables, Reverse Lookup Tables, Rainbow Table ตัวอย่างสำคัญคือการเก็บข้อมูล Password ไว้ใน Database เราจะเก็บแบบ Hashing เมื่อ user มีการกรอก password เราจะนำ password + salt แล้ว นำไปเข้ารหัส ถ้าเทียบแล้วเหมือนกัน ก็แปลว่ารหัสผ่าน ถูกต้องนั่นเอง
Encode ใช้สำหรับการแปลงข้อมูลให้อยู่ในฟอร์แมตมาตรฐานทั่วไป โดยไม่ได้มีการเข้ารหัส
Encrpytion ใช้สำหรับการเข้ารหัสแบบ 2 ทาง โดยมีการกำหนด Key เพื่อให้ข้อมูลไม่สามารถถูกอ่านได้โดยผู้ที่ไม่ได้ถือรหัสชุดเดียวกัน
Hashing ใช้สำหรับการเข้ารหัสแบบทางเดียว โดยทั่วไปไม่สามารถถอดรหัสได้ และใช้สำหรับการพิสูจน์ความถูกต้องของชุดข้อมูล
Share your experience with this Blog