TDCTF Academy Logo TDCTF ACADEMY

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

PADA HALAMAN INI