เครื่อง Enigma

เครื่องเข้ารหัสที่กองทัพเยอรมันใช้ตลอดสงครามโลกครั้งที่สอง ทำงานเหมือนของจริงทุกอย่าง โรเตอร์สามวงหมุนอยู่หลังแผงเสียบสาย มีรีเฟลกเตอร์ส่งสัญญาณย้อนกลับผ่านโรเตอร์อีกรอบ และได้ตารางตัวอักษรใหม่ทุกครั้งที่กดปุ่ม ตั้งค่าแล้วพิมพ์ได้เลย ค่าตั้งชุดเดียวกันใช้ทั้งเข้ารหัสและถอดรหัส เพราะเครื่องทำอย่างอื่นไม่ได้ และไม่มีตัวอักษรไหนออกมาเป็นตัวเดิม ซึ่งคือช่องโหว่ที่ทำให้ Bletchley Park อ่านมันได้

อันนี้ไม่ปกป้องอะไรทั้งสิ้น Enigma ถูกถอดได้ตั้งแต่ปี 1932 โดยมาเรียน เรเยฟสกี และถูกอ่านเป็นล่ำเป็นสันตั้งแต่ปี 1940 ทุกวันนี้โน้ตบุ๊กเครื่องเดียวถอดได้ในไม่กี่วินาที มันอยู่ที่นี่เพื่อให้เข้าใจ ไม่ใช่เพื่อเอาไปใช้

A A A

มันคือเครื่องพิมพ์ดีดที่สายไฟข้างในถูกสลับไว้ กด A แล้วหลอดตัวอื่นติด

ทุกครั้งที่กดปุ่ม วงล้อจะหมุนหนึ่งก้าว การสลับสายจึงเปลี่ยนไปสำหรับตัวถัดไป กด A ห้าครั้งติดกันจะได้ตัวอักษรห้าตัวที่ไม่ซ้ำกันเลย นี่คือหัวใจทั้งหมด และเป็นเหตุผลที่การนับความถี่ตัวอักษรใช้ถอดมันไม่ได้

ค่าตั้งหกอย่างข้างล่างคือ "ก่อนเริ่มพิมพ์ สายไฟถูกจัดไว้ยังไง" เท่านั้นเอง ทั้งสองฝ่ายตั้งเครื่องเหมือนกันทุกเช้าตามใบรหัสประจำวัน สิ่งที่ฝ่ายหนึ่งพิมพ์ อีกฝ่ายจึงได้กลับคืนมา

พิมพ์ข้อความ

ตั้งค่าเครื่อง

ตอนนี้เครื่องตั้งไว้ที่โรเตอร์ I II III และทุกค่าอยู่ที่ A ซึ่งเป็นเครื่องที่ใช้งานได้เลย เปลี่ยนตรงนี้เฉพาะตอนที่ต้องตั้งตามใบรหัสประจำวัน หรือกดปุ่มโหลดข้อความปี 1930 ด้านบนแล้วดูมันเติมค่าให้เอง

โรเตอร์สามวง
หยิบวงล้อสามวงจากกล่องที่มีห้าวง แล้วเสียบเข้าแกนเรียงจากซ้ายไปขวา จะเลือกวงไหนและเรียงลำดับยังไง เป็นส่วนหนึ่งของรหัสประจำวัน
รีเฟลกเตอร์
ฝาปิดที่ปลายสุด ทำหน้าที่ส่งกระแสย้อนกลับผ่านวงล้อด้วยเส้นทางอื่น มันคือเหตุผลที่ตัวอักษรออกมาเป็นตัวเดิมไม่ได้
ค่า Ring
วงล้อแต่ละวงมีแหวนตัวอักษรสวมอยู่รอบ ค่านี้คือหมุนแหวนนั้นไปเท่าไรเทียบกับสายไฟข้างใน ตั้งก่อนใส่วงล้อเข้าเครื่อง
ตำแหน่งเริ่มต้น
พอใส่วงล้อครบแล้ว หมุนแต่ละวงด้วยมือจนตัวอักษรที่ต้องการโผล่ในช่องหน้าต่าง นั่นคือจุดที่ข้อความเริ่ม
แผงเสียบสาย
สายไฟที่เสียบไว้หน้าเครื่อง แต่ละเส้นสลับตัวอักษรสองตัว ทั้งขาเข้าและขาออก ปกติแจกมาสิบเส้น

