One time Padding
One-Time Pad คิดค้นโดย Gilbert Vernam ชาวอังกฤษในช่วงสงครามโลกครั้งที่ 1 เป็นวิธีการเพิ่มความสามารถในการเข้ารหัสให้กับ Polyalphabetic 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 แสดงดังนี้ (จะเห็นว่า L ตัวแรกแม็ปได้เป็น N ส่วน L ตัวที่สองแม็ปได้เป็น V ขึ้นอยู่กับคีย์)
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
การถอดรหัส
4 (E) 16 (Q) 13 (N) 21 (V) 25 (Z) Cipher Text
- 23(X) 12 (M) 2 (C) 10 (K) 11 (L) Key
= -19 4 11 11 14 Cipher Text – key
= 7 (H) 4 (E) 11 (L) 11 (L) 14 (O) Cipher Text – key (mod 26) à message (Plain Text)
แต่อย่างไรก็ตาม One Time Pad ก็ยังมีปัญหาอยุ่ เช่น Key ที่ใหญ่เท่ากับ Plain Text จะต้องใช้พื้นที่มากสำหรับเก็บ Key นอกจากนั้น Key ที่ใหญ่ก็ทำให้ใช้งานได้อย่างลำบาก (หากเทียบกับการใช้ Key ที่มีขนาดเล็ก) นอกจากนั้นผู้ส่งข้อความจะต้องมีการส่ง Key ไปยังปลายทางเพื่อใช้ในการถอดรหัส ซึ่งอาจจะทำให้ Key ถูกขโมยได้ในระหว่างขั้นตอนการส่ง
การทำงานของ One time Padding (คลิ๊กเม้าส์ที่ Play เพือเล่น )