|
เพลย์แฟร์ไซเฟอร์
สวัสดีปีใหม่ครับ คิดเงินให้ได้เงิน คิดทองให้ได้ทอง ปีนี้เค้าว่าเป็นปีดี
ใครๆก็นิยมแต่งงานกัน แหม เห็นมีคู่แล้วน่าอิจฉา
บทความฉบับนี้ออกจะฉุกละหุกไปหน่อย เพราะผมมาเขียนเอาตอนปลายเทอม
ซึ่งเป็นช่วงที่ดินที่พอกหางไว้เริ่มทำพิษ แหะๆ แถมสอบเสร็จแล้วยังต้องเตรียมตัวเดินทางอีก
ผมมาเริ่มเขียนบนเครื่องบินเลยนะนี่
ฉบับนี้จะขอแนะนำระบบรหัสลับง่ายๆอันหนึ่งซึ่งมีชื่อว่า เพลย์แฟร์ไซเฟอร์
(Playfair Cipher) คนที่คิดระบบนี้ขึ้นมาก็คือเซอร์ ชาลส์ วีทสโตน
(Sir Charles Wheatstone) ที่ระบบนี้มีชื่อนี้ก็เพราะว่า คนที่ทำให้ระบบนี้ได้รับความนิยมขึ้นมาก็คือ
ลีออน เพลย์แฟร ์ (Lyon Playfair)
ระบบรหัสลับตัวนี้จะคล้ายระบบรหัสลับแบบสับเปลี่ยน แต่แทนที่จะสับเปลี่ยนตัวอักษรทีละตัวใน
plaintext เราก็สับเปลี่ยนตัวอักษรทีละคู่ด้วยคู่ตัวอักษรคู่อื่นเพื่อให้กลายเป็น
ciphertext การสร้างตารางสับเปลี่ยนก็ง่ายมาครับ ก่อนอื่นเราต้องตั้ง
keyword ขึ้นมาก่อน ซึ่ง keyword ตัวนี้จะรู้กันเฉพาะผู้รับและผู้ส่ง
สมมุติว่า keyword ของเราคือ GOLDENDRAGON จากนั้นเราก็เอาตัวอักษรที่ซ้ำกันในคำนั้นออก
เราก็จะได้ GOLDENRA จากนั้นเราก็จับคำนี้มาใส่ตารางขนาด 5 x
5 เติมตารางให้เต็มด้วยตัวอักษรที่ไม่ได้ใช้ในคำนั้น ตามลำดับตัวอักษร
โดยรวมตัวอักษร I และ J ไว้ในช่องเดียวกัน จากนั้นเราก็จะได้ตารางต่อไปนี้
| G |
O |
L |
D |
E |
| N |
R |
A |
B |
C |
| F |
H |
I/J |
K |
M |
| P |
Q |
S |
T |
U |
| V |
W |
X |
Y |
Z |
เสร็จแล้วครับสำหรับตารางสับเปลี่ยน แต่จะใช้ยังไงนั้นเดี๋ยวมาดูกัน
สมมุติว่า plaintext ของเราคือ Happy new year from vcharkarn.com.
(อะแฮ่ม จะพูด happy new year กันทีก็ต้องมีลวดลายกันหน่อย)
จากนั้นเราก็แตก plaintext ให้เป็นคู่ตัวอักษร ตัวอักษรแต่ละคู่ควรมีอักษรไม่ซ้ำกัน
ถ้าเกิดมันซ้ำกันขึ้นมาก็เติมตัวอักษรอื่นที่ทำให้ไม่ซ้ำ ถ้าแตก
plaintext แล้วตัวอักษรสุดท้ายไม่ครบคู่ เราก็เติมตัวอักษรตัวอื่นลงไปที่ไม่ซ้ำกับตัวอักษรตัวนั้น
(จะใช้ตัวอักษรใดในการเติมนั้น ก็แล้วแต่ศรัทธาครับ และควรจะตกลงกันก่อนระหว่างผู้รับและผู้ส่ง
โดยทั่วไปแล้วใช้ตัวอักษร x ) สมมุติว่าเราใช้ตัวอักษร x ในการเติม
เราก็จะแตก plaintext ของเราได้ดังนี้
ha-px-py-ne-wy-ea-rf-ro-mv-ch-ar-ka-rn-co-mx
ทีนี้เราก็พร้อมจะ encrypt แล้วครับ ตัวอักษรแต่ละคู่ที่เราได้มานั้น
เมื่อเอามาเทียบกับตารางข้างบนแล้ว สามารถแยกเป็นสามกรณี คือ
- ตัวอักษรทั้งคู่อยู่แถวเดียวกัน
- ตัวอักษรทั้งคู่อยู่หลักเดียวกัน
- ไม่ใช่ทั้งสองกรณีข้างบน
ถ้าเป็นกรณีแรก ตัวอักษรแต่ละตัวในคู่นั้นจะถูกแทนที่ด้วยตัวอักษรที่ถัดมาทางขวาในตาราง
(ยกตัวอย่างเช่น wy จะถูกแทนที่ด้วย XZ) ถ้าตัวอักษรตัวใดตัวหนึ่งเป็นตัวสุดท้ายของแถว
ตัวอักษรตัวนั้นก็จะถูกแทนด้วยตัวอักษรที่อยู่หัวแถว (ยกตัวอย่างเช่น
im จะถูกแทนที่ด้วย KF)
ถ้าเป็นกรณีที่สอง เราจะใช้วิธีคล้ายๆกับกรณีแรกแต่ใช้หลักแทนแถว
นั่นคือตัวอักษรแต่ละตัวในคู่นั้นจะถูกแทนที่ด้วยตัวอักษรที่ถัดมาข้างล่างในตาราง
(ยกตัวอย่างเช่น aj จะถูกแทนที่ด้วย IS) ถ้าตัวอักษรตัวใดตัวหนึ่งเป็นตัวสุดท้ายของหลัก
ตัวอักษรตัวนั้นก็จะถูกแทนด้วยตัวอักษรที่เป็นตัวแรกของหลัก
(ยกตัวอย่างเช่น ky จะถูกแทนที่ด้วย TD)
ถ้าเป็นกรณีที่สาม เราจะใช้วีธีที่ต่างไปจากสองวิธีข้างบน กล่าวคือในการ
encrypt ตัวอักษรตัวแรก เราจะมองหาแถวที่มีตัวอักษรตัวแรก แล้วหาดูหลักที่มีตัวอักษรที่สอง
แถวและหลักที่ได้นั้นตัดกันได้ตัวอักษรตัวไหนก็แทนด้วยอักษรตัวนั้น
ในการ encrypt ตัวอักษรตัวที่สอง ก็ทำคล้ายๆกันครับ คือมองหาแถวที่มีตัวอักษรที่สอง
และหลักที่มีตัวอักษรตัวแรก แถวและหลักที่ได้ตัดกันได้ตัวอักษรตัวไหนก็แทนด้วยอักษรตัวนั้น
(ยกตัวอย่างเช่น ha จะถูกแทนด้วย IR)
ดังนั้น plaintext ข้างบนของเราก็จะกลายเป็น IR-SV-TV-CG-XZ-LC-NH-HR-FZ-RM-BA-IB-AR-RE-IZ
เวลา decrypt ก็ทำทุกอย่างย้อนกลับ
ลองมาคิดกันดูนะครับว่า เราจะโจมตีระบบนี้ได้อย่างไร การวิเคราะห์ความถี่จะช่วยเราได้ไหมในกรณีนี้
แล้วมาเจอกันใหม่ครับ
ติดตามอ่านเรื่องราวตอนที่แล้วๆ ของวิทยาการรหัสลับได้ที่นี่ครับ
|