กองทัพมีโรเตอร์ 5 ตัว ใช้ครั้งละ 3 ตัว สลับลำดับได้ UKW-B เป็นมาตรฐานตั้งแต่ปี 1937 ส่วน UKW-A ใส่ไว้เพราะข้อความจากคู่มือปี 1930 ใช้ตัวนี้

ค่า Ring คือการหมุนสายไฟข้างในวงล้อ ส่วนตำแหน่งเริ่มต้นคือตัวอักษรที่โผล่ในช่องหน้าต่างตอนพนักงานเริ่มพิมพ์ ทั้งคู่เป็นสามตัวอักษร ตัวละโรเตอร์ เรียงจากซ้ายไปขวา ใส่ได้สูงสุด 10 เส้น แต่ละเส้นสลับตัวอักษรสองตัวทั้งไปและกลับ ถ้าไม่ใส่ก็คือเครื่องที่ไม่มีแผงสาย

ทำไมโปรแกรมจำลองตัวอื่นให้ผลไม่ตรงกัน

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

อาการสาเหตุวิธีตรวจ
ผิดตั้งแต่ตัวแรก ผิดหมดทุกตัว ลำดับโรเตอร์อ่านกลับด้าน บางโปรแกรมเรียงขวาไปซ้ายตามทางที่กระแสไฟวิ่ง หน้านี้เรียงซ้ายไปขวาตามที่ล้อเสียบอยู่บนแกนจริง และตามที่พิมพ์ในใบรหัสประจำวัน สลับลำดับโรเตอร์ทั้งสามกลับด้านแล้วลองใหม่
ผิดตั้งแต่ตัวแรก แต่สลับโรเตอร์แล้วก็ยังผิด สลับ ring setting กับตำแหน่งเริ่มต้นกัน ทั้งคู่เป็นตัวอักษรสามตัวเหมือนกัน หน้าตาเหมือนใช้แทนกันได้ แต่ใช้แทนกันไม่ได้ ring หมุนสายไฟข้างในล้อ ส่วนตำแหน่งเริ่มต้นหมุนทั้งล้อ ตั้ง ring เป็น AAA ทั้งสองเครื่อง ถ้าตรงกันแล้วก็คือสาเหตุนี้
ถูกอยู่ไม่กี่ตัวแรก แล้วเพี้ยนยาวไปเลย อีกโปรแกรมไม่มี double step อันนี้เป็นข้อผิดพลาดที่พบบ่อยที่สุดในโปรแกรม Enigma และมองไม่เห็นเลยถ้าข้อความสั้น จึงหลุดออกมาเยอะมาก ลองเข้ารหัสยาวสักสามสิบตัวขึ้นไป เครื่องที่ไม่มี double step อยู่ได้ไม่ถึงขนาดนั้น
ถูกหมด ยกเว้นบางตัวออกมาเป็นตัวเดิม โปรแกรมนั้นไม่ใช่ Enigma จริง เครื่องจริงเปลี่ยนตัวอักษรเป็นตัวมันเองไม่ได้ ไม่ว่ากรณีใด เข้ารหัส AAAAAAAAAA ถ้ามี A โผล่ออกมา เลิกเชื่อโปรแกรมนั้นได้เลย

เวลาต้องการคนตัดสินแทนที่จะเถียงกัน ให้ใช้ตัวอย่างจากคู่มือ Enigma ปี 1930 ข้อความถอดแล้วของมันถูกตีพิมพ์มาหลายสิบปี ยาวเก้าสิบตัวอักษร ใช้รีเฟลกเตอร์ UKW-A และตั้งค่าไว้ให้เกิด double step มากกว่าหนึ่งครั้ง หน้านี้มีปุ่มโหลดขึ้นมาและถอดได้ถูกต้อง เครื่องจำลองที่ถอดไม่ได้คือเครื่องที่ผิด และจุดที่ผลเริ่มไม่ตรงจะบอกว่าเข้าข่ายแถวไหนในตาราง

ถอดรหัสข้อความที่มีคนส่งมาให้

