Lab 14: ️ Enigma Machine - Simulasi Cipher Mesin Nazi Jerman
Target: Memahami cara kerja mesin Enigma yang digunakan PD II dan bagaimana dipecahkan oleh Alan Turing
Tools:python3
Konsep
Enigma menggunakan 3-5 rotor yang berputar setiap kali tombol ditekan. Setiap rotor melakukan substitusi, dan reflektor membuat enkripsi reversibel.
Kelemahan Enigma:
- Huruf tidak pernah berubah menjadi dirinya sendiri
- Setting awal (rotor position) hanya 26³ = 17.576 kemungkinan
- Polish Bombe + Alan Turing memecahkannya
Praktikum
cd ~ && mkdir crypto-lab14 && cd crypto-lab14
python3 << 'PYEOF'
import string
class EnigmaSim:
def __init__(self, rotor1, rotor2, rotor3, reflector):
self.rotors = [rotor1, rotor2, rotor3]
self.reflector = reflector
self.positions = [0, 0, 0]
def encrypt_char(self, c):
if c not in string.ascii_uppercase:
return c
# Forward through rotors
idx = ord(c) - 65
for i in range(3):
idx = (ord(self.rotors[i][(idx + self.positions[i]) % 26]) - 65 - self.positions[i]) % 26
# Reflector
idx = ord(self.reflector[idx]) - 65
# Backward through rotors
for i in range(2, -1, -1):
rotor_pos = (ord(self.rotors[i][idx]) - 65)
idx = (rotor_pos - self.positions[i]) % 26
idx = (idx + self.positions[i]) % 26
# Rotate rotors
self.positions[0] = (self.positions[0] + 1) % 26
if self.positions[0] == 0:
self.positions[1] = (self.positions[1] + 1) % 26
if self.positions[1] == 0:
self.positions[2] = (self.positions[2] + 1) % 26
return chr(idx + 65)
# Rotor wirings (simplified)
rotor_I = "EKMFLGDQVZNTOWYHXUSPAIBRCJ"
rotor_II = "AJDKSIRUXBLHWTMCQGZNPYFVOE"
rotor_III = "BDFHJLCPRTXVZNYEIWGAKMUSQO"
reflector_B = "YRUHQSLDPXNGOKMIEBFZCWVJAT"
enigma = EnigmaSim(rotor_I, rotor_II, rotor_III, reflector_B)
plain = "HELLOENIGMA"
cipher = ''.join(enigma.encrypt_char(c) for c in plain)
# Reset for decryption
enigma2 = EnigmaSim(rotor_I, rotor_II, rotor_III, reflector_B)
decrypted = ''.join(enigma2.encrypt_char(c) for c in cipher)
print(f"Plain: {plain}")
print(f"Cipher: {cipher}")
print(f"Decrypt: {decrypted}")
print()
# Demonstrasi: huruf yang sama → cipher berbeda
enigma3 = EnigmaSim(rotor_I, rotor_II, rotor_III, reflector_B)
for i, c in enumerate("AAA"):
result = enigma3.encrypt_char(c)
print(f" 'A' ke-{i+1} → '{result}' (rotor bergerak!)")
PYEOF
️ Analisis
| Komponen Enigma | Fungsi |
|---|---|
| Rotor | Substitusi + rotasi (berubah setiap huruf) |
| Reflector | Membuat enkripsi reversibel (sama untuk enkrip/dekrip) |
| Plugboard | Substitusi tambahan (10 pasang huruf) |
Refleksi: Enigma dianggap "tidak terpecahkan" di masanya - tapi kelemahan desain (huruf tidak bisa ke dirinya sendiri) membuatnya rentan. Alan Turing dan tim Bletchley Park memecahkannya, membantu mengakhiri PD II lebih cepat. Sejarah menunjukkan: tidak ada cipher yang benar-benar aman.
Generated by @farishhz Agent Pentest Pipeline - TDCTF Security Academy