Image Description
Soranat Chamkring
  • 15 May 2024
  • 7 mins read

Encode , Encrypt และ Hashing คืออะไร

encryption world

โดยทั่วไปแล้วการเข้ารหัสนั้นจะใช้สำหรับการเข้ารหัสนั้นจะใช้สำหรับการแปลงข้อมูลในรูปแบบหนึ่งออกไปยังอีกรูปแบบหนึ่งที่สามารถนำไปใช้งานต่อได้ แต่การเข้ารหัสทั้ง 3 แบบในวันนี้นั้นจะมีความแตกต่างกันออกไป บางวิธีอาจจะไม่ใช้รหัสเลย บางวิธีใช้รหัส และบางวิธีเข้ารหัสโดยไม่สามารถถอดรหัสได้

ทำไมเราถึงต้องเข้ารหัส

บทความนี้จะแบ่งเนื้อหาการเข้ารหัสออกเป็น 2 ส่วน โดยส่วนแรก Encoding จะเป็นการเข้ารหัสเพื่อแปลงรูปแบบข้อมูลให้สามารถใช้กับแพลตฟอร์มอื่น ๆ ได้ โดยไม่มีการรหัสหรือการทำ hashing สามารถนำไปถอดรหัสได้ เพียงแค่รู้ว่าฟอร์แมตที่จะนำไปใช้ต่อคืออะไร ส่วนที่ 2 จะเป็น Encryption and Hashing คือการเข้ารหัสเพื่อความปลอดภัย และการพิสูจน์ข้อมูล

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

อย่างไรก็ตามเราสามารถถอดรหัสได้ว่าข้อความดังกล่าวนั้นถูกบันทึกว่าอย่างไร โดยจะต้องทราบวิธีการถอดรหัสก่อน อย่างเคสของจูเลียส ซีซาร์ เมื่อเราพบว่ามีการขยับตัวอักษรจากเดิมไป 4 ตำแหน่ง เราก็จะใช้วิธีย้อนอักษรบนข้อความเข้ารหัส เพื่อให้ได้ข้อความต้นฉบับ หรือแม้กระทั่งเคสสงครามโลกที่ได้มีการผลิตเครื่อง enigma ที่ใช้สำหรับถอดรหัสข้อความจากฝ่ายนาซี จนได้รับความชนะ

เครื่องถอดรหัส Enigma Machine
Caption : เครื่องถอดรหัส Enigma Machine

ก่อนอื่น เราจะต้องแยกก่อนว่าการเข้ารหัสนั้นมี 2 รูปแบบ คือการเข้ารหัสแบบทางเดียว ที่ใช้สำหรับการตรวจสอบความเหมือน / ความแตกต่างกันของข้อมูลแต่ละชุด การเข้ารหัสแบบทางเดียวจะไม่สามารถถอดรหัสได้ ถ้าไม่มีข้อความต้นฉบับมาใช้เข้ารหัสแล้วเอาข้อมูลไปเทียบกัน

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

หากใครเคยส่งจดหมาย ก็น่าจะสามารถเข้าใจหลักการเข้ารหัสที่จะกล่าวข้างต้นนี้ได้ง่ายขึ้น

การ Encoding

รูปแบบของการเข้ารหัสโดยไม่มี Key ในการถอดรหัส เราสามารถแปลงข้อความกลับไปเป็นข้อความเดิมผ่านการ decoding ได้หากรู้ฟอร์แมตมาตรฐานที่ใช้ในการ decode ยกตัวอย่าง เช่น เราเปิดไฟล์ Excel แล้วเป็นภาษาที่เราไม่สามารถอ่านออกได้ เราสามารถเลือกแปลงเป็น ASCII , UTF-8 เพื่อให้ได้ภาษาที่เราต้องการนำไปใช้ อย่างไรก็ตามการ encoding นั้นไม่ได้ถูกทำมาเพื่อมาตรฐานด้านความปลอดภัยเป็นหลัก แต่ใช้สำหรับการที่แอพพลิเคชั่นจะสามารถอ่านไฟล์ตามความสามารถของภาษานั้นๆ ได้ สังเกตได้ว่าไม่ได้มีแค่ไฟล์ text เท่านั้น

Encoding ยังสามารถใช้กับไฟล์มีเดียอื่น ๆ ได้ด้วยเช่นกัน คุณสามารถอ่าน Use Case ของ encoding ได้จากบทความแก้ไขภาษาแปลก ๆ เมื่อคุณทำงานบน Excel

ยกตัวอย่างเช่น จดหมายนี้เป็นภาษาอังกฤษ ถ้าคุณสามารถแปลข้อความภาษาอังกฤษเป็นภาษาไทยได้ คุณก็สามารถอ่านมันออกได้นะ

การ Encryption

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

โดยเราจะมี Cipher Text หรือตัวกำหนดคุณสมบัติการแปลงข้อความ เช่น การเลื่อนตัวอักษร (Shift Cipher) ,การแทนที่ตัวอักษร (Substitution Cipher) และ การจัดเรียงตัวอักษรในรูปแบบเส้น (Transposition Cipher)

การเข้ารหัสโดยสลับตำแหน่งของตัวอักษร
Caption : การเข้ารหัสโดยสลับตำแหน่งของตัวอักษร

Encryption Algorythm

การเข้ารหัสในรูปแบบนี้มีทั้งจะนิยมใช้กัน 2 รูปแบบ

Asymmetric Encryption คือการใช้ Public Key ในการเข้ารหัส และใช้ Private key ที่อยู่บนเซิร์ฟเวอร์ในการถอดรหัส ซึ่งหมายความว่าใครก็ตามสามารถส่งข้อความเข้าหาเราได้ แต่จะมีเพียงเราเท่านั้นที่สามารถเปิดออกได้ เพราะเรามีลายเซ็นต์สำหรับการเกิดอ่านข้อความ (Key)

Symmetric Encryption คือการที่ผู้ใช้งานทั้งผู้ส่ง และผู้รับ ใช้ Private Key เหมือนกัน สามารถถอดรหัสได้ และมีการทำการยืนยันตัวตนก่อนที่จะแลกเปลี่ยนข้อมูลกัน (SSL Handshake) ซึ่งหมายความว่า ก่อนที่เราจะส่งหรือรับจดหมาย เราจะมีการยืนยันตัวตนก่อนว่าเราใช้ภาษาเฉพาะเดียวกันเพื่อสื่อสารกัน ถ้าคนส่งจดหมายใช้ภาษาไม่ถูกต้อง เราก็จะรู้ว่าคนส่งไม่ใช่คนที่มีภาษาเฉพาะแบบเดียวกัน หรือบางทีเราก็อาจจะไม่ใช่ผู้รับที่แท้จริง (แบบเคสจดหมายผิดซอง)

Asymmetric vs Symmetric Encrpytion
Caption : Asymmetric vs Symmetric Encrpytion

Encryption Method

อัลกอรึทึมที่มีการใช้เข้ารหัสในปัจจุบัน

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

Use Case

เราสามารถส่งไฟล์ข้อมูลสำคัญในรูปแบบต่างๆ โดยสามารถ encrypt file แล้วส่งรหัสให้กับผู้รับไฟล์ เพื่อให้ผู้รับไฟล์สามารถเปิดอ่านไฟล์ที่เข้ารหัสได้

การ Hashing

การ Hashing ถูกนำมาใช้เพื่อเข้ารหัสข้อมูลแบบทางเดียว โดยที่ไม่ต้องการให้ผู้รับถอดข้อความออกมา แต่ผู้รับเองต้องมีข้อมูลที่จะต้องไปนำมา Hashing ในรูปแบบเดียวกัน แล้วนำมาเทียบกัน เพื่อตรวจสอบความถูกต้องของข้อมูล

ตัวอย่างการ hashing
Caption : ตัวอย่างการ hashing

คุณสมบัติของการ Hashing

- ข้อความเดียวกันส่งผลให้มีค่าแฮชเดียวกันเสมอ

- คำนวณค่าแฮชอย่างรวดเร็ว

- เป็นไปไม่ได้ที่จะมีข้อความสองข้อความที่มีค่าแฮชเดียวกัน เรียกว่า "การชนกัน" (Collision)

- เป็นไปไม่ได้ที่จะสร้างข้อความที่ให้ค่าแฮชที่กำหนด

- การเปลี่ยนแปลงเล็กน้อยในข้อความควรเปลี่ยนค่าแฮชที่ได้รับอย่างกว้างขวางเพื่อให้ดูเหมือนว่าไม่สัมพันธ์กับแฮชดั้งเดิม (Salt)

Hashing Algorythm

การ 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 Method

อัลกอรึทึมที่ใช้ในการ 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

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 ใช้สำหรับการเข้ารหัสแบบทางเดียว โดยทั่วไปไม่สามารถถอดรหัสได้ และใช้สำหรับการพิสูจน์ความถูกต้องของชุดข้อมูล

No reviews yet. Be the first to leave a comment!

Share your experience with this Blog

0 Reviews

บทความแนะนำ

การทำงานพื้นฐานของเว็บไซต์
How Website work?

เรียนรู้วิธีการทำงานของเว็บไซต์ในทุกขั้นตอน ฉบับมือใหม่

อ่านบทความที่เกี่ยวข้อง
BigQuery Dataset Schema
BigQuery Schema

ตรวจสอบ Dataset และ Table ใน Bigquery Project

อ่านบทความที่เกี่ยวข้อง
SQL Easy ใช้ง่ายนิดเดียว
SQL Basic

ใช้ภาษา SQL เพื่อการทำงานด้าน Data Analytics ขั้นพื้นฐาน

อ่านบทความที่เกี่ยวข้อง