คนส่วนใหญ่มาที่นี่พร้อมกับตัวอักษรก้อนหนึ่งกับค่าตั้งเครื่องชุดหนึ่ง จากเกมปริศนา ห้องหนีภัย การบ้าน หรือพิพิธภัณฑ์ เครื่องนี้สมมาตร จึงไม่มีปุ่มถอดรหัส และไม่มีโหมดแยก วิธีใช้คือตั้งเครื่องให้เหมือนคนส่งเป๊ะ ๆ แล้วพิมพ์ข้อความที่เข้ารหัสแล้วลงไป

  1. ตั้งโรเตอร์ จากซ้ายไปขวา ใบรหัสที่เขียนว่า II I III แปลว่าล้อซ้ายคือ II ล้อกลางคือ I ล้อขวาคือ III ถ้าแหล่งที่คุณได้มาเรียงตามทางเดินของกระแสไฟ ให้กลับด้าน
  2. ตั้งรีเฟลกเตอร์ ใช้ UKW-B ถ้าไม่ได้ระบุเป็นอย่างอื่น เป็นตัวมาตรฐานตั้งแต่ปี 1937 และข้อความที่ตีพิมพ์เกือบทั้งหมดใช้ตัวนี้
  3. ตั้ง ring setting สามตัวอักษร ในใบรหัสมักเขียนเป็นตัวเลข 1 คือ A, 2 คือ B ไล่ไปจนถึง 26 คือ Z
  4. ตั้งตำแหน่งเริ่มต้น สามตัวอักษร คือตัวที่โผล่ในช่องหน้าต่างก่อนกดปุ่มแรก ส่วนนี้เปลี่ยนทุกข้อความ ไม่ใช่เปลี่ยนวันละครั้งเหมือนอย่างอื่น
  5. เสียบปลั๊กบอร์ด บรรทัดอย่าง AV BS CG DL FU HZ IN KM OW RX คือสายสิบเส้น ใส่เรียงยังไงก็ได้ เพราะสายหนึ่งเส้นทำงานทั้งสองทาง
  6. พิมพ์ข้อความที่เข้ารหัสแล้ว เว้นวรรคกับเครื่องหมายวรรคตอนถูกตัดทิ้ง เพราะเครื่องมีปุ่มแค่ยี่สิบหกปุ่ม ไม่มีอย่างอื่นเลย

ถ้าผลออกมาเป็นขยะ แปลว่าค่าตั้งผิด ไม่ใช่ข้อความผิด ให้ไล่ย้อนขึ้นไปตามลิสต์ ปลั๊กบอร์ดเป็นจุดที่พิมพ์ผิดง่ายที่สุด และ ring setting เป็นจุดที่สับสนกับตำแหน่งเริ่มต้นง่ายที่สุด

พลทหารเยอรมันเขียน X แทนจุดจบประโยค และสะกดตัวเลขออกมาเป็นคำ ข้อความที่ถอดถูกจึงมักอ่านได้ว่า KEINEBESONDEREEREIGNISSEX ไม่ได้มีวรรคตอนอะไร การแยกคำเองเป็นหน้าที่ของคุณ และนั่นเป็นสัญญาณที่ดี ไม่ใช่สัญญาณว่าผิด

จำนวนค่าตั้งที่เป็นไปได้ และเหตุผลที่มากขนาดนั้นก็ยังไม่พอ

Enigma เป็นบทเรียนที่ดีเรื่องความต่างระหว่าง จำนวนกุญแจที่เยอะ กับ ความปลอดภัย ตัวเลขของเครื่องรุ่นกองทัพนั้นมหาศาลจริง ๆ

สิ่งที่เลือกได้จำนวนแบบ
เลือกโรเตอร์สามจากห้า โดยนับลำดับ60
Ring setting17,576
ตำแหน่งเริ่มต้น17,576
ปลั๊กบอร์ด สายสิบเส้น150,738,274,937,250
รวมประมาณ 1.6 × 1020

นั่นคือมากกว่าร้อยล้านล้านล้าน ถ้าลองวินาทีละแบบจะใช้เวลานานกว่าอายุของเอกภพ และกองบัญชาการเยอรมันก็คิดจากตัวเลขนี้ตรง ๆ

แต่มันก็ถูกถอดจนได้ และไม่มีเหตุผลข้อไหนเลยที่เกี่ยวกับขนาดของกุญแจ

  • ไม่มีตัวอักษรไหนเข้ารหัสออกมาเป็นตัวมันเอง ถ้าเดาได้ว่าในข้อความมีวลีอะไรอยู่ ก็เลื่อนวลีนั้นไปตามข้อความ แล้วตัดทุกตำแหน่งที่ต้องมีตัวอักษรกลายเป็นตัวมันเองทิ้ง ตำแหน่งส่วนใหญ่ตายทันที ที่เหลือน้อยพอจะไล่ทดสอบได้
  • สิ่งที่ต้องเดานั้นเดาง่ายมาก รายงานอากาศส่งทุกเช้า ข้อความจบด้วย HEILHITLER ฐานที่เงียบ ๆ ส่ง KEINEBESONDERENEREIGNISSE ไม่มีอะไรรายงาน ซ้ำกันทุกวัน รหัสที่ถอดไม่ได้ในทางทฤษฎีกลายเป็นถอดได้ในทางปฏิบัติ เมื่อคุณรู้อยู่แล้วว่ามันเขียนว่าอะไร
  • ปลั๊กบอร์ดแทบไม่ได้ช่วยอะไรเลยในการป้องกัน มันเป็นที่มาของเกือบทั้งหมดของเลข 1020 นั้น แต่วิธีของทัวริงถูกจัดวางไว้ ให้การเดาปลั๊กบอร์ดผิดขัดแย้งกับตัวเองและตัดทิ้งได้โดยไม่ต้องทดสอบส่วนที่เหลือ พจน์ที่ใหญ่ที่สุดในผลคูณจึงลอกออกได้แทบฟรี
  • ขั้นตอนการใช้งานรั่วมากกว่าตัวเครื่อง ก่อนปี 1940 พลทหารส่งกุญแจประจำข้อความซ้ำสองรอบตอนต้นของทุกข้อความ ซึ่งเป็นสิ่งที่ทำให้ Marian Rejewski สร้างผังสายไฟขึ้นมาใหม่ได้ในปี 1932 โดยไม่ต้องมีเครื่องที่ยึดมาได้เลยสักเครื่อง

ขนาดของกุญแจบอกแค่ว่าการไล่เดาทุกแบบจะใช้เวลานานแค่ไหน และการไล่เดาทุกแบบ คือสิ่งที่ผู้โจมตีทำเมื่อไม่มีวิธีที่ดีกว่า ในกรณีนี้มีวิธีที่ดีกว่าอยู่ตลอดสงคราม

คำถามที่พบบ่อย

ข้อความของฉันถูกอัปโหลดไหม

ไม่ เครื่องทำงานในแท็บนี้ขณะที่คุณพิมพ์ นโยบายความปลอดภัยของเว็บกำหนด connect-src ‘none’ เบราว์เซอร์จึงบล็อกการเรียกเครือข่ายจากหน้านี้ ต่อให้โค้ดอยากส่งข้อความออกไปก็ส่งไม่ได้

รู้ได้ยังไงว่าเครื่องนี้ถูกต้อง

เพราะมันถอดข้อความตัวอย่างจากคู่มือ Enigma ปี 1930 ได้ครบทั้ง 90 ตัวอักษร ตรงกับคำแปลที่ถูกเผยแพร่มาหลายสิบปี ข้อความนั้นยาวพอที่จังหวะ double step จะเกิดขึ้นหลายครั้ง ซึ่งเป็นจุดที่เครื่องจำลองส่วนใหญ่ทำผิด เครื่องที่ไม่มี double step จะถูกในไม่กี่ตัวแรกแล้วเพี้ยนไปเงียบ ๆ กดปุ่มโหลดข้อความแล้วดูได้เลย

double step คืออะไร

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

ทำไมตัวอักษรถึงออกมาเป็นตัวเดิมไม่ได้

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

ใครถอดได้ และเมื่อไหร่

มาเรียน เรเยฟสกี จากสำนักรหัสลับโปแลนด์ คำนวณย้อนหาการเดินสายได้สำเร็จตั้งแต่ปี 1932 ก่อนสงครามหลายปี และโปแลนด์มอบงานทั้งหมดให้อังกฤษกับฝรั่งเศสไม่กี่สัปดาห์ก่อนถูกบุก ที่ Bletchley Park อลัน ทัวริง และกอร์ดอน เวลช์แมน ต่อยอดจากงานนั้นเพื่อโจมตีค่าตั้งประจำวันในระดับอุตสาหกรรม เครื่องจักรที่พวกเขาสร้างขึ้นเพื่อทำงานนี้คือบรรพบุรุษโดยตรงของคอมพิวเตอร์ที่คุณกำลังใช้อ่านข้อความนี้

ทำไมมีโรเตอร์แค่ 5 ตัว

เพราะกองทัพบกมีอยู่ 5 ตัว ส่วนกองทัพเรือเพิ่มมาอีกสามตัวคือหมายเลข VI ถึง VIII ซึ่งมีรอยบากสองรอยต่อตัวและหมุนไม่เหมือนกัน การรองรับแบบครึ่ง ๆ กลาง ๆ จะให้ผลลัพธ์ที่ดูเหมือนถูกแต่ไม่ถูก เราจึงไม่ใส่ไว้จนกว่าจะทำได้ครบจริง