วันอังคารที่ 1 ธันวาคม พ.ศ. 2558

วิทยาการรหัสลับ ?

  การเข้ารหัสและการถอดรหัสมักจะได้ยินว่า Cryptography คำว่า Cryptography นี้มาจากคำว่า Crypto แปลว่า การซ่อน ผนวกกับคำว่า Graph แปลว่า การเขียน ดังนั้น Cryptography จึงมีความหมายว่า การเขียนเพื่อซ่อนข้อมูล โดยมีจุดประสงค์เพื่อป้องกันไม่ให้ผู้อื่นสามารถอ่านข้อมูลได้ ยกเว้นผู้ที่เราต้องการให้อ่านได้เท่านั้น ซึ่งผู้ที่เราต้องการให้อ่านได้จะต้องทราบวิธีการถอดรหัสข้อมูลที่ซ่อนไว้ หากแบ่ง Cryptography ตามยุคสมัยแล้วเราสามารถที่จะแบ่งได้เป็น 2 ยุคคือ ยุคประวัติศาสัตร์ หรือเรียกอีกอย่างว่า ยุค Classic โบราณ และยุคปัจจุบัน กระบวนการของ Cryptography มี2 อย่างคือ Data Encryption และ Data Decryption ซึ่งหมายถึงการเข้ารหัสข้อมูล และการถอดรหัสข้อมูลตามลำดับ ส่วนประโยชน์ของ Cryptography คือการรักษาความลับของข้อมูล Cryptography = Encryption + Decryption

การเข้ารหัสยุค Classic ( โบราณ )

  จากหลักฐานทางประวัติศาสตร์ที่อาจจะตีความได้ไม่ชัดเจนมากนัก บ้างก็เชื่อว่าการเข้ารหัสเกิดขึ้นโดยชาวอียิปต์เมื่อประมาณ 4,500 ปีมาแล้ว บ้างก็เชื่อว่าคิดค้นโดยชาวอาหรับเมื่อประมาณ 500-600ปีก่อนคริสตกาล วิธีการเข้ารหัสที่สำคัญในยุคก่อนๆมีหลายวิธีการ เช่น Monoalphabetic ciphers Polyalphabetic ciphers และ Caesar cipher

Caesar cipher

  การเข้ารหัสข้อมูลแบบ Caesar cipher มีขึ้นในราว 50-70 ปีก่อนคริสตกาล ได้รับการคิดค้นโดยกษัตริย์ Julius Caesar แห่งโรมัน เพื่อใช้ในการเข้ารหัสข้อความในสารที่ส่งในระหว่างการทำศึกสงครามเพื่อป้องกันไม่ให้ศัตรูสามารถอ่านข้อความในสารนั้นได้หากสารนั้นถูกแย่งซิงไป การเข้ารหัสแบบ Caesar cipher จะใช้วิธีการแทนที่ตัวอักษรต้นฉบับด้วยตัวอักษรที่อยู่ห่างออกไปข้างหน้าสามตัว เช่น แทนที่ตัว A ด้วยตัว D และแทนที่ตัว B ด้วยตัว E เป็นต้น  ดังนั้นการเข้ารหัสแบบ Caesar cipher จึงเป็นการเลื่อนตัวอักษรโดยจำนวนครั้งของการเลื่อนเท่ากับสาม Shiftment, n = 3


วิธีการ แม็ปตัวอักษรในการเข้ารหัสแบบ Caeser cipher สามารถเขียนได้ตามนี้

plain:   ABCDEFGHIJKLMNOPQRSTUVWXYZ
cipher: DEFGHIJKLMNOPQESTUVWXYZABC

หรือเข้ารหัสแบบ Fox Code

plaintext:   the quick brown  fox jumps over the lazy dog
ciphertext: WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ

Fox Code คือประโยค the quick brown fox jumps over the lazy dog ซึ่งเป็นประโยคสั้นๆที่มีตัวอักษรภาษาอังกฤษครบทั้ง 26 ตัว

Monoalphabetic ciphers

  การเข้ารหัสข้อมูลแบบ Monoalphabetic cipher หรือจะเรียกว่า Monoalphabetic substitution ciphers คิดค้นโดยชาวอาหรับ ( อาตื่น ล้อเล่นครับ 55+ ) โดยใช้วิธีการแทนที่ตัวอักษรแบบ 1 ต่อ 1 ไม่ใช่การเลื่อน ตัวอย่าง Monoalphabetic ciphers ในยุคแรกๆคือการเข้ารหัสข้อมูลแบบ Atbash ใช้แทนที่ตัว A ด้วยตัว Z แทนที่ตัว B ด้วยตัว Y แล้วแทนที่ตัว C ด้วยตัว X ครับ


plain:   ABCDEFGHIJKLMNOPQRSTUVWXYZ
cipher: ZYXWVUTSRQPONMLKJIHGFEDCBA

Polyalphabetic Encryption

  Polyalphabetic Encryption คิดค้นโดย Blaise De Vignere ชาวฝรั่งเศสเมื่อประมาณ 500 ปี ที่แล้ว อัลกอริทึมนี้ใช้เทคนิคที่ประกอบไปด้วย Multiple Monoalpha Cipher คือมี Monoalphabetic ciphers หมายๆตัวประกอบกัน ซึ่งจะมีการกำหนดระยะห่างให้กับตัวอักษรก่อนโดยระยะห่างในแต่ละช่วงจะไม่เท่ากันตัวอย่างเช่น n = 7 ให้เป็น C และ n = 15 ให้เป็น C2 หลังจากนั้นกำหนด รูปแบบ Pattem ในการใส่ข้อมูล เช่น C1 C2 C2 C1 C2

  เทคนิคนี้จะใช้ในช่วงสงครามโลกครั้งที่ 1 และยากที่จะถอดรหัสด้วยมือเปล่า แต่ถ้าใช้คอมพิวเตอร์จะสามารถถอดรหัสได้ง่าย นอกจากนั้นหากต้องการจะเบรคโดยใช้คอมพิวเตอร์ก็จะทำการเบรคได้ง่ายเช่นกัน ผู้ที่เบรค Polyalphabetic Encryption ได้ เป็นชาวรัสเซียชื่อ Friedrich Kasiski เบรคได้ในปี 1863 โดยให้ข้อสังเกตว่าถ้าได้ Cipher text ที่มีความยาวพอ Pattem จะเริ่มซ้ำและสามารถที่จะเห็นความเหมือนของ Cipher text โดยดูที่ Frequency Analysis ตัวอักษรแต่ละตัวปรากฏบ่อยแค่ไหนบ้างครับ

One-Time Pad

  One-Time Pad คิดค้นโดย Gilbert Vernam ชาวอังกฤษในช่วงสงครามโลกครั้งที่ 1 เป็นวิธีการเพิ่มความสามารถในการเข้ารหัสให้กับ Polyaliphabetic Encryption โดยใช้การแม็ปจาก 1 ตัวอักษรให้เป็นไปได้หลายตัวอักษร ซึ่งมีวิธีตามนี้ครับ
ใช้ Key ทีมีขนาดเท่ากันกับ Plain Text
Cipher Text ที่เป็นการคำนวณออกมาได้จะมีขนาดเท่ากันกับขนาดของ Plain Text
ตัวอักษรทุกตัวจะต้องมีการเปลี่ยนหมด เช่น หาก L ตัวแรกแม็ปได้เป็น N แล้ว L ตัวที่สองจะต้องแม็ปได้เป็นตัวอื่น เช่น ตัว V เป็นต้น
ใช้ Operation ง่ายๆ เช่น (+) เพื่อเข้ารหัสและ (-) เพื่อถอดรหัส หรือใช้ XOR สำหรับทั้งการเข้ารหัสและถอดรหัส

  การเข้ารหัสแบบ One-Time Pad นี้ Cipher Text จะมีความเป็น Random มากหรือน้อยขึ้นอยู่กับความเป็น Random ของ Key ตัวอย่างการเข้ารหัสด้วยวิธี One-Time Pad

plain Text    : H E L L O
key              :  X M C K L
cipher Text :  E Q N V Z 

การเข้ารหัส

7 (H) 4 (E) 11 (L) 11 (L) 14 (O) message ( Plain Text )
+23 (X) 12 (M) 2 (C) 10 (K) 11 (L) key
=30 16 13 21 25 message + key
= 4 (E) 16 (Q) 13 (N) 21 (V) 25 (Z) message + key ( mod 26 ) --> Cipher Text 

1 ความคิดเห็น: