Nov 13, 2010

Cryptography ตอนที่ 0 เกริ่นนำ

เกริ่นนำ
Cryptography เป็นวิชาที่ว่าด้วยเรื่องของรหัสลับ โดยชื่อนี้มีที่มาจากรากศัพท์จากภาษากรีกว่า kryptos "ลับ" สมาสกับ graph "เขียน" แปลว่าวิธีเขียนความลับนั่นเอง
อีกคำนึงที่มักปรากฎบ่อยๆ ในศาสตร์แห่งการซ่อนเร้นความลับก็คือคำว่า cipher "วิธีเข้ารหัสลับ" ซึ่งเอาไว้บ่งบอกว่าใช้วิธีใดเข้ารหัสลับครับ

ทั้งนี้ทั้งนั้น อย่าสับสนกับ Steganography หรือการอำพรางข้อมูล เพราะแม้ว่าทั้งการเข้ารหัสและการอำพรางข้อมูลนั้นมีจุดมุ่งหมายสูงสุดเดียวกัน (ป้องกันผู้อื่นรับรู้ข้อมูลที่ต้องการปกปิด)
แต่การเข้ารหัสนั้นจะมุ่งเน้นไปที่การปกป้องข้อมูลจากการถูกแกะอ่านได้โดยผู้อื่น ส่วนการอำพรางข้อมูลนั้นมุ่งไปที่การทำให้ผู้อื่นสำคัญผิดว่าไม่มีข้อมูลใดๆ ซ่อนอยู่ในข้อความที่ถ่ายทอดมานั้น


เกี่ยวกับผู้เรียบเรียง
เนื่องจากผมเรียนเอกคณิตศาสตร์ บทเรียนชุดนี้จึงอิงความรู้คณิตศาสตร์บริสุทธิ์ค่อนข้างมาก
บวกกับความชื่นชอบในคอมพิวเตอร์ ก็จะพยายามวิเคราะห์อัลกอริทึมและเขียนโปรแกรมควบคู่กับบทเรียนไปด้วย เพื่อให้สามารถเห็นตัวอย่างได้ชัดเจนยิ่งขึ้น
ส่วนผู้ที่ไม่รู้ทั้งคณิตฯ และคอมฯ ก็ไม่ต้องกังวลไป เพราะผมจะพยายามเขียนให้เข้าใจทั้งคณิตฯ และคอมฯ นั่นแหละ 555+


ข้อตกลง
เพื่อความง่ายในการทำความเข้าใจ รหัสลับทั้งหมดที่ใช้ในบทเรียนจะประกอบด้วยตัวอักษรภาษาอังกฤษเพียง 26 ตัวเท่านั้น ไม่ใช้ตัวเลขหรือเครื่องหมายพิเศษอื่นใดทั้งสิ้น
โดยข้อความที่ถูกต้องนั้นจะเขียนอยู่ในรูปของตัวพิมพ์เล็กทั้งหมด ส่วนข้อความที่ถูกเข้ารหัสแล้วจะเขียนด้วยตัวพิมพ์ให้ญ่ทั้งหมด ดังตัวอย่าง

OHWVVWXGBFUBSWRJUDSKB

คือรหัสลับของคำว่า

letsstudycryptography

และเนื่องจากเราต้องการศึกษาในเชิงคณิตศาสตร์และคอมพิวเตอร์เป็นหลัก การแทนตัวอักษรด้วยตัวเลขจะทำให้ง่ายต่อการนำไปคำนวณในขั้นตอนที่สูงกว่านี้
เราจะให้เลข 0 แทนตัวอักษร a, A เรื่อยไปจนถึงให้ 25 แทน z, Z และเรียกระบบนี้ว่า Z26
ซึ่งหมายถึงเซตของเลขจำนวนเต็มจาก 0 ถึง 25 สำหรับสมาชิกใน Z26 ที่นำมาดำเนินการกันแล้วมีค่าเกิน 25 ก็จะนำไป mod 26 เพื่อให้ผลลัพท์อยู่ใน Z26 เหมือนเดิมครับ

สำหรับการวิเคราะห์อัลกอริทึมและเขียนโปรแกรมนั้น จะใช้ภาษา Python ทั้งหมด เพราะผู้เขียนชอบภาษานี้ครับ ...เอ้ย ไม่ใช่ละ
ที่เลือก Python ก็เนื่องด้วยความง่ายของตัวภาษา สามารถลงมือเขียนได้ทันที ไม่ต้องรู้เชิงลึกเกี่ยวกับคอมพิวเตอร์ก็ได้
หรือถ้าใครเรียนคอมพิวเตอร์มาโดยตรง พอเห็นแล้วจะร้องอ๋อเลย เพราะมีความคล้ายกับ pseudo code เป็นอย่างมาก อ่านแล้วเขียนเป็นภาษาที่ตนเองถนัดได้ทันที
อยากให้ทุกคนที่ต่มอ่านลองเขียนโปรแกรมเล่นกันดูนะครับ ^__^

ความรู้ที่ควรมีประกอบ
Modular arithmetic
Discrete mathematics
Linear algebra
Boolean algebra
Python (programing language)


อ้างอิง
Stinson, D.R., Cryptography: Theory and Practice, Third Edition, 2006
(ในห้องสมุดมีหนังสือให้ยืมมาอ้างอิงแค่เล่มเดียวอยู่ ถ้าหาเพิ่มจะได้ทยอยอัพเดทครับ)