ตัวแก้รหัส Vigenère
วางข้อความเข้ารหัส Vigenère แล้วกู้คืนคำสำคัญและข้อความต้นฉบับโดยไม่ต้องรู้กุญแจ ตัวแก้รหัสจะหาความยาวของกุญแจจากดัชนีความบังเอิญ ยืนยันด้วยวิธีของ Kasiski เจาะแต่ละคอลัมน์เสมือนเป็นรหัส Caesar แล้วเลือกผลถอดรหัสที่อ่านเป็นภาษาอังกฤษได้มากที่สุด ทุกอย่างทำงานในเบราว์เซอร์ของคุณ
ลองตัวอย่าง:
วางข้อความเข้ารหัส Vigenère ด้านบน แล้วกุญแจที่กู้คืนได้ ข้อความที่ถอดรหัสแล้ว และการวิเคราะห์ความยาวของกุญแจจะปรากฏที่นี่ ยิ่งคุณให้ข้อความมากเท่าไร คำตอบก็ยิ่งน่าเชื่อถือมากขึ้นเท่านั้น
วิธีใช้ ตัวถอดรหัสวีฌ์แนร์
- 1
วางข้อความเข้ารหัส
คัดลอกข้อความที่เข้ารหัส Vigenère แล้ววางลงในกล่อง ควรมีอย่างน้อยหนึ่งย่อหน้าจึงจะได้ผลดีที่สุด ตัวอักษรจะถูกอ่านโดยไม่สนตัวพิมพ์ใหญ่เล็ก ส่วนช่องว่าง ตัวเลข และเครื่องหมายวรรคตอนจะถูกละเว้นระหว่างการแก้รหัส
- 2
อ่านกุญแจที่กู้คืนได้
ตัวแก้รหัสจะแสดงคำสำคัญที่น่าจะเป็นมากที่สุดไว้ด้านบน คัดลอกด้วยคลิกเดียว — คุณสามารถวางมันลงในเครื่องมือรหัส Vigenère เพื่อยืนยันว่ามันถอดรหัสข้อความเดียวกันได้
- 3
อ่านข้อความที่ถอดรหัสแล้ว
ใต้กุญแจ ข้อความต้นฉบับฉบับเต็มจะปรากฏพร้อมตัวพิมพ์ใหญ่ ช่องว่าง และเครื่องหมายวรรคตอนเดิมที่ถูกนำกลับมาใส่ คัดลอกไว้เพื่อเก็บผลลัพธ์
- 4
ตรวจสอบหลักฐานความยาวของกุญแจ
แผนภูมิดัชนีความบังเอิญและแผงของ Kasiski จะแสดงเหตุผลว่าทำไมจึงเลือกความยาวกุญแจนั้น หากผลลัพธ์ดูผิดเพี้ยน ให้คลิกความยาวอื่นในแผนภูมิเพื่อบังคับการแก้รหัส หรือขยายความยาวกุญแจสูงสุด
- 5
แชร์หรือล้าง
คัดลอกลิงก์สำหรับแชร์ที่เปิดเครื่องมือขึ้นมาใหม่พร้อมข้อความเข้ารหัสเดิมของคุณเป๊ะ ๆ — ข้อความจะอยู่ในส่วนของ URL หลังเครื่องหมาย hash ซึ่งไม่เคยส่งไปถึงเซิร์ฟเวอร์ ปุ่มล้างจะรีเซ็ตทุกอย่าง
อธิบายการเจาะรหัส Vigenère
เครื่องมือนี้ทำอะไร
รหัส Vigenère ซ่อนข้อความด้วยการเลื่อนตัวอักษรแต่ละตัวด้วยจำนวนที่ต่างกัน ตามคำสำคัญที่วนซ้ำ เป็นเวลาสามศตวรรษที่แนวคิดง่าย ๆ นี้ทำให้มันได้ฉายาว่า le chiffre indéchiffrable — รหัสที่ถอดไม่ได้ — เพราะกลวิธีปกติอย่างการนับความถี่ของตัวอักษรใช้ไม่ได้ผลกับมัน แต่เครื่องมือนี้เจาะมันได้อยู่ดี โดยอัตโนมัติ และไม่ต้องให้คุณป้อนกุญแจ เพียงวางข้อความเข้ารหัสลงไป มันก็จะคืนคำสำคัญที่น่าจะเป็นมากที่สุดและข้อความที่ถอดรหัสแล้วให้
มันทำงานแบบเดียวกับที่นักวิเคราะห์รหัสลับที่เป็นมนุษย์ทำ เพียงแต่เร็วกว่า: มันหาว่ากุญแจยาวเท่าไร แยกข้อความออกเป็นรหัส Caesar แยกกันจำนวนเท่านั้น แก้แต่ละตัว แล้วตรวจสอบว่าผลลัพธ์อ่านเป็นภาษาอังกฤษได้จริง ไม่ต้องมีกุญแจ ไม่ต้องเดา และไม่มีอะไรหลุดออกจากเบราว์เซอร์ของคุณ — การโจมตีทั้งหมดทำงานบนเครื่องของคุณเอง
เหตุใดรหัส Vigenère จึงถูกเจาะได้
คำสำคัญที่มีความยาว L จะเข้ารหัสตัวอักษรทุกตัวที่ตำแหน่ง L ด้วยค่าการเลื่อนเดียวกัน ดังนั้นหากคุณเอาตัวอักษรที่ 1, ที่ (L+1), ที่ (2L+1) และเรื่อยไป ตัวอักษรทุกตัวในกลุ่มนั้นถูกเลื่อนด้วยจำนวนเท่ากัน — พวกมันรวมกันเป็นรหัส Caesar ธรรมดา และเป็นเช่นนี้กับแต่ละตำแหน่งเริ่มต้นทั้ง L ตำแหน่ง รหัส Vigenère จึงไม่ใช่ปัญหายากปัญหาเดียว แต่เป็นปัญหาง่าย ๆ L ข้อซ้อนกันอยู่ และสิ่งเดียวที่กั้นระหว่างคุณกับข้อความต้นฉบับคือการค้นหาค่า L
เมื่อรู้ความยาวของกุญแจแล้ว แต่ละคอลัมน์จะคงความถี่ของตัวอักษรที่เอียงไม่สม่ำเสมอแบบภาษาอังกฤษไว้ เพียงแต่ถูกติดป้ายใหม่ด้วยการเลื่อนเพียงครั้งเดียว นั่นคือสถานการณ์ที่การวิเคราะห์ความถี่แบบคลาสสิกถูกสร้างขึ้นมาเพื่อจัดการพอดี ศิลปะทั้งหมดของการเจาะรหัส Vigenère จึงสรุปลงเป็นคำถามเดียว: กุญแจยาวเท่าไร?
การหาความยาวของกุญแจด้วยดัชนีความบังเอิญ
ดัชนีความบังเอิญวัดความน่าจะเป็นที่ตัวอักษรสองตัวซึ่งสุ่มหยิบจากข้อความจะเป็นตัวเดียวกัน ภาษาอังกฤษทั่วไปอยู่ที่ราว 0.066 เพราะตัวอักษรของมันถูกใช้อย่างไม่สม่ำเสมอมาก ส่วนข้อความที่สุ่มอย่างสมบูรณ์อยู่ใกล้ 0.038 เมื่อคุณแยกข้อความเข้ารหัสออกเป็นจำนวนคอลัมน์ที่ถูกต้อง แต่ละคอลัมน์จะเป็นแบบอักษรเดี่ยวและดัชนีความบังเอิญของมันจะดีดกลับขึ้นไปทางค่าของภาษาอังกฤษ แต่ถ้าแยกเป็นจำนวนที่ผิด คอลัมน์ก็จะยังคงราบเรียบและดูสุ่มอยู่ที่ 0.038
เครื่องมือจะลองทุกความยาวกุญแจตั้งแต่หนึ่งไปจนถึงค่าสูงสุดที่คุณเลือก วัดดัชนีความบังเอิญเฉลี่ยของคอลัมน์สำหรับแต่ละความยาว แล้ววาดผลลัพธ์เป็นแผนภูมิแท่ง ความยาวที่แท้จริงจะโดดเด่นเป็นแท่งที่สูง — และทวีคูณของมันก็ด้วย เพราะความยาวสิบก็ทำให้ทุกกลุ่มของห้าเข้าแถวกันด้วย ความกำกวมของทวีคูณนี้เองที่ทำให้เครื่องมือไม่เพียงเชื่อแท่งที่สูงที่สุดเฉย ๆ ดังที่ส่วนถัด ๆ ไปจะอธิบาย
วิธีของ Kasiski
ยังมีวิธีที่สองซึ่งเก่ากว่าในการหาความยาวของกุญแจ ค้นพบโดย Friedrich Kasiski ในปี 1863 เมื่อคำที่พบบ่อยอย่าง THE เข้าแถวตรงกับส่วนเดียวกันของคำสำคัญสองครั้ง มันจะถูกเข้ารหัสเป็นลำดับข้อความเข้ารหัสเดียวกันทั้งสองครั้ง ระยะห่างระหว่างจุดซ้ำสองจุดนั้นต้องเป็นจำนวนเท่าของความยาวกุญแจที่ลงตัว — ดังนั้นความยาวกุญแจจึงหารระยะห่างนั้นได้ลงตัว หาลำดับที่ซ้ำกันหลาย ๆ ชุด วัดระยะห่าง แล้วความยาวกุญแจก็จะซ่อนอยู่ในบรรดาตัวประกอบร่วมของระยะห่างเหล่านั้น
เครื่องมือจะสแกนข้อความเข้ารหัสหาลำดับสามตัวอักษรที่ซ้ำกัน รวบรวมระยะห่างระหว่างพวกมัน แล้วนับว่ามีระยะห่างกี่ชุดที่ตัวประกอบแต่ละตัวหารลงตัว ตัวประกอบที่มีหลักฐานสนับสนุนมากที่สุดคือความยาวกุญแจที่น่าจะเป็นมากที่สุด สิ่งนี้แสดงเป็นแผงหลักฐานแยกต่างหาก เป็นอิสระจากดัชนีความบังเอิญ เพื่อให้สองเทคนิคที่ต่างกันเห็นพ้องกันในคำตอบได้
การแก้แต่ละคอลัมน์และการอ่านคำสำคัญออกมา
เมื่อกำหนดความยาวของกุญแจแล้ว ทุกคอลัมน์คือรหัส Caesar และรหัส Caesar ก็แตกได้ในทันที สำหรับแต่ละคอลัมน์ ตัวแก้รหัสจะลองการเลื่อนทั้งยี่สิบหกแบบ แล้วเก็บแบบที่ตัวอักษรหลังถอดรหัสเข้ากับความถี่ที่คาดหวังของภาษาอังกฤษได้ดีที่สุด ซึ่งวัดด้วยการทดสอบไคกำลังสอง (chi-squared) การเลื่อนที่ชนะของคอลัมน์หนึ่งคือหนึ่งตัวอักษรของคำสำคัญ: การเลื่อนสิบเอ็ดคือ L การเลื่อนสี่คือ E และเรื่อยไป อ่านการเลื่อนที่ชนะตามลำดับ แล้วคำสำคัญก็จะสะกดตัวเองออกมา
การถอดรหัสทั้งข้อความด้วยคำสำคัญที่กู้คืนได้นั้นจะคืนข้อความต้นฉบับกลับมา พร้อมตัวพิมพ์ใหญ่ ช่องว่าง และเครื่องหมายวรรคตอนเดิมที่ถูกใส่กลับเข้าไป ณ ตำแหน่งเดิมเป๊ะ ๆ หากกุญแจที่กู้คืนได้บังเอิญเป็นการซ้ำ — เช่น LEMONLEMON ทั้งที่กุญแจจริงคือ LEMON — เครื่องมือจะยุบมันลงเป็นคาบที่สั้นที่สุด ดังนั้นคุณจะเห็นคำสำคัญที่แท้จริงและสั้นที่สุดเสมอ
แก้ก่อน แล้วค่อยตรวจสอบ — เหตุใด bigram จึงสำคัญ
ตัวแก้รหัสแบบไร้เดียงสาจะเลือกความยาวของกุญแจจากดัชนีความบังเอิญแล้วหยุดแค่นั้น ซึ่งผิดพลาดได้ในสองกรณีที่พบบ่อย: ข้อความที่ซ้ำซากมากอาจบิดเบือนสถิติ และความยาวที่แท้จริงก็สับสนกับตัวหารของมันได้ง่าย เครื่องมือนี้หลีกเลี่ยงกับดักดังกล่าวด้วยการแก้รหัสที่ทุกความยาวที่เป็นไปได้ แล้วตัดสินผลลัพธ์จากว่าผลถอดรหัสแต่ละแบบอ่านเป็นภาษาอังกฤษได้มากเพียงใด — แก้ก่อน ตรวจสอบทีหลัง
ตัวตัดสินไม่ใช่ความถี่ของตัวอักษรเดี่ยว ซึ่งหลอกได้ง่ายอย่างน่าประหลาดใจ: กุญแจที่ผิดไปเล็กน้อยอาจให้ข้อความที่เละเทะแต่บังเอิญมีส่วนผสมของตัวอักษรที่ดูสมเหตุสมผล แทนที่จะเป็นเช่นนั้น เครื่องมือจะให้คะแนนผลถอดรหัสแต่ละแบบด้วย bigram ของมัน — ความน่าจะเป็นของคู่ตัวอักษรที่อยู่ติดกันทุกคู่ ซึ่งเรียนรู้มาจากกองข้อความภาษาอังกฤษขนาดใหญ่ ภาษาอังกฤษจริงเต็มไปด้วยคู่อย่าง TH, HE และ ER และแทบไม่มี QJ หรือ ZX เลย ดังนั้นตัวอักษรกุญแจที่ผิดเพียงตัวเดียวก็แทรกคู่ที่เป็นไปไม่ได้เข้ามาและฉุดคะแนนจมลง ผลถอดรหัสที่มีความเข้ากันของ bigram ดีที่สุดจะเป็นผู้ชนะ และเมื่อเสมอกันจะให้กุญแจที่สั้นกว่าชนะ ซึ่งเป็นเหตุผลที่รหัส Caesar ธรรมดาคลี่คลายเป็นกุญแจตัวอักษรเดียวได้อย่างถูกต้อง
คุณต้องการข้อความมากแค่ไหน และเมื่อใดที่มันทำงานได้ยาก
เนื่องจากแต่ละคอลัมน์ถูกแก้ด้วยการวิเคราะห์ความถี่ สิ่งที่สำคัญคือมีตัวอักษรกี่ตัวตกลงในแต่ละคอลัมน์ — นั่นคือความยาวรวมหารด้วยความยาวของกุญแจ ด้วยตัวอักษรราวสี่สิบตัวขึ้นไปต่อคอลัมน์ การกู้คืนมักจะแม่นยำเป๊ะ ทั้งกุญแจและข้อความต้นฉบับ ย่อหน้าที่มีสองร้อยตัวอักษรเจาะกุญแจสั้นได้สบาย ส่วนกุญแจที่ยาวสักสิบกว่าตัวต้องการข้อความเข้ารหัสหลายร้อยตัวอักษรจึงจะมั่นใจได้
เมื่อข้อความเข้ารหัสสั้นเมื่อเทียบกับกุญแจ คอลัมน์จะบางและการนับความถี่ต่อคอลัมน์ก็จะมีสัญญาณรบกวนมากขึ้น ตัวแก้รหัสก็ยังคงคืนความพยายามที่ดีที่สุดของมัน — บ่อยครั้งเป็นผลที่เกือบถูก ผิดไปหนึ่งหรือสองตัวอักษรกุญแจแต่ยังอ่านออก — แทนที่จะไม่คืนอะไรเลย หากผลลัพธ์ดูเกือบถูกต้อง วิธีแก้ตามปกติคือเพียงเพิ่มข้อความเข้ารหัส หรือปรับความยาวของกุญแจด้วยมือโดยใช้แผนภูมิ รหัสจะต้านทานก็ต่อเมื่อมีข้อความไม่พอที่จะวัดได้จริง ๆ เท่านั้น
คำถามที่พบบ่อย
เจาะรหัส Vigenère ได้จริงหรือโดยไม่ต้องมีกุญแจ?
ตัวแก้รหัสหาความยาวของกุญแจได้อย่างไร?
ดัชนีความบังเอิญคืออะไร?
วิธีของ Kasiski คืออะไร?
ทำไมกุญแจที่กู้คืนได้อาจผิดไปเล็กน้อย?
ฉันต้องใช้ข้อความเข้ารหัสมากแค่ไหน?
ทำไมเครื่องมือถึงตรวจ bigram แทนที่จะดูแค่ความถี่ของตัวอักษร?
ฉันบังคับความยาวกุญแจค่าหนึ่งได้หรือไม่?
มันใช้ได้กับ Beaufort, Gronsfeld หรือรหัสแบบหลายอักษรอื่น ๆ หรือไม่?
ข้อความเข้ารหัสของฉันถูกส่งไปยังเซิร์ฟเวอร์หรือไม่?
สิ่งนี้ต่างจากเครื่องมือรหัส Vigenère อย่างไร?
เครื่องมือที่เกี่ยวข้อง
ทำงานต่อด้วยเครื่องมือที่มีประโยชน์เหล่านี้