บทความนี้จะอธิบายแนวทางปฏิบัติและการศึกษาเทคนิคการสื่อสารที่ปลอดภัยเมื่อมีศัตรูอยู่
การเข้ารหัส (Cryptography) คือกระบวนการซ่อนหรือเข้ารหัสข้อมูลเพื่อให้เฉพาะผู้รับข้อความเท่านั้นที่สามารถอ่านได้ ศิลปะการเข้ารหัสถูกนำมาใช้ในการเข้ารหัสข้อความมานานหลายพันปี และยังคงถูกนำมาใช้ในบัตรธนาคาร รหัสผ่านคอมพิวเตอร์ และอีคอมเมิร์ซ
เทคนิคการเข้ารหัสสมัยใหม่ประกอบด้วยอัลกอริทึมและรหัสลับที่ช่วยให้สามารถ เข้ารหัส และถอดรหัสข้อมูลได้ เช่น คีย์เข้ารหัส 128 บิต และ 256 บิต รหัสลับ สมัยใหม่ เช่น มาตรฐานการเข้ารหัสขั้นสูง (AES) ถือว่าแทบจะไม่สามารถถอดรหัสได้
นิยามทั่วไปของการเข้ารหัสข้อมูล (cryptography) คือ การเข้ารหัสข้อมูลเพื่อให้แน่ใจว่ามีเพียงผู้รับข้อความเท่านั้นที่สามารถอ่านและประมวลผลข้อมูลได้ แนวทางปฏิบัติ ด้านความปลอดภัยทางไซเบอร์ นี้ หรือที่รู้จักกันในชื่อ การเข้ารหัสลับ (cryptology) ผสมผสานศาสตร์แขนงต่างๆ เช่น วิทยาการคอมพิวเตอร์ วิศวกรรมศาสตร์ และคณิตศาสตร์ เพื่อสร้างรหัสที่ซับซ้อนซึ่งซ่อนความหมายที่แท้จริงของข้อความ
การเข้ารหัสสามารถสืบย้อนไปถึงอักษรภาพอียิปต์โบราณ แต่ยังคงมีความสำคัญอย่างยิ่งต่อความมั่นคงปลอดภัยของการสื่อสารและข้อมูลระหว่างการส่ง และป้องกันไม่ให้ถูกอ่านโดยบุคคลที่ไม่น่าเชื่อถือ การเข้ารหัสใช้อัลกอริทึมและแนวคิดทางคณิตศาสตร์เพื่อแปลงข้อความให้เป็นรหัสที่ยากต่อการถอดรหัส ผ่านเทคนิคต่างๆ เช่น คีย์การเข้ารหัสและลายเซ็นดิจิทัล เพื่อปกป้องความเป็นส่วนตัวของข้อมูล การทำธุรกรรมบัตรเครดิต อีเมล และการท่องเว็บ
การเข้ารหัสยังคงมีความสำคัญต่อการปกป้องข้อมูลและผู้ใช้ การรับประกันความลับ และการป้องกันอาชญากรไซเบอร์จากการดักจับข้อมูลสำคัญขององค์กร ตัวอย่างและการใช้งานทั่วไปของการเข้ารหัสมีดังนี้:
1. ความเป็นส่วนตัวและความลับ
บุคคลและองค์กรต่าง ๆ ใช้การเข้ารหัสเป็นประจำทุกวันเพื่อปกป้องความเป็นส่วนตัวและรักษาความลับของบทสนทนาและข้อมูล การเข้ารหัสช่วยรักษาความลับโดยการเข้ารหัสข้อความที่ส่งโดยใช้อัลกอริทึมที่มีคีย์ที่รู้เฉพาะผู้ส่งและผู้รับเท่านั้น ตัวอย่างที่พบบ่อยคือ WhatsApp ซึ่งเป็นเครื่องมือส่งข้อความที่เข้ารหัสบทสนทนาระหว่างบุคคลเพื่อให้มั่นใจว่าบทสนทนาจะไม่ถูกแฮ็กหรือดักฟัง
การเข้ารหัสยังช่วยรักษาความปลอดภัยในการท่องเว็บ เช่น เครือข่ายส่วนตัวเสมือน (VPN) ซึ่งใช้การเข้ารหัสแบบอุโมงค์ การเข้ารหัสแบบอสมมาตร และคีย์สาธารณะและส่วนตัวที่แชร์กัน
2. การตรวจสอบความถูกต้อง
• ความซื่อสัตย์
เช่นเดียวกับที่การเข้ารหัสสามารถยืนยันความถูกต้องของข้อความได้ การเข้ารหัสยังสามารถพิสูจน์ความสมบูรณ์ของข้อมูลที่ถูกส่งและรับได้อีกด้วย การเข้ารหัสช่วยให้มั่นใจได้ว่าข้อมูลจะไม่ถูกเปลี่ยนแปลงในระหว่างการจัดเก็บหรือระหว่างการขนส่งระหว่างผู้ส่งและผู้รับ ตัวอย่างเช่น ลายเซ็นดิจิทัลสามารถตรวจจับการปลอมแปลงหรือการดัดแปลงแก้ไขในการจัดจำหน่ายซอฟต์แวร์และธุรกรรมทางการเงิน
• การไม่ปฏิเสธ
การเข้ารหัสลับ (Cryptography) ยืนยันความรับผิดชอบของผู้ส่งข้อความ ซึ่งหมายความว่าผู้ส่งข้อความจะไม่สามารถปฏิเสธเจตนาของตนได้ในภายหลังเมื่อสร้างหรือส่งข้อมูล ลายเซ็นดิจิทัลเป็นตัวอย่างที่ดี เพราะช่วยให้ผู้ส่งไม่สามารถอ้างสิทธิ์ในข้อความ สัญญา หรือเอกสารที่ตนสร้างขึ้นว่าเป็นการฉ้อโกง นอกจากนี้ การติดตามอีเมลยังช่วยให้มั่นใจได้ว่าผู้ส่งไม่สามารถปฏิเสธการส่งข้อความ และผู้รับไม่สามารถปฏิเสธการรับข้อความได้
3. การแลกเปลี่ยนกุญแจ
การแลกเปลี่ยนคีย์คือวิธีการที่ใช้ในการแบ่งปันคีย์การเข้ารหัสระหว่างผู้ส่งและผู้รับ
มีอัลกอริทึมการเข้ารหัสหลายประเภทให้เลือกใช้ ความซับซ้อนและความปลอดภัยแตกต่างกันไป ขึ้นอยู่กับประเภทของการสื่อสารและความละเอียดอ่อนของข้อมูลที่ถูกแบ่งปัน
1. การเข้ารหัสคีย์ลับ
การเข้ารหัสลับด้วยกุญแจลับ หรือที่รู้จักกันในชื่อการเข้ารหัสแบบสมมาตร ใช้กุญแจเพียงดอกเดียวในการเข้ารหัสและถอดรหัสข้อความ ผู้ส่งจะเข้ารหัสข้อความธรรมดาโดยใช้กุญแจนั้นและส่งไปยังผู้รับ ซึ่งจะใช้กุญแจเดียวกันนี้เพื่อถอดรหัสและปลดล็อกข้อความธรรมดาต้นฉบับ
• รหัสสตรีม
การเข้ารหัสแบบสตรีมจะทำงานบนบิตหรือไบต์เดียวได้ตลอดเวลา และจะเปลี่ยนแปลงคีย์อย่างต่อเนื่องโดยใช้กลไกป้อนกลับ การเข้ารหัสแบบสตรีมที่ซิงโครไนซ์ตัวเองช่วยให้มั่นใจได้ว่ากระบวนการถอดรหัสจะซิงค์กับกระบวนการเข้ารหัส โดยการรับรู้ตำแหน่งที่อยู่ของบิตคีย์สตรีม การเข้ารหัสแบบสตรีมแบบซิงโครนัสจะสร้างคีย์สตรีมโดยไม่ขึ้นกับสตรีมข้อความ และสร้างฟังก์ชันคีย์สตรีมเดียวกันทั้งที่ผู้ส่งและผู้รับ
• รหัสบล็อก
การเข้ารหัสแบบบล็อกจะเข้ารหัสข้อมูลขนาดคงที่ทีละบล็อก โดยจะเข้ารหัสบล็อกข้อมูลแบบข้อความธรรมดาให้เป็นข้อความเข้ารหัสเดียวกันเสมอเมื่อใช้คีย์เดียวกัน ตัวอย่างที่ดีคือการเข้ารหัสแบบ Feistel ซึ่งใช้องค์ประกอบต่างๆ เช่น การขยายคีย์ การเรียงสับเปลี่ยน และการแทนที่ เพื่อสร้างความสับสนและการแพร่กระจายอย่างมากในการเข้ารหัส
ขั้นตอนการเข้ารหัสและถอดรหัสจะคล้ายคลึงกันหรือเหมือนกันทุกประการ ซึ่งหมายความว่าการย้อนกลับคีย์จะช่วยลดขนาดรหัสและวงจรที่จำเป็นสำหรับการใช้รหัสในซอฟต์แวร์หรือฮาร์ดแวร์
2. การเข้ารหัสคีย์สาธารณะ
การเข้ารหัสด้วยคีย์สาธารณะ (PKC) หรือการเข้ารหัสแบบอสมมาตร ใช้ฟังก์ชันทางคณิตศาสตร์เพื่อสร้างรหัสที่ยากต่อการถอดรหัสอย่างยิ่ง ช่วยให้ผู้คนสามารถสื่อสารได้อย่างปลอดภัยผ่านช่องทางการสื่อสารที่ไม่ปลอดภัยโดยไม่จำเป็นต้องใช้คีย์ลับ ตัวอย่างเช่น การเข้ารหัสซ้ำด้วยพร็อกซีช่วยให้เอนทิตีพร็อกซีสามารถเข้ารหัสข้อมูลจากคีย์สาธารณะหนึ่งไปยังอีกคีย์หนึ่งได้อีกครั้งโดยไม่จำเป็นต้องเข้าถึงข้อความธรรมดาหรือคีย์ส่วนตัว
ประเภท PKC ทั่วไปคือการคูณกับการแยกตัวประกอบ ซึ่งนำจำนวนเฉพาะขนาดใหญ่สองตัวมาคูณกันเพื่อให้ได้ผลลัพธ์จำนวนมหาศาลที่ทำให้การถอดรหัสทำได้ยาก อีกรูปแบบหนึ่งของ PKC คือการยกกำลังกับลอการิทึม เช่น การเข้ารหัส 256 บิต ซึ่งเพิ่มการป้องกันจนถึงจุดที่แม้แต่คอมพิวเตอร์ที่สามารถค้นหาชุดค่าผสมได้หลายล้านล้านชุดต่อวินาทีก็ไม่สามารถถอดรหัสได้
รูปแบบทั่วไปของ PKC ใช้คีย์สองอันที่สัมพันธ์กันทางคณิตศาสตร์ แต่ไม่สามารถระบุคีย์ใดคีย์หนึ่งได้ พูดง่ายๆ คือ ผู้ส่งสามารถเข้ารหัสข้อความธรรมดาโดยใช้คีย์ส่วนตัว จากนั้นผู้รับจะถอดรหัสข้อความเข้ารหัสโดยใช้คีย์สาธารณะของผู้ส่ง
อัลกอริทึม PKC ทั่วไปที่ใช้สำหรับลายเซ็นดิจิทัลและการแลกเปลี่ยนคีย์ ได้แก่:
• อาร์เอสเอ
RSA เป็นอัลกอริทึมแรกและยังคงเป็นอัลกอริทึม PKC ที่ใช้กันมากที่สุด อัลกอริทึมนี้ตั้งชื่อตามนักพัฒนาคณิตศาสตร์จาก MIT ได้แก่ Ronald Rivest, Adi Shamir และ Leonard Adleman และใช้ในการเข้ารหัสข้อมูล ลายเซ็นดิจิทัล และการแลกเปลี่ยนคีย์ อัลกอริทึมนี้ใช้ตัวเลขจำนวนมากซึ่งเป็นผลลัพธ์จากการแยกตัวประกอบของจำนวนเฉพาะสองตัวที่เลือกไว้ ผู้โจมตีไม่สามารถหาตัวประกอบเฉพาะได้ ซึ่งทำให้ RSA มีความปลอดภัยเป็นพิเศษ
• การเข้ารหัสเส้นโค้งรูปวงรี (ECC)
ECC คืออัลกอริทึม PKC ที่ใช้เส้นโค้งวงรีในการเข้ารหัส ออกแบบมาเพื่อใช้กับอุปกรณ์ที่มีกำลังการประมวลผลหรือหน่วยความจำจำกัด เพื่อเข้ารหัสการรับส่งข้อมูลทางอินเทอร์เน็ต การใช้งาน ECC ทั่วไปมักพบในคอมพิวเตอร์ฝังตัว สมาร์ทโฟน และเครือข่ายคริปโทเคอร์เรนซีอย่างบิตคอยน์ ซึ่งใช้พื้นที่จัดเก็บข้อมูลและแบนด์วิดท์ประมาณ 10% ของที่ RSA ต้องการ
• อัลกอริทึมลายเซ็นดิจิทัล (DSA)
DSA เป็นมาตรฐานที่อนุญาตให้ใช้ลายเซ็นดิจิทัลในการยืนยันตัวตนข้อความ สถาบันมาตรฐานและเทคโนโลยีแห่งชาติ (NIST) เป็นผู้ริเริ่มมาตรฐานนี้ในปี พ.ศ. 2534 เพื่อให้มั่นใจว่าจะมีวิธีการสร้างลายเซ็นดิจิทัลที่ดีขึ้น
• การเข้ารหัสตามตัวตน (IBE)
IBE เป็นระบบ PKC ที่ช่วยให้สามารถคำนวณคีย์สาธารณะจากข้อมูลเฉพาะที่อิงตามตัวตนของผู้ใช้ เช่น ที่อยู่อีเมล จากนั้นบุคคลที่สามหรือผู้สร้างคีย์ส่วนตัวที่เชื่อถือได้จะใช้อัลกอริทึมการเข้ารหัสเพื่อคำนวณคีย์ส่วนตัวที่สอดคล้องกัน วิธีนี้ช่วยให้ผู้ใช้สามารถสร้างคีย์ส่วนตัวของตนเองได้โดยไม่ต้องกังวลเรื่องการแจกจ่ายคีย์สาธารณะ
• มาตรฐานการเข้ารหัสคีย์สาธารณะ (PKCS)
อัลกอริทึมและการใช้งาน PKC ทั้งหมดอยู่ภายใต้ชุดมาตรฐานและแนวทางที่ออกแบบโดย RSA Data Security ดังต่อไปนี้:
• Diffie-Hellman และอัลกอริทึมการแลกเปลี่ยนคีย์ (KEA)
อัลกอริทึมดิฟฟี-เฮลล์แมนถูกคิดค้นขึ้นในปี พ.ศ. 2519 โดยมาร์ติน เฮลล์แมน ศาสตราจารย์จากมหาวิทยาลัยสแตนฟอร์ด และวิทฟิลด์ ดิฟฟี นักศึกษาระดับบัณฑิตศึกษาของเขา ซึ่งถือเป็นผู้ริเริ่มแนวคิด PKC อัลกอริทึมนี้ใช้สำหรับการแลกเปลี่ยนคีย์ลับ และจำเป็นต้องมีคนสองคนตกลงกันในเรื่องจำนวนเฉพาะขนาดใหญ่
KEA เป็นรูปแบบหนึ่งของอัลกอริทึม Diffie-Hellman และได้รับการเสนอให้เป็นวิธีการแลกเปลี่ยนคีย์ในโครงการ Capstone ของ NIST/National Security Agency (NSA) ซึ่งพัฒนามาตรฐานการเข้ารหัสสำหรับการใช้งานสาธารณะและรัฐบาล
• ฟังก์ชันแฮช
ฟังก์ชันแฮชช่วยรับประกันความสมบูรณ์ของข้อมูลในขั้นตอนการเข้ารหัสและถอดรหัสของวิทยาการเข้ารหัสลับ นอกจากนี้ยังใช้ในฐานข้อมูลเพื่อให้สามารถดึงข้อมูลได้เร็วขึ้นอีกด้วย
แฮชชิ่ง คือกระบวนการนำคีย์มาแมปกับค่าเฉพาะ ซึ่งก็คือค่าแฮชหรือค่าแฮช ฟังก์ชันแฮชจะแปลงคีย์หรือลายเซ็นดิจิทัล จากนั้นค่าแฮชและลายเซ็นจะถูกส่งไปยังผู้รับ ซึ่งจะใช้ฟังก์ชันแฮชเพื่อสร้างค่าแฮชและเปรียบเทียบกับค่าที่ได้รับในข้อความ
ฟังก์ชันแฮชทั่วไปคือการพับ (folding) ซึ่งนำค่ามาแบ่งออกเป็นหลายส่วน เพิ่มส่วนต่างๆ และใช้ตัวเลขสี่หลักสุดท้ายที่เหลือเป็นคีย์หรือค่าแฮช อีกวิธีหนึ่งคือการจัดเรียงตัวเลขใหม่ (digit rearrangement) ซึ่งนำตัวเลขเฉพาะจากค่าเดิมมากลับด้าน แล้วใช้ตัวเลขที่เหลือเป็นค่าแฮช ตัวอย่างของประเภทฟังก์ชันแฮช ได้แก่ Secure Hash Algorithm 1 (SHA-1), SHA-2 และ SHA-3