Macchina Enigma
Un grande difetto del codice Enigma era che una lettera non poteva mai essere codificata come se stessa. In altre parole, una “M” non sarebbe mai stata codificata come una “M”. Questo era un enorme difetto del codice Enigma perché dava ai codebreaker una parte di informazione che potevano usare per decifrare i messaggi. Se i codebreaker potevano indovinare una parola o una frase che probabilmente sarebbe apparsa nel messaggio, potevano usare questa informazione per iniziare a decifrare il codice. Poiché i tedeschi inviavano sempre un bollettino meteorologico all’inizio del messaggio, e di solito includevano la frase “Heil Hitler” alla fine del messaggio, c’erano frasi che i decrittatori sapevano cercare. I decodificatori potevano confrontare una data frase con le lettere del codice, e se una lettera della frase corrispondeva ad una lettera del codice, sapevano che quella parte del codice non conteneva la frase. I decodificatori potevano quindi iniziare a decifrare il codice con un processo di eliminazione.
Trova i possibili contendenti per la codifica della parola “RAIN” nella stringa codificata qui sotto. (Il simbolo % è usato per indicare lettere sconosciute).
Messaggio codificato E R W N I K O L K M M M M Frase R A I N % % % % % % % % % % % % RAIN non può essere codificato come ERWN perché la N in RAIN e la N in ERWN corrispondono. Poiché N non può essere codificato come se stesso, questa non è la codifica.
Spostare il nostro messaggio uno slot a destra, e vedere se il risultato è una codifica valida.
Messaggio codificato E R W N I K O L K M M M M Frase % R A I N % % % % % % % % % % RAIN non può essere codificato come RWNI perché la R in RAIN corrisponde alla R in RWNI. Spostiamoci di nuovo.
Messaggio codificato E R W N I K O L K M M M M Frase % % R A I N % % % % % % % % % RAIN non può essere codificato come WNIK perché la I in RAIN corrisponde alla I in WNIK.
Messaggio codificato E R W N I K O L K M M M M Frase % % % R A I N % % % % % % RAIN può essere codificato come NIKO perché le due frasi non hanno lettere che corrispondono. Quindi NIKO è una possibile codifica di RAIN.
Se ripetiamo questo processo, troveremo che NIKO, IKOL, KOLK, OLKM, LKMM, KMMM e MMMM sono tutte possibili codifiche di RAIN poiché nessuna lettera coincide tra RAIN e la codifica. Va bene che MMMM potrebbe codificare RAIN anche se questo significa che M codificherebbe R, A, I, e N perché ricordate che ad ogni pressione del tasto, la mappatura delle lettere in una macchina Enigma cambia.
Non è affatto garantito che RAIN sia codificato in questa stringa, però, ma ha dato ai decodificatori un buon punto di partenza per decifrare i messaggi.
Alan Turing e Gordon Welchman progettarono una macchina chiamata Bombe machine che usava circuiti elettrici per risolvere un messaggio codificato da Enigma in meno di 20 minuti. La macchina Bombe cercava di determinare le impostazioni dei rotori e della scheda della macchina Enigma usata per inviare un dato messaggio codificato.
La macchina standard britannica Bombe era essenzialmente 36 macchine Enigma cablate insieme, in questo modo, la macchina Bombe avrebbe simulato diverse macchine Enigma contemporaneamente. La maggior parte delle macchine Enigma aveva tre rotori e per rappresentare questo nel Bombe, ognuno dei simulatori Enigma nel Bombe aveva tre tamburi, uno per ogni rotore.
Tamburi della macchina Bombe
I tamburi del Bombe erano codificati per colore per corrispondere a quale rotore stavano simulando. Mentre una macchina Enigma a 3 rotori usava solo tre rotori alla volta, ce ne sono altri da scegliere. I tamburi erano disposti in modo che quello superiore dei tre simulava il rotore di sinistra dello scrambler Enigma, quello centrale simulava il rotore centrale, e quello inferiore simulava il rotore di destra. I tamburi giravano per provare una nuova configurazione. Per ogni rotazione completa dei tamburi superiori, i tamburi centrali venivano incrementati di una posizione, e lo stesso per i tamburi centrali e inferiori, per un totale di 26 × 26 × 26 = 17.576 posizioni dello scrambler Enigma a 3 rotori.
Poi, per una data configurazione del rotore (ad ogni giro dei tamburi), la macchina Bombe faceva un’ipotesi sull’impostazione della scheda, ad esempio “A è collegata a Z”. Poi, si passava e si determinava su cosa dovevano essere impostate tutte le altre lettere sulla scheda. Se sorgono contraddizioni, per esempio, ha dedotto che “A era collegato a W”, allora deve essere che A non è collegato a Z sulla scheda, sorge una contraddizione. Poiché le altre combinazioni di lettere che la macchina ha appena capito sono state determinate sulla base di una falsa assunzione (cioè l’assunzione che A è collegato a Z), tutte quelle combinazioni non sono valide, e la macchina Bombe sa che non deve perdere tempo a controllare nessuna di quelle combinazioni in seguito. Così, diciamo che la macchina ha indovinato che A è collegato a Z, e poi la macchina deduce che se A è collegato a Z, allora B deve essere collegato a E. Se più tardi determina che A non è collegato a Z, sa che B non è collegato a E. Dopo che una tale contraddizione si verifica, la macchina Bombe non indovinerà più che A è collegato a Z, e sa di non indovinare che B è collegato a E, e così via. La macchina Bombe sposta le posizioni del rotore, e sceglie una nuova ipotesi e ripete questo processo finché non appare una disposizione soddisfacente delle impostazioni. Poiché i circuiti elettrici possono eseguire calcoli molto rapidamente, la macchina Bombe può passare attraverso tutte le combinazioni di rotori in circa 20 minuti.
Ad ogni posizione dei tamburi, la configurazione verrebbe testata per vedere se la configurazione porta ad una contraddizione logica, escludendo quell’impostazione. Se il test non portava a una contraddizione, la macchina si fermava e il decoder notava quella configurazione come soluzione candidata. Poi, la macchina viene riavviata e vengono testate altre configurazioni. Questi test restringevano la lista delle possibili configurazioni e le soluzioni candidate venivano ulteriormente testate per eliminare quelle che non avrebbero funzionato. Di solito c’erano molte soluzioni candidate senza successo prima di trovare quella corretta.