Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati,...

35
Enigma e la “bomba” di Turing Una storia contemporanea di crittografia e crittoanalisi Francesco Burato 1

Transcript of Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati,...

Page 1: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

Enigma e la “bomba” di TuringUna storia contemporanea di crittografiae crittoanalisi

Francesco Burato

1

Page 2: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

2

Indice

1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Enigma: la prima macchina per cifrare elettromeccanica. . . . . . 33 Enigma: versione informatica della macchina. . . . . . . . . . . . 113.1 Scelte strategiche di realizzazione. . . . . . . . . . . . . . . . . . 113.2 Specifiche di oggetti e metodi . . . . . . . . . . . . . . . . . . . . 12

3.2.1 Interfaccia Rotore . . . . . . . . . . . . . . . . . . . . . . 123.2.2 Classe Scambiatore . . . . . . . . . . . . . . . . . . . . . . 123.2.3 Classe Riflessore . . . . . . . . . . . . . . . . . . . . . . . 143.2.4 Classe ClickEvent ed interfaccia ClickListener. . . . . . . 143.2.5 Classe PannelloPrese . . . . . . . . . . . . . . . . . . . . . 153.2.6 Classe Enigma . . . . . . . . . . . . . . . . . . . . . . . . 163.2.7 Classe EnigmaSimulator . . . . . . . . . . . . . . . . . . . 17

4 La “Bomba” di Turing . . . . . . . . . . . . . . . . . . . . . . . . 194.1 Sinossi del primo tentativo di crittoanalisi: la “bomba” di Rejewski 194.2 Bletchley park . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.3 La “bomba” di Turing . . . . . . . . . . . . . . . . . . . . . . . . 225 La “Bomba” di Turing: versione Informatica . . . . . . . . . . . . 285.1 Considerazioni sulla simulazione . . . . . . . . . . . . . . . . . . 285.2 Specifiche di oggetti e metodi . . . . . . . . . . . . . . . . . . . . 29

5.2.1 Classe EnigmaForAnalysis . . . . . . . . . . . . . . . . . . 295.2.2 Classe BadCribException . . . . . . . . . . . . . . . . . . 305.2.3 Classe CribNode . . . . . . . . . . . . . . . . . . . . . . . 305.2.4 Classe CribNodeList . . . . . . . . . . . . . . . . . . . . . 315.2.5 Classe CribTree . . . . . . . . . . . . . . . . . . . . . . . . 315.2.6 Classe Bomb . . . . . . . . . . . . . . . . . . . . . . . . . 325.2.7 Classe BombRunner . . . . . . . . . . . . . . . . . . . . . 335.2.8 Classe AlanTuringBombs . . . . . . . . . . . . . . . . . . 335.2.9 Classe AlanTuringBombSimulator . . . . . . . . . . . . . 34

Page 3: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

1 Introduzione 3

1 Introduzione

Per migliaia di anni, re, regine e generali hanno avuto bisogno di comunicazionie!cienti per governare i loro paesi e comandare i loro eserciti. Nel contempo,essi compresero quali conseguenze avrebbe avuto la caduta dei loro messaggi inmani ostili: informazioni preziose sarebbero state a disposizione delle nazionirivali e degli eserciti nemici. Fu il pericolo dell’intercettazione da parte degliavversari a promuovere lo sviluppo di codici e cifre, tecniche di alterazione delmessaggio destinate a renderlo comprensibile solo alle persone autorizzate.

Il bisogno di segretezza ha indotto le nazioni a creare segreterie alle cifre edipartimenti di crittografia. È stato loro compito garantire la sicurezza dellecomunicazioni, escogitando e impiegando i migliori sistemi di scrittura segreta.Nello stesso tempo, i decrittatori, o crittoanalisti, hanno tentato di far brecciain quei sistemi e carpire i dati che custodivano. Crittografi e decrittatori sonocercatori di significati, alchimisti votati alla trasmutazione di astruse serie disegni in parole dotate di senso. La storia dei codici è la storia dell’antica,secolare battaglia tra inventori e solutori di scritture segrete; una corsa agliarmamenti intellettuale il cui impatto sulle vicende umane e sulla tecnologia èstato profondo.

La lunga battaglia tra inventori e solutori di codici ha prodotto importan-ti progressi scientifici. Gl’inventori hanno creato codici sempre più resistentimentre i solutori, per farvi breccia, hanno escogitato metodi sempre più sofisti-cati. Nello sforzo di tutelare e, rispettivamente, violare la segretezza, gli oppostischieramenti hanno attinto a un’ampia gamma di scienze e specializzazioni, dallamatematica alla linguistica, dalla teoria dell’informazione alla fisica quantistica.A loro volta, inventori e solutori di codici hanno arricchito queste discipline, eil loro lavoro ha accelerato il progresso tecnologico, come è dimostrato nel casodei calcolatori.

Sebbene la storia sia ricca di circostanze in cui la decifrazione di un messag-gio (o la resistenza del codice usato per cifrarlo) ha deciso l’esito di una battagliao il destino di una testa coronata, l’esempio lampante di come la crittografia e lacrittoanalisi abbiano determinato le sorti dell’umanità intera si ha nel XX secolocon le vicende legate alla macchina Enigma, la famigerata cifratrice meccanicain dotazione all’esercito tedesco durante la Seconda Guerra Mondiale. La vio-lazione dei codici prodotti da Enigma è stato un passo fondamentale a!nché laguerra terminasse con la vittoria degli Alleati in quanto l’intelligence prodottadai crittoanalisti inglesi ha determinato le sorti di battaglie fondamentalti comequella dell’Atlantico.

2 Enigma: la prima macchina per cifrare elettromeccanica.

Nel 1918 l’inventore tedesco Arthur Scherbius e il fidato amico Richard Rit-ter fondarono la Scherbius & Ritter, una società innovativa che non disdegna-va di occuparsi dei prodotti più diversi, dalle turbine ai guanciali riscaldati.Scherbius si era riservato la ricerca e lo sviluppo, ed era sempre a caccia dinuove opportunità. Uno dei suoi progetti era rivoluzionare l’antiquato modusoperandi della crittografia mandando in pensione carta e penna, e sostituen-dole con quanto di meglio la tecnica del ventesimo secolo avesse da o"rire.

Page 4: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

2 Enigma: la prima macchina per cifrare elettromeccanica. 4

Fig. 1: Esempio di disco cifrante di LeonBattista Alberti

Avendo studiato ingegneria elettricaad Hannover e Monaco, egli mise ap-punto un dispositivo crittografico chein sostanza era una versione elettro-meccanica del disco cifrante di LeonBattista Alberti, famoso per essre sta-to la prima macchina per cifrare mairealizzata. La sua invenzione, che fuchiamata Enigma, sarebbe passata al-la storia come uno fra i più temibilisistemi crittografici mai realizzati.

La macchina di Scherbius consi-steva di diversi ingegnosi elementi dalui combinati in un potente e sofisti-cato dispositivo per la produzione discritture segrete. Tuttavia, se smon-tiamo concettualmente la macchina ela ricostruiamo un elemento per volta,i principi del suo funzionamento ap-pariranno evidenti. La versione basedel congegno di Scherbius consistevain tre componenti collegati da fili elettrici: una tastiera per immettere le letteredel testo chiaro; un’unità scambiatrice che cifra la lettera trasformandola nelcorrispondente elelmento del crittogramma; e un visore con varie lampadine,che accendendosi indicano la lettera da inserire nel crittogramma. In figura 2è riportato uno schema semplificato del congegno, basato per semplicità su unalfabeto di sole sei lettere. Per generare il crittogramma, l’operatore preme iltasto corrispondente alla lettera da crittare; l’impulso elettrico raggiunge l’uni-tà scambiatrice, e dopo esser stato elaborato va ad illuminare il visore in modocorrispondente alla lettera crittata.

Fig. 2: Versione semplificata della macchina Enigma con un alfabeto cifrate disei lettere. L’elemento più importante di enigma è lo scambiatore. Di-gitando b sulla sinistra, la corrente entra nello scambiatore, segure ilpercorso dei fili elettrici ed emerge in modo da illuminare la lettera A.In breve, b è crittata come A. La tabella a destra riassume il modo inciascuna lettera è cifrata.

Lo scambiatore, uno spesso disco di gomma attraversato da una complessarete di fili, è la parte più importante della macchina. I fili elettrici provenientidalla tastiera entrano nello scambiatore in sei punti, seguono un percorso carat-

Page 5: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

2 Enigma: la prima macchina per cifrare elettromeccanica. 5

terizzato da vari gomiti, e infine emergono dalla parte opposta in altri sei punti.I circuiti interni dello scambiatore determinano il modo in cui un elemento deltesto chiaro è crittato. Con lo schema di base indicato in figura 2 nella tabelladi conversione è possibile realizzare in sostanza una semplice cifratura per sosti-tuzione monoalfabetica ovvero una cifratura in cui ciascuna lettera è sostituitacon un’altra.

Il passo successivo dell’idea di Scherbius consiste nel far ruotare automati-camente il disco scambiatore di un sesto di giro (o di un ventiseiesimo di gironel caso di un alfabeto completo di 26 lettere) dopo la cifratura di ogni lettera.In figura 3 è riportato un esempio di come lo scambiatore di figura 2, girato diun sesto di giro ad ogni uso dello scambiatore, produca testi cifrati diversi.

Fig. 3: Ogni volta che una lettera è digitata tramite la tastiera e crittata, loscambiatore ruota di un posto. In (a) lo scambiatore critta b come A,ma in (b) il nuovo orientamento fa si che b sia crittata come C. In (c),essendo ruotato di un altro posto, lo scambiatore cifra b come E. Dopola sostituzione di altre 4 lettere, e dopo aver ruotato di altri 4 posti, loscambiatore riprende la configurazione iniziale.

Lo scambiatore rotante è la caratteristica più importante del progetto diScherbius. Tuttavia, così com’è il congegno ha un punto debole evidente: doposei pressioni consecutive di qualunque tasto, il disco torna alla posizione iniziale,e se si continuasse a premere lo stesso tasto, lo schema di cifratura si ripeterebbetale e quale. In generale, i crittografi temono ogni forma di ripetizione, perchéripetizione significa regolarità e struttura del crittogramma, sinonimo di cifra-

Page 6: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

2 Enigma: la prima macchina per cifrare elettromeccanica. 6

tura debole. Il problema può essere corretto in misura notevole introducendoun nuovo scambiatore.

Nella figura 4(a) il primo disco è sul punto di far avanzare il secondo. Dopoaver battuto sulla tastiera e crittato una lettera, passiamo alla figura 4(b), incui il primo disco è avanzato di un posto e il secondo, spinto dal precedente, èanch’esso avanzato di un posto. Battuta e crittata un’altra lettera, passiamo allafigura 4(c) in cui di nuovo il primo disco è avanzato di un posto; questa volta peròil secondo è rimasto fermo; tornerà ad avanzare quando il primo avrà completatoun giro, dopo aver crittato quindi altre 5 lettere. Risulta quindi evidente cheil meccanismo illustrato è lo stesso che viene attuato nei contachilometri: conil passaggio del disco delle unità dalla cifra 9 alla cifra 0 il disco delle decineavanza di un posto, e lo stesso avviene anche per tutti gli altri dischi.

L’aggiunta del secondo scambiatore comporta il vantaggio che lo schema dicifratura non si ripete finchè il secondo scambiatore non è tornato al puntodi partenza, il che richiede sei giri completi del primo scambiatore ovvero lacifratura di 6x6 lettere. In altre parole, due dischi con sei posizioni ciascunoequivalgono ad una sostituzione monoalfabetica del tipo descritto in precedenzache prevede l’uso di 36 diversi alfabeti cifranti detta, per questo motivo, cifraturapolialfabetica, dello stesso tipo di quella che veniva realizzata con il disco diAlberti. Se invece del nostro alfabeto semplificato fosse adoperato un alfabetocompleto di 26 lettere, l’unità cifratrice commuterebbe in tutto 26x26, cioè 676,alfabeti cifranti.

A questo punto dovrebbe essere chiaro che combinando i dischi scambia-tori, detti anche rotori, è possibile costruire una macchina per cifrare moltosofisticata, capace di utilizzare un enorme numero di alfabeti cifranti passandocontinuamente da uno ad un altro di essi. L’operatore batte una lettera parti-colare e, in conformità con l’assetto dei rotori, la lettera è crittata in base a unadelle centinaia di alfabeti cifranti disponibili. Subito dopo l’assetto dei rotoricambia, cosicché la lettera successiva sarà crittata in base ad un altro alfabe-to cifrante. Oltretutto, ogni passo è eseguito con estrema precisione e rapidità,grazie ai moviementi automatici dei rotori e alla velocità della corrente elettrica.

Prima di esporre nei particolari in che modo Scherbius pensava che la suamacchina sarebbe stata usata, ci sono altri due elementi molto importanti ripro-dotti in figura 5. Innanzittutto, per una sicurezza ancora maggiore, il modellodi base della sua macchina impiegava un terzo rotore. Poiché Enigma utilizzavaalfabeti completi di 26 caratteri, essa disponeva di 26x26x26 = 17.576 proceduredi sostituzione diverse. Inoltre, l’inventore aggiunse un riflessore. Il riflessore erasimile allo scambiatore, consistendo in un disco di gomma con circuiti interni,ma era diverso sia perché non ruotava, sia perché i fili che entravano da un latouscivano dallo stesso lato. Col riflessore installato, quando l’operatore digitavauna lettera il segnale elettrico attraversava i tre scambiatori, raggiungeva il ri-flessore ed era rimandato indietro. Perciò passava di nuovo dagli scambiatori,ma lungo un percorso di"erente. Per esempio, in base all’assetto mostrato infigura 5 la pressione del tasto b avrebbe inviato un impulso elettrico attraverso irotori fino al riflessore. Da qui, l’impulso sarebbe tornato indietro lungo i colle-gamenti e avrebbe raggiunto la lettera D. Naturalmente il segnale non sarebbeemerso dalla tastiera, come potrebbe sembrare dalla figura 5, ma avrebbe rag-giunto le lampadine del visore. A prima vista il riflessore sembra un’aggiuntainutile poiché, essendo statico, non fa aumentare il numero di alfabeti cifranti.

Page 7: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

2 Enigma: la prima macchina per cifrare elettromeccanica. 7

Fig. 4: Aggiungendo un altro scambiatore, lo schema di cifratura non si ripeteprima che siano sostituite 36 lettere; allora, e solo allora, entrambi gliscambiatori saranno tornati alla posizione iniziale. Per semplificare lafigura, gli scambiatori sono rappresentati in forma bidimensionale; invecedi ruotare di un posto i collegamenti si spostano verso il basso di un posto.Quando il filo elettrico sembra comparire in fondo allo scambiatore, lo sipotrà ritrovare subito sotto l’estremità superiore della figura. In (a), bè crittata come D. Dopo la cifratura, il primo scambiatore ruota di unposto, facendo ruotare di un posto anche il secondo scambiatore - ciò siverifica una volta sola durante la rivoluzione del primo rotore. Il nuovoassetto è mostrato in (b) dove b è crittata come F. Dopo la cifratura,il primo scambiatore ruota di un posto, ma in questo caso il secondoscambiatore mantiene il suo orientamento. Il nuovo assetto è mostratoin (c), dove b è crittata come B.

Page 8: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

2 Enigma: la prima macchina per cifrare elettromeccanica. 8

Fig. 5: Il progetto di scherbius del modello base di Enigma includeva una quartorotore detto riflessore, che costringeva l’impulso elettrico ad attraversaredi nuovo gli scambiatori.

Ma osservando come la macchina veniva usata per cifrare e decifrare i messaggi,i vantaggi risultano evidenti.

Supponiamo che un operatore volesse inviare una comunicazione cifrata. Pri-ma di cominciare egli doveva regolare gli scambiatori, in modo che assumesserola posizione iniziale voluta. Le posizioni possibili erano, come si è spiegato,17.576; quella prescelta determinava il modo in cui un particolare messaggio sa-rebbe stato crittato. La macchina Enigma era paragonabile ad un procedimentocrittografico generale, cioè ad un algoritmo crittografico. In tal caso, l’assettoiniziale di Enigma forniva ulteriori precisazioni necessarie alla cifratura, ossiaequivaleva ad una chiave. Di solito la posizione iniziale era contenuta in uncifrario, che elencava le chiavi da usare di giorno in giorno ed era a disposizionedi tutti gli operatori della rete. La distribuzione del cifrario richiedeva tempoe fatica, ma dato che era necessaria solo una chiave al giorno, era su!cientel’invio di un cifrario contenente 28 chiavi ogni 4 settimane. Una volta regolati irotori come richiesto dal cifrario, l’operatore poteva iniziare la codifica del mes-saggio: premeva il tasto corrispondente alla prima lettera, osservava la primalampadina che si illuminava sullo schermo, e ne prendeva nota. Poi, dopo che ilprimo rotore era automaticamente passato alla posizione successiva, l’operatorebatteva la seconda lettera in cifra e così via. Completato il crittogramma loprogeva al marconista, che lo inviava al destinatario.

Per decifrare il crittogramma, il destinatario doveva possedere un’altra mac-china Enigma, e un cifrario con l’assetto dei rotori da utilizzare giorno per giorno.Egli regolava la macchina come spiegato dal cifrario, batteva il crittogrammalettera dopo lettera, e annotava i caratteri del testo chiaro, indicati dall’accen-sione delle lampadine sul visore. In altre parole, mentre il mittenete digitava iltesto chiaro per generare il crittogramma, il destinatario digitava il crittogram-ma per ripristinare il testo chiaro; cifratura e decifrazione comportavano dunquele stesse operazioni.

La comodità della decifrazione era merito del riflessore. Nella figura 5 si vedeche premendo il tasto b e seguendo il percorso della corrente elettrica, andiamoa D. In modo analogo, premendo il tasto d e seguendo il percorso torniamoa B. La macchina trasforma un carattere in chiaro in un carattere cifrato, e,purché sia nel medesimo assetto, è in grado di trasformare il carattere cifrato

Page 9: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

2 Enigma: la prima macchina per cifrare elettromeccanica. 9

nell’originario carattere chiaro.Non si poteva certo escludere che uno o più esemplari di Enigma cadessero

in mani ostili, ma in mancanza dei dati sull’assetto iniziale sarebbe stato estre-mamente di!cile violare i crittogrammi generati dal congegno. Senza il cifrario,i crittoanalisti nemici avrebbero dovuto controllare ogni giorno tutte le 17.576chiavi possibili. Se avessero posseduto uno o più esemplari di Enigma, il lorocompito sarebbe stato un po’ più facile: avrebbero dovuto selezionare una asset-to, provare a decifrare un frammento di crittogramma e se il risultato fosse statoprivo di senso, passare all’assetto successivo. Ammesso di poter controllare unassetto al minuto, e di continuare la prova di giorno e di notte senza interru-zione, vagliarli tutti avrebbe richiesto due settimane. Era un discreto livello disciurezza, ma se il nemico avesse deciso di impiegare dozzine di persone solo aquesto scopo, si sarebbero potuti controllare tutti gli assetti in un solo giorno, ein casi fortunati la chiave avrebbe potuto essere scoperta in qualche ora. PerciòScherbius decise di accrescere l’a!dabilità della sua invenzione aumentando ilnumero di assetti, cioè di chiavi possibili.

Naturalmente avrebbe potuto aggiungere un altro rotore, aumentando lechiavi di 26 volte; preferì invece inserire due nuove caratteristiche. Innanzitutto,rese i rotori removibili e sostituibili. Per esempio, il primo e il terzo rotorepotevano scambiarsi i posti. Siccome i rotori erano diversi, e diversi erano imovimenti che compivano durante la cifratura, quet’ultima era influenzata dallaposizione reciproca dei rotori. Dati tre elementi intercambiabili, essi possonoessere combinati in sei modi di"erenti; perciò questo accorgimento aumentavail numero di chiavi di un fattore pari a 6.

La seconda caratteristica era l’inserimento di un pannello a prese multipletra la tastiera ed il primo rotore. Il pannello permetteva al mittente di inserirealcuni cavi muniti di spinotti, che avevano l’e"etto di scambiare due lettereprima della loro immissione nel rotore. Per esempio un cavo poteva essere usatoper collegare le prese b e a del pannello, cosicché quando il crittografo avessedeciso di crittare b, giunto ai rotori il segnale elettrico avrebbe seguito il percorsoproprio della a, e viceversa. L’operatore di Enigma disponeva di sei cavi, chegli davano la possibilità di scambiare sei coppie di lettere. Le altre quattordicilettere restavano non collegate e non scambiate. La figura 6 mostra lo schemadella macchina con il pannello a prese multiple in funzione. Poiché il diagrammasi riferisce ad un alfabeto semplificato di 6 lettere, sono state scambiate la b ela a.

C’è un’altra caratteristica del progetto di Scherbius, il cosiddetto anello cheche ancora non è stata menzionato. Anche se l’anello ha una certa influenza sullacifratura, è l’aspetto meno significativo della cifratrice, e si è ritenuto di poterloignorare, in questa discussione così come anche nel progetto di simulazione.

Ora che gli elementi principali del dispositivo di Scherbius sono stati de-scritti, è possibile calcolare il numero di chiavi che esso poteva impiegare. Talenumero disponeva dalle caratteristiche del pannello, dei singoli rotori, e dell’u-nità cifratrice formata da tre rotori. La lista qui sotto elenca le variabili deldispositivo e il numero di possibilità create da ogni variabile.

Scambiatori (detti anche rotori): ognuno dei tre dischi rotanti poteva orientarsiin 26 modi nel piano perpendicolare al suo asse di rotazione. Diconseguenza, erano ammesse 26 x 26 x 26 = 17.576 combinazioni diorientamenti.

Page 10: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

2 Enigma: la prima macchina per cifrare elettromeccanica. 10

Fig. 6: Il pannello a prese multiple era interposto tra la tastiera e gli scambiatori.Inserendo gli appositi cavetti era possibile scambiare due lettere. Così,in questo caso, lo scambio riguarda b e a. Durante la cifratura di b,la corrente segue il percorso che normalmente caratterizza la cifraturadi a. Nel caso di una macchina Enigma reale, a 26 lettere, l’operatoredisponeva di almeno sei cavi e poteva scambiare almeno sei coppie dilettere simultaneamente.

Unità-cifratrice: i tre scambiatori (1,2 e 3) potevano essere inseriti nell’uni-tà centrale in diverse posizioni reciproche, così riassumibili: 123,132, 213, 231 , 312, 321. Erano quindi ammesse 6 diverse posizionireciproche dei rotori (permutazioni).

Pannello-a-prese-multiple: i possibili abbinamenti di 12 (6 x 2) sono moltissimi,per l’esattezza 100.391.791.500.

Il numero totale di chiavi si ottiene moltiplicando le suddette possibilità: 17.576x 6 x 100.391.791.500 = 10.586.916.764.424.000 in lettere circa 10 milioni dimiliardi.

Una volta presi accordi sui collegamenti del pannello, sull’anello, sull’ordinedei rotori e sul loro orientamento (cioè sui fattori che specificano la chiave),mittente e destinatario potevano crittare e decrittare i messaggi con facilità.D’altra parte l’intercettatore nemico, se fosse ricorso ad una strategia a provadi errore, avrebbe dovuto controllare 10 milioni di miliardi di combinazioni deifattori di chiave. Un crittoanalista così rapido da controllare una combinazio-ne al minuto, e così instancabile da lavorare giorno e notte sena interruzione,avrebbe impiegato un tempo superiore all’età dell’universo. (In e"etti, questavalutazione eccede di ottimismo, perché nei calcoli precedenti non si è tenutoconto dell’anello. Se lo si fosse fatto, si sarebbe constatato che le combinazionipossibili erano molto più numerose.

L’esercito tedesco decise dunque di adottare Enigma come cifratrice u!cialedelle proprie comunicazioni, in quanto considerato generatore di codici cifra-ti inviolabili. All’alba della Seconda Guerra Mondiale però decisero di incre-mentare ulteriormente il livello di sicurezza del dispositivo introducendo nuovecaratteristiche:

1. Il numero di rotori possibili passò da 3 a 5. Pertanto ogni operatoreEnigma aveva a disposizione 5 rotori tra i quali sceglierne 3 da dispor-

Page 11: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

3 Enigma: versione informatica della macchina. 11

re in tutti modi possibili. Le combinazioni possibili dell’unità cifratricepassavano dunque da 6 a 60.

2. Il numero di cavetti a disposizione dell’operatore passarono da 6 a 10determinando la possibilità di scambiare fino a 20 lettere nel pannelloa prese multiple incrementando enormemente il numero di combinazionipossibili.

Il numero di assetti possibili passava dunque da 10 milioni a circa 159 miliardidi miliardi, convincendo la maggior parte dei militari al fatto che Enigma fosseinviolabile.

3 Enigma: versione informatica della macchina.

La realizzazione di Enigma informatica ha richiesto la considerazione di tuttigli aspetti descritti nella parte precedente. Il funzionamento di Enigma deveovviamente essere virtualizzato con gli strumenti messi a disposizione dai lin-guaggi di alto livello più di"usi, oltre che ha dover prevedere il maggior gradodi ottimizzazione possibile del codice.

3.1 Scelte strategiche di realizzazione.Per la realizzazione del programma di simulazione si è deciso di adottare illinguaggio ad oggetti Java Standard Edition. Le motivazioni di tale scelta sonostate molteplici:

• Il paradigma ad oggetti consente di realizzare delle strutture dati astrattedotate di particolari funzioni, applicabili separatamente a ciascuno di essi.Ciò ha permesso di ottenere una perfetta trasposizione dei componenti del-la macchina in ambiente virtuale. Sono infatti stati realizzati tanti oggettiquanti sono i componenti analizzati nella parte precedente e pertanto:

– Scambiatore;– Riflessore;– Pannello a prese multiple;– Enigma (l’oggetto che rappresenta la cifratrice nel complesso e che

istanzia ciascuno dei componenti necessari).

• Essendo il Java un linguaggio interpretato multipiattaforma si è ritenuto,data l’attuale di"usione di OS diversi e l’evidente mancanza di un ambientepredominante come era stato Windows in passato, che l’uso di tale linguag-gio fosse la scelta ideale. Non trattandosi poi di un programma necessi-tante ingenti capacità di calcolo, l’interpretazione anziché la compilazionenon compromette in maniera eccessiva l’esperienza dell’utente.

• L’ambiente di lavoro integrato (IDE) utilizzato per realizzare i vari com-ponenti del programma, ovvero NetBeans 6.5, ha consentito un e!caceorganizzazione del progetto, considerate sia le peculiarità dell’editor (au-tocompletamento, ricerca ed organizzazione gerarchica dei file e degli og-geti creati) sia la comprensione nel pacchetto di strumenti per la creazionedi GUI orientate agli eventi.

Page 12: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

3 Enigma: versione informatica della macchina. 12

3.2 Specifiche di oggetti e metodi3.2.1 Interfaccia Rotore

L’interfaccia Rotore rappresenta il punto di partenza per la creazione di oggetticapaci di eseguire la codifica secondo il modo di funzionamento di Enigma.

I due metodi pubblici previsti, ossia forwardEncoding e backwardEncoding,dovranno essere implementati dalle sottoclassi di Rotore in maniera da consen-tire l’esecuzione della cifratura in avanti (ovvero dalla tastiera verso il riflessore)ed indietro (ovvero dal riflessore verso il visore).

3.2.2 Classe Scambiatore

La classe Scabiatore implementa due interfacce: Rotore e ClickListener.L’implementazione di Rotore consente la realizzazione della cifratura in avan-

ti ed indietro con i metodi ereditati dall’interfaccia Rotore mentre l’implementa-zione di ClickListener prevede l’implementazione del metodo clickArrived ovveroun metodo che consente la gestione di eventi di tipo ClickEvent (che verrannodescritti in seguito).

Il cuore del funzionamento dell’oggetto Scambiatore risiede nei due array diinteri previsti nel codice ovvero forwardArray e backwardArray oltre che negliinteri initialO!set e actualO!set. Il loro utilizzo è il seguente:

• forwardArray: rappresenta come una lettera viene crittata se transitantedalla tastiera verso il riflessore. Immaginando di associare alla lettera a ilvalore 0, alla b il valore 1 e via dicendo è possibile realizzare la cifraturaprelevando il valore memorizzato in forwardArray nella posizione ottenutaapplicando la conversione precedentemente descritta. L’array dovrà con-tenere a sua volta valori compresi tra 0 e 25 esattamente quante sono lelettere dell’alfabeto considerato, per consentire la realizzazione di una cor-rispondenza biunivoca tra indice dell’array e contenuto. Se, ad esempio,i primi elementi dell’array fossero {24, 5, 6, ...} ne conseguirebbe che laa, applicando la conversione indicata in precedenza, sarà trasmutata nellalettera corrispondente al numero memorizzato alla posizione 0 dell’array,nel caso in esempio 24, e quindi nella lettera y.

• backwardArray: rappresenta come una lettera viene crittata se transitan-te dal riflessore verso l’array. La conversione fra numeri e lettere è la stessadescritta in precedenza. Tuttavia l’array in esame deve essere costruito inmaniera accorta. Essendo, nella più generale delle ipotesi, forwardArrayun vettore di interi contenente valori compresi tra 0 e 25 che non se-guono alcuna logica, backwardArray dovrà essere costruito nella seguentemaniera: ad ogni indice del vettore deve essere associato un numero cherappresenta la posizione che ha l’indice considerato in forwardArray. Se,ad esempio, un forwardArray contenesse i valori {13, 5, ..., 0, 1}, back-wardArray dovrà avere in posizione 0 il numero 24 perché il numero 0occupa, in forwardArray la posizione numero 24 e, per la stessa ragione,dovrà avere in posizione 1 il numero 25.

• initialO!set: rappresenta la configurazione iniziale dello scambiatore con-siderato.

Page 13: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

3 Enigma: versione informatica della macchina. 13

• actualO!set: rappresenta il numero di “scatti” o di cifrature eseguite dalmomento in cui l’oggetto viene istanziato.

• l: rappresenta la lista degli oggetti ascoltatori agli eventi generati dalloscambiatore corrente.

La modalità con cui i singoli caratteri vengono cifrati e decifrati, contenutinei metodi pubblici ereditati forwardEncoding e backwardEncoding, sfruttanoproprio la combinazione tra la rappresentazione dati utilizzata per realizzare idue array e gli indici specificati in precedenza. Se infatti si osserva la riga dicodice necessaria per la cifratura in avanti

r e turn { . . . } t h i s . forwardArray [ ( c + th i s . i n i t i a l O f f s e t +t h i s . a c t u a lO f f s e t ) % th i s . s i z e ] { . . . } ;

e quella all’indietro

re turn { . . . } ( t h i s . backwardArray [ c ]! t h i s . a c tua lO f f s e t!t h i s . i n i t i a l O f f s e t +2" t h i s . s i z e )%th i s . s i z e { . . . } ;

è evidente che non è possibile ottenere un risultato migliore (computazional-mente parlando).

Un alternativa al gioco di indici e valori usati nei codici precedenti sarebbestata rappresentata dalla realizzazione dell’avanzamento o posizionamento del-lo scambiatore, facendo avanzare fisicamente i valori memorizzati in ciascunodegli array in gioco. Se ad esempio si avesse avuto forwardArray caricato con{24, 5, 6, ..., 0, 1} per far avanzare di uno “scatto” lo scambiatore (e quindisimulare lo scatto che subivano gli scambiatori di Enigma ad ogni cifratura),sarebbe stato necessario ricostruire l’array come {5, 6, ..., 0, 1, 24}, un lavorodecisamente troppo gravoso per essere e"ettuato ad ogni chiamata del metododi avanzamento.

A seguito la specificazione della funzione dei metodi rimanenti:

• Costruttori: accettano come parametri vettori di char, vettori di int ostringhe per realizzare forwardArray dopo aver verificato che i valori inse-riti rispettino i vincoli dettati dalla rappresentazione dati adottata. Cia-scuno costruttore prevede la chiamata del metodo privato makeBackwardche non fa altro che popolare backwardArray secondo i valori immagaz-zinati in forwardArray (si tratta di un’operazione che deve essere e"et-tuata solo una volta in quanto l’uso degli indici specificato in precedenzaconsente di evitare di dover ripopolare backwardArray ad ogni cifratura).

• forwardEncoding e backwardEncoding : eseguono la cifratura verso il ri-flessore e verso il visore secondo lo schema di conversione accennato inprecedenza (infatti sono passati come argomento interi e non caratteri).

• goNext: incrementa actualO!set della quantità how, specificata come ar-gomento. Si noterà che il metodo goNext esegue automaticamente le ope-razioni di verifica del termine del giro dello scambiatori: se la somma diinitialO!set e actualO!set supera 26 (è come se un rotore di un contachilo-metri stesse passando dalla posizione 9 alla posizione 0) allora si generanogli eventi per lista di ascoltatori al fine di comunicare l’avvenuto terminedel giro. La motivazione per l’uso di una gestione dei giri con eventi verràchiarita nelle parti successiva.

Page 14: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

3 Enigma: versione informatica della macchina. 14

• clickArrived: necessari per l’implementazione della classe ClickListener,eseguono come operazione l’avanzamento dello Scambiatore virtuale chia-mante di una quantità specificata dall’evento passato come argomento,mediante la chiamata al metodo goNext specificato pocanzi.

• ClickListnerList (classe privata): struttura dati a lista in cui verrannoinseriti tutti gli ascoltatori di eventi generati dalla variabile oggetto cheistanzia la classe in esame.

I metodi rimanenti non richiedono particolari spiegazioni in quanto semplice-mente modificanti dati appartenenti all’oggetto chiamante, in alcuni casi dopoaver e"ettuato un semplice controllo sull’input, o in alternativa restituenti ivalori dei dati privati dell’oggetto.

3.2.3 Classe Riflessore

La classe Riflessore implementa l’interfaccia Rotore.Come dovrebbe risultare chiaro dalla spiegazione del funzionamento di Enig-

ma specificata nella parte 2, il riflessore risulta a tutti gli e"etti un Rotorein quanto e"ettua la codifica dei valori numerici inseriti secondo lo schema diconversione specificato in precedenza.

I metodi ereditati (forwardEncoding e backwardEncoding) sono necessaria mantenere la compatibilità con l’interfaccia Rotore sebbene, in e"etti, ese-guano le stesse operazioni. Potrebbe dunque risultare non chiaro il legame diereditarietà tra Riflessore e Rotore ma la motivazione di questa scelta derivada considerazioni strategiche precise. In e"etti la generalizzazione degli oggettimediante il meccanismo dell’ereditarietà, consente di poter costruire macchi-ne virtuali Enigma aventi un grado di complessità decisamente maggiore deldispositivo inventato da Scherbius. Nulla impedirebbe ad un programmato-re di realizzare una versione di Enigma dotata di un numero ragguardevole diScambiatori e diversi meccanismi di riflessione, mediante gli oggetti che sonospecificati attraverso il progetto che si sta descrivendo. La gestione di Riflessorediventa quindi maggiormente malleabile se considerato come una sottoclasse diRotore ed è proprio questo il motivo dell’apparente forzatura realizzata.

Il costruttore non prevede argomenti in quanto il riflessore viene realizzatodirettamente dal programma. Dato infatti che esso non aumenta la complessitàdella cifratura ed avendo un ruolo pressoché passivo durante la codifica, si èritenuto su!ciente mantenere uno schema riflessivo adeguato, che quindi rea-lizzi la corrispondenza biunivoca tra 2 contenuti dell’array di elaborazione e icorrispettivi indici, per consentire una più semplice gestione dei dati da partedell’utente e del programmatore.

3.2.4 Classe ClickEvent ed interfaccia ClickListener.

La classe ClickEvent e l’interfaccia ClickListener sono necessari per la realiz-zazione degli “scatti” realizzati dalla macchina Enigma nel momento in cuiun rotore ultima il proprio giro rendendo necessario l’avanzamento del Rotoresuccessivo.

In pratica la generazione di un evento di tipo ClickEvent, come si può notaredalla specificazione del clickArrived nella classe Scambiatore, simula appunto un

Page 15: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

3 Enigma: versione informatica della macchina. 15

“click” ovvero uno scatto dello scambiatore corrente mediante l’applicazione delmetodo goNext.

La gestione di tale avvenimento mediante eventi consente di ottenere deivantaggi importanti:

• Innanzittutto automatizza il processo di verifica dell’avvenuto giro com-pleto dello Scambiatore, in quanto i metodi coinvolti, ed in particolaregoNext, prevedono la verifica costante di che punto dell’avanzamento sisia raggiunto.

• Secondariamente c’è anche da dire che nonostante (come risulterà chiarocon la specificazione della classe Enigma) in questo progetto si sia decisodi adottare una strategia di avanzamento semplice (uguale al contachilo-metri) nulla vieta che altri programmatori, aventi altri fini diversi dallasimulazione puntuale di Enigma come si intende fare in questo proget-to, decidano di adottare una modalità di avanzamento significativamentedi"erente. Se ad esempio si volesse che ad ogni lettera cifrata il primoscambiatore avanzasse di 1 e il terzo di 2, allora la gestione ad eventiconsente di facilitare tale compito perché la chiamata dei metodi previ-sti dalla classe interna di Scambiatore (ossia ClickListenerList) e"ettua inautomatico tutte le operazioni necessarie. L’unica condizione per appli-care tali regole è aggiungere in maniera oculata alla lista degli ascoltatoridegli eventi di un singolo Scambiatore, gli ascoltatori corretti per attuarela strategia di avanzamento desiderata.

3.2.5 Classe PannelloPrese

La classe PannelloPrese è la trasposizione virtuale del pannello a prese multipledi Enigma descritto nella sezione 2. Esso utilizza, allo stesso modo degli oggettidi tipo Scambiatore, un array di andata ed uno di ritorno per la cifratura deicaratteri ovviamente per le stesse ragioni specificate nelle sezioni precedenti.

Si potrà notare tuttavia che i costruttori di PannelloPrese, sono decisamentepiù articolati dei costruttori della classe Scambiatore che si limitavano a con-trollare la correttezza degli input inseriti. La motivazione di tale complicazionerisiede nel fatto che l’inserimento di una sequenza che rispetti le regole specificateper gli scambiatori non è più su!ciente per assicurare il corretto funzionamentodel pannello.

I controlli e"ettuati sono necessari infatti per verificare che nel momentoin cui si specifica una lettera (o un numero) in una determinata posizione nelvettore, allora all’indice del vettore passato come argomento relativo alla posi-zione di tale lettera ci sia esattamente il valore relativo all’indice di tale lettera.Per chiarire con un esempio si potrebbe dire che se nella posizione 0 del vet-tore è inserito il valore 3 (e quindi la lettera D), allora in posizione 3 dellostesso vettore deve essere collocato il valore 0 (ovvero la A è trasformata inD e la D è trasformata in A). Tale controllo è necessario proprio perché, incaso tale corrispondenza non sia verificata, allora il pannello virtualizzato nonavrebbe più il funzionamento del pannello a prese multiple di Enigma, ma quel-lo di una sostituzione monoalfabetica, già menzionata in precedenza in questadocumentazione.

I metodi hanno le seguenti specificazioni:

Page 16: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

3 Enigma: versione informatica della macchina. 16

• makeBackward: esattamente come il metodo omonimo della classe Scam-biatore, realizza l’array di ritorno backwardArray, una volta che è statocorrettamente inserito quello di andata forwardArray.

• forwardEncoding e backwardEncoding : realizzano la cifratura in avanti equella all’indietro passato un intero come argomento, allo stesso modo deimetodi omonimi della classe Scambiatore.

I metodi rimanenti non necessitano di specificazioni ulteriori in quanto nonrealizzanti operazioni da dover chiarire.

3.2.6 Classe Enigma

Si tratta della classe che esegue le operazioni di Enigma necessarie alla codificadei messaggi. In particolare si è deciso che, escludendo le operazioni di configu-razione, che prevedono diversi metodi detinati a tali funzioni, l’unico ruolo attivodegli oggetti della classe sarà attribuito ai metodi encodeChar e decodeChar.Pertanto si tratta di un sistema di codifica char-by-char.

La classe Enigma si basa in particolare su 4 oggetti, che riproducono fedel-mente i componenti utilizzati dalla versione reale della cifratrice: un pannello aprese multiple istanziato come oggetto di tipo PannelloPrese con il nome panel,un set di scambiatori possibili instanziato mediante un array di oggetti di tipoScambiatore con il nome di possible, un set di scambiatori e"ettivamente usatinella codifica istanziato mediante un array di oggetti di tipo Scambiatore con ilnome di used, un riflessore istanziato come un oggetto di tipo Riflessore con ilnome di rif.

L’unico costruttore previsto, privo di argomenti, realizza il caricamento diEnigma e l’istanziazione dell’array di Scambiatori possible. Tale caricamentoavviene mediante la lettura di un file contenuto nella posizione “/files/scambia-tori.conf”. Tale file dovrà contenere: nella prima riga il numero di scambiatoriche si intendono specificare in seguito e nelle righe successive le stringhe con-tenenti lo schema di codifica degli scambiatori separate da una a-capo. In talemaniera non si preclude la possibilità di estensione del progetto stesso: au-mentando il numero di righe e quindi di scambiatori è possibile aumentare ilnumero di combinazioni possibili degli scambiatori incrementando il grado dicomplessità del simulatore realizzato.

A seguito la specificazione dei metodi realizzati:

• setPanel: due metodi di cui si eseguito l’overloading (uno accetta un og-getto di tipo String come argomento e l’altro un array di char) consentonodi istanziare la variabile panel richiamando il costruttore della classe Pan-nelloPrese e passando come argomento la stringa o l’array argomento delmetodo in analisi.

• setTurningRules: metodo che fa si che il comportamento degli scambiatoridi Enigma sia quello a contachilometri. Infatti aggiungendo alla lista de-gli ascoltatori di ogni scambiatore lo scambiatore successivo, è su!cientefar avanzare il primo per ottenere il comportamento sperato: applicandoinfatti a tale scambiatore il metodo goNext, ogni volta che si esegue ungiro completo di ciascuno scambiatore questo genererà un evento di tipoClickEvent lanciato a tutti gli ascoltatori presenti nella propria lista diascoltatori, realizzando in maniera e!cace il contachilometri desiderato.

Page 17: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

3 Enigma: versione informatica della macchina. 17

• setUsed: istanzia la variabile used secondo l’ordine specificato dall’arraydi interi passato come argomento. Si ritenuto di dover copiare gli Scam-biatori nel vettore used da possible e non solo far riferimento (come ènoto le variabili oggetto sono puntatori ad oggetto nel linguaggio Java),per evitare che ci fossero problemi di concorrenza dovuti al passaggio diun vettore valido ma inconsistente da un punto di vista logico (il vettore{0,0,0} è perfettamente valido in quanto tali elementi esistono nel vettorepossible). È tuttavia consigliabile evitare che si verifichino casi di ripeti-zione nel momento in cui si passa l’array di interi perché ciò implica unariproduzione non fedele della cifratrice.

• setO!set: dopo aver e"ettuato i dovuti controlli, in corrispondena degliindici dell’array passato come argomento, imposta il valore della varibileinitO!set degli scambiatori utilizzati.

• encodeChar: accetta un carattere alfabetico minuscolo, fa avanzare di unaposizione il primo scambiatore e restituisce il carattere maiuscolo relativoalla lettera passata come argomento. Restituisce quindi il valore trasmuta-to del carattere di partenza passando quindi da testo chiaro a testo cifrato(si è deciso di utilizzare la convenzione crittografica secondo la quale iltesto chiaro è minuscolo e quello cifrato maiuscolo). L’utility di cifraturasi compone, come si può notare delle seguenti fasi: la trasformazione delcarattere passato come argomento secondo le regole dell’oggetto panel; unciclo for in cui, ad ogni passo, ciascuno scambiatore utilizzato modifica ilrisultato parziale della codifica dal primo verso l’ultimo; la trasformazio-ne del carattere secondo le regole del riflessore; un ciclo for in cui vienerealizzata la cifratura da ciascuno scambiatore utilizzato modificando il ri-sultato parziale fin qui ottenuto applicando il metodo backwardEncoding(dall’ultimo verso il primo); un ultimo passaggio attraverso il pannello aprese multiple per la trasformazione finale. Al termine della cifratura vie-ne richiamato il metodo goNext per l’avanzamento del primo scambiatoreed infine restituito il risultato.

• decodeChar: richiama il metodo encodeChar dopo aver modificato il testoda decodificare in minuscolo in maniera che esso possa essere elaborato.Tale facilità di utilizzo è dovuta, come dovrebbe essere noto, al riflessoree pertanto il metodo in analisi si limita a modificare leggermente i datipassati a!nché essi vengano elaborati. Si noti che sia il metodo encode-Char che il metodo decodeChar elaborano solo caratteri alfabetici, ognialtro carattere introdotto non viene mai elaborato e non comporta e"ettoalcuno sulla cifratrice.

I metodi non descritti, come già avvenuto in questa documentazione, eseguonodelle operazioni tanto elementari da non meritare delucidazione alcuna.

3.2.7 Classe EnigmaSimulator

La classe EnigmaSimulator contiene le istruzioni per la realizzazione della GUIsimulante Enigma. Buona parte del codice è stata autogenerata da NetBeans6.5 ma i metodi che non hanno nulla a che fare con l’estetica, e pertanto chespecificano il comportamento dei singoli componenti inseriti e la gestione dellacifratura/decifratura, sono stati realizzati dal programmatore.

Page 18: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

3 Enigma: versione informatica della macchina. 18

Gli oggetti grafici principali sono:

• 3 Caselle Combinate: contengono gli scambiatori da utilizzare durante lacifratura nell’ordine delle caselle stesse.

• 3 Spinner (istanziati da sorgente): contengono la disposizione attuale degliscambiatori di Enigma (l’unità cifratrice).

• 1 Tabella: rappresenta il pannello a prese multiple. Nella prima colonnale lettere di partenza, nella seconda quelle di arrivo.

• 1 Pulsante di conferma: richiama il metodo per verificare che le lettereinserite nella seconda colonna della tabella del pannello rappresentino unasequenza valida per il pannello a prese multiple e, in caso a"ermativo,modifica con le disposizioni inserite il pannello a prese multiple di Enigma.

• 2 Aree di Testo: uno contiene il testo di partenza (cifrato o da decifrare)e l’altro contiene il testo di arrivo (decifrato o da cifrare).

• 1 Gruppo di Radio-button: specificano se si intende cifrare o decifrare.Questa specificazione è necessaria in quanto, come già ricordato in prece-denza, esiste una convenzione precisa per i testi cifrati e una atrettantoprecisa per i testi chiari.

• 3 Pulsanti: per le operazioni di cifratura:

– Normalizza: richiama il metodo che elimina tutti i caratteri che nonverranno elaborati da enigma o modifica i caratteri che devono es-serlo per essere elaborati (ad esempio le lettere accentate vengonoconvertite in lettere non accentate).

– Avvia processo: richiama il metodo che esegue l’operazione specifica-ta nel radio-button confermato.

– Inverti caselle: richiama il metodo che copia il contenuto della caselladi arrivo in quella di partenza per facilitare le operazioni di codifica-decodifica in una sola macchina.

A seguito la specificazione dei metodi necessari alla gestione di eventi e delfunzionamento della cifratrice virtuale:

• SimpleTableModeListner (classe privata): classe necessaria alla gestionedelle modifiche della tabella che rappresenta il pannello a prese multiple. Ilcodice con i controlli specificati esegue, in sostanza, le seguenti operazioni:

– Controlla che la prima colonna, che rappresenta la lettera di partenzadel pannello a prese multiple, non venga mai modificata.

– Controlla cha la seconda colonna, che rappresenta la lettera di arrivodel pannello a prese multiple, vengano inseriti caratteri validi.

• prepare: istanzia tutte le varibili necessarie alla gestione della cifratura emodifica i valori degli oggetti grafici specificati.

• setSpinnerChar: modifica i valori degli spinner a seconda del valore attualedell’o"set di ciascuno scambiatore di Enigma.

Page 19: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

4 La “Bomba” di Turing 19

• setCombos: carica il contenuto delle caselle combinate a seconda del nu-mero di scambiatori presenti nell’oggetto Enigma istanziato e verifica chenon si verifichino ripetizioni tra i valori specificati.

Gli altri metodi presenti vengono richiamati nel momento in cui viene generatol’evento relativo agli oggetti grafici specificati in precedenza. Pertanto la funzio-ne di tali metodi è stata già descritta con la specificazione dei comportamentidegli stessi oggetti grafici.

4 La “Bomba” di Turing

4.1 Sinossi del primo tentativo di crittoanalisi: la “bomba”di Rejewski

Nel momento in cui Enigma venne adottata dall’esercito tedesco come cifra-trice u!ciale delle comunicazioni della Germania, quasi tutti i paesi d’Europaavevano rinunciato ad ogni tentativo di breccia nel crittosistema dei militaritedeschi. Enigma era ritenuta praticamente impenetrabile e non vi era nessunatecnica sviluppata in precedenza che potesse aiutare nella crittoanalisi dei codiciprodotti dalla macchina.

Ciononostante il primo tentativo di attacco ad Enigma si tenne a partire dal1931 al Biuro Szyfròw, l’u!cio di codici e cifre della Polonia. Qui un giovane sta-tistico di nome Marian Rejewski, assoldato dopo che gli alti membri dell’esercitosi erano resi conto che per a"rontare Enigma fosse necessaria una preparazionetecnico-scientifica e non solo linguistica, trovò il primo enorme punto debole diEnigma il quale gli consentì in appena un anno di trovare il modo di individuarel’assetto dell’unità scambiatrice in poche ore.

Come è ben noto la chiave necessaria per impostare correttamente Enigmaera costituita da 3 informazioni: la disposizione degli scambiatori negli allog-giamenti, la posizione degli scambiatori e le lettere da sostituire nel pannelloa prese multiple. Anche se il grado di sicurezza garantito dal gran numero dichiavi disponibili era decisamente alto, i tedeschi per aumentare ulteriormentel’a!dabilità del proprio sistema di codifica decisero di introdurre una nuovavariabile: la chiave di messaggio. La chiave di messaggio corrispondeva in pra-tica alla posizione degli scambiatori usata per cifrare il contenuto dell’interomessaggio. L’assetto inserito nel cifrario era utilizzato solo ed esclusivamenteper cifrare la chiave di messaggio che veniva inviata 2 volte per evitare erroridurante la trasmissione. Un esempio di modus operandi poteva essere dunqueil seguente.

• L’operatore di Enigma X configurava la propria macchina inserendo i da-ti descritti nel proprio cifrario, ipotizziamo con un posizionamento degliscambiatori di GTQ. Questo dato verrà d’ora in avanti chiamato chiavegiornaliera o quotidiana.

• X sceglieva la chiave che avrebbe usato per il proprio messaggio, poniamoUJL. Questo dato è la chiave di messaggio.

• Con la propria Enigma configurata secondo la chiave quotidiana, X cifravala stringa UJLUJL, ottenendo, per esempio KIVBLE.

Page 20: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

4 La “Bomba” di Turing 20

• X riconfigurava Enigma inserendo come assetto degli scambiatori UJLanziché GTQ e cifrava il messaggio.

• L’insieme di KIVBLE ed il messaggio cifrato veniva infine consegnatoal marconista, il quale lo inviava all’operatore Enigma Y mediante codicemorse.

L’operatore Enigma Y che avesse voluto leggere il messaggio inviato da Xeseguiva quindi le seguenti operazioni:

• Y, con la propria macchina configurata secondo le indicazioni del cifrario,riceveva il messaggio dal marconista.

• Prelevava le prime sei lettere, nel nostro esempio KIVBLE, e le decifra-va con la propria macchina configurata con la chiave giornaliera GTQottenendo la stringa UJLUJL.

• Saputo che la chiave di messaggio per quel particolare testo sarebbe stataUJL, Y riposizionava gli scambiatori Enigma secondo l’ordine UJL edecifrava il resto del messaggio ricevuto.

Il vantaggio di questo sistema di invio delle informazioni è evidente: la partedi messaggio più a rischio perché cifrata secondo le informazioni del cifrario eratalmente ridotta che ogni tipo di strategia di analisi sarebbe stata inutile. Comeè noto, per eseguire anche solo l’analisi delle frequenze è necessario disporre diun testo ragguardevole per riuscire ad ottenere dei risultati verosimili. Tuttaviaavendo scelto di cifrare per due volte di seguito lo stesso messaggio, i tedeschiavevano dato la possibilità al crittoanalista polacco Rejewski di far breccia neicodici generati da Enigma.

Il suo metodo crittoanalitico si pasava essenzialmente su di un unica con-siderazione: esisteva un legame molto forte tra la prima e la quarta lettera diogni messaggio, così come tra la seconda e la quinta, così come tra la terza ela sesta, in quanto lettere uguali, e questo legame era determinato dalla chiavequotidiana contenuta nel cifrario di Enigma.

Questa considerazione si rivelò praticolarmente proficua per Rejewski per-ché si accorse ben presto che il legame esistente tra queste coppie di lettereera caratteristico della chiave quotidiana usata per quel particolare giorno esoprattutto era indipendente dal pannello a prese multiple. Eliminato il pan-nello era dunque su!ciente verificare le caratteristiche dei legami esistenti trale coppie di lettere per individuare in poco tempo la chiave giornaliera per gliassetti degli scambiatori, operazione che era e"ettuata meccanicamente tramitel’uso di un dispositivo elettromeccanico chiamato “bomba”. La “bomba” rap-presentava l’evoluzione delle tecniche crittoanalitiche in quanto, esattamentecome Enigma aveva rivoluzionato la crittografia introducendo procedure elet-tromeccaniche per la produzione di messaggi segreti, la bomba aveva introdottoelementi elettromeccanici per far breccia nei codici nemici.

Grazie agli sforzi di Rejewski i polacchi furono in grado di decifrare prati-camente tutte le comunicazioni segrete dei tedeschi dal 1931 fino all’alba delloscoppio della seconda guerra mondiale nel 1938, anno in cui i tedeschi aggior-narono il proprio crittosistema secondo le indicazioni specificate in precedenzanella presente documentazione (5 scambiatori da cui sceglierne 3 + 20 lettere da

Page 21: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

4 La “Bomba” di Turing 21

poter sostituire nel pannello a prese multiple) oltre che riducendo ad una singo-la copia l’invio della chiave di messaggio (nell’esempio sopra descritto, anzichèinviare UJLUJL l’operatore avrebbe inviato solo UJL).

4.2 Bletchley parkDopo il successo dei crittoanalisti polacchi il mito dell’inviolabilità di Enigmaera stato sfatato definitivamente. I successi del Biuro Szyfròw si erano inter-rotti a causa dei nuovi scambiatori e dei nuovi cavetti per il pannello a presemultiple; tuttavia, restava il fatto che Enigma non poteva essere più consideratainattaccabile.

L’esempio dei polacchi fece inoltre capire agli alleati l’importanza di recluta-re crittoanalisti anche tra i matematici. In Gran Bretagna, la Stanza 40, ovverol’u!cio di codici e cifre di Sua Maestà, era sempre stata appannaggio di linguistied umanisti, ma da quel momento ci fu una sforzo concentrato per riequilibrarela sua composizione, accogliendo matematici e scienziati. Il reclutamento avven-ne in larga misura tramite amicizie: erano i membri dello sta" che si mettevanoin contatto coi vecchi compagni di corso di Oxford e Cambridge, e ne sondavanol’interesse per la crittografia professionale. C’era anche una rete che reclutavadonne con i diplomi di college prestigiosi, come il Newnham College e il GirtonCollege di Cambridge.

Le nuove reclute non venivano chiamate nella Stanza 40 di Londra, ma aBletchley Park, nel Buckinghamshire, sede della Government Code and CypherSchool (GC&CS), una nuova organizzazione cui la vecchia Stanza 40 passavale consegne. Bletchley Park poteva ospitare un personale molto più numeroso,fatto importante perché ci si aspettava che il conflitto avrebbe prodotto una va-langa di intercettazioni crittate. Durante la prima guerra mondiale la Germaniaaveva trasmesso due milioni di parole al mese, ma si prevedeva che i progressitecnologici nel campo delle radiotrasmissioni avrebbero fatto raggiungere i duemilioni di parole al giorno.

Nell’autunno 1939, scienziati e matematici presero confidenza col complessofunzionamento di Enigma, e in tempo relativamente breve riuscirono a padro-neggiare il metodo di analisi elaborato dai polacchi. Le risorse e il personaledell’organizzazione inglese erano superiori a quelli del Biuro Szyfròw, perciò es-sa fu in grado di superare il problema dela maggior numero di scambiatori, ein generale, della maggiore resistenza della nuova versione di Enigma. Ogniventiquattr’ore gli operatori tedeschi passavano simultaneamente ad una nuo-va chiave giornaliera, e i crittoanalisti britannici ingaggiavano una lotta controil tempo. Se riuscivano a scoprire l’assetto base di Enigma, potevano decifra-re tutte le comunicazioni radio tedesche fino all’entrata in servizio della nuovachiave, raccogliendo dati di enorme importanza militare.

Assimilata la strategia dei polacchi, i crittoanalisti di Bletchley cominciaronoa trovare nuove scorciatoie per scoprire le chiavi di Enigma. Per esempio, ap-profittarono del fatto che gli operatori tedeschi a volte sceglievano chiavi ovvie.In teoria, essi avrebbero dovuto formare la chiave di messaggio con tre lettere ri-gorosamente casuali. Di fatto, anche per lo stress della situazione bellica, invecedi spremere le meningi e creare una sequenza casuale molti operatori premevanotre lettere consecutive sulla tastiera, generando stringhe come QWE o BNM.Queste banali, prevedibili chiavi di messaggio, vennero soprannominate cillies.Un’altro tipo di cilly implicava l’uso ripetuto della stessa chiave di messaggio -

Page 22: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

4 La “Bomba” di Turing 22

magari le iniziali della fidanzata dell’operatore; sembra che da una circostanzadel genere, connessa con la chiave CIL, sia derivato il soprannome che designòl’intera categoria. Prima di lanciare contro Enigma un attacco in grande stile,diventò abitudine dei crittoanalisti inglesi provare cillies, e a volte il trucco, conl’aggiunta di un po’ di intuito, pagava.

I cillies non erano punti deboli di Enigma, ma del modo in cui veniva usata.Anche errori umani commessi a un livello gerarchico più elevato compromiserola sicurezza del sistema. I responsabili della compilazione dei cifrari dovevanodecidere quali scambiatori, e in quale posizione, sarebbero stati impiegati digiorno in giorno. Essi tentarono di assicurare l’imprevedibilità delle posizionistabilendo che nessuno scambiatore potesse occuparne una per due giorni con-secutivi. Così, indicando gli scambiatori con numero da 0 a 4, il primo giornopoteva essere prescritta la disposizione 0-2-3, il secondo la disposizione 1-0-4,ma non la 1-0-3, perché il terzo scambiatore sarebbe stato il medesimo e nellastessa posizione. A prima vista questa regola parrebbe sensata, perché generadisposizioni sempre diverse; ma introducendo un’importante limitazione ad ognidisposizione tranne la prima, facilita molto il lavoro dei crittoanalisti. Dal puntodi vista matematico, in questo modo i compilatori dei cifrari ridussero di circail cinquanta per cento il numero di possibili disposizioni degli scambiatori.

I crittoanalisti di Bletchley compresero quello che stava accadendo, e neapprofittarono. Una volta individuata la disposizione di un giorno, era pos-sibile ridurre di circa la metà le possibili disposizioni del giorno successivo.Naturalmente, anche il carico di lavoro in questo modo risultava dimezzato.

Una regola analoga a quella degli scambiatori stabiliva che dall’assetto delpannello a prese multiple andassero esclusi i collegamenti con lettere contigue.Così, S si poteva scambiare con qualsiasi lettera tranne R e T. L’idea era chescambi così ovvi andassero evitati, ma ancora una volta ciò riduceva gravementeil numero di chiavi possibili.

La ricerca di nuove scorciatoie era necessaria perché la macchina Enigmacontinuò ad evolvere per tutta la durata del conflitto. I crittoanalisti furonocostretti a ra!nare, modificare e perfino riprogettare le bombe derivate da Re-jewski, e ad escogitare strategie originali. Una delle ragioni del loro successo fu lostrano miscuglio di matematici, scienziati, liguisti, cultori di studi classici, mae-stri di scacchi e appassionati di cruciverba che popolavano le «capanne», comevenivano chiamati i locali in cui risiedevano i vari crittoanalisti e dove svolgeva-no il loro lavoro. Un problema ostico passava da un decrittatore all’altro finchécadeva sotto gli occhi di una persona con la mentalità adatta a risolverlo, oalmeno a semplificarlo prima di passarlo ad un collega. Per Bletchley passaronomolti grandi crittoanalisti, che fecero scoperte importanti; una descrizione par-ticolareggiata di tutti i loro contributi richiederebbe diversi volumi. Tuttavia,se c’è uno studioso che merita un posto a parte, questi è Alan Turing, colui cheè considerato il padre dell’informatica, che individuò il principale punto deboledi Enigma e lo sfruttò fino in fondo. Grazie a Turing fu possibile continuare atradurre messaggi Enigma anche nelle circostanze più di!cili.

4.3 La “bomba” di TuringIl sistema crittoanalitico di Rejewski si basava sul fatto che gli operatori Enig-ma inviavano 2 volte la chiave di messaggio, crittata con la chiave giornaliera,prima di inviare il messaggio vero e proprio, crittato con la chiave di messaggio.

Page 23: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

4 La “Bomba” di Turing 23

Una volta individuata la chiave giornaliera grazie ai collegamenti tra le coppiedi lettere e l’ausilio di tutte le “bombe” capaci di verificare tutte le possibili di-sposizioni degli scambiatori, per i crittoanalisti la maggior parte del lavoro erafatto e il resto della giornata poteva essere trascorso decrittando tutti i messaggiintercettati. Tuttavia se fosse mancato il duplice invio della chiave, così comesarebbe accaduto nel giro di pochi anni, tutto il lavoro fatto dai polacchi sarebbestato inutile. Ecco perché il lavoro di Alan Turing venne finalizzato all’indivi-duazione di una falla sistemica, indipendente dal modo in cui Enigma venisseutilizzata dagli operatori e che coinvolgesse, al più, la conoscenza di parte deltesto chiaro.

Col passare del tempo, Turing constatò che a Bletchley si stava accumu-lando una patrimonio di messaggi decifrati, e notò che molti di essi rivelavanouna struttura piuttosto rigida. Pensò quindi che il contenuto dei crittogram-mi nuovi si potesse spesso inferire, almeno in parte, in base ai crittogrammirisolti, prestando attenzione a dati come la provenienza del messaggio e l’ora ditrasmissione. Per esempio, l’esperienza insegnava che tutti i giorni, poco dopole sei del mattino, i tedeschi trasmettevano brevi bollettini meteorologici cifra-ti. Perciò, un crittogramma captato alle 6.05 antimeridiane quasi certamenteconteneva la parola Wetter («tempo atmosferico» in tedesco). Il rigido modusoperandi delle organizzazioni militari implicava che simili comunicazioni fosserostereotipate anche nello stile. Questo aumentava la probabilità che il critto-gramma contenesse parole come wetter in posizioni fisse. L’esperienza potevaquindi fornire indicazioni ancora più precise, per esempio che le prime sei letteredella seconda riga di certi tipi di crittogrammi corrispodevano quasi sempre allaparola wetter.

Quando un frammento di testo chiaro poteva essere interpretato in base aconsiderazioni non crittoanalitiche, si parlava di crib («culla», o «copiatura»,nel senso della ben nota scorrettezza scolastica).

Turing era sicuro di poter approfittare dei cribs per creare una procedimentodi soluzione dei crittogrammi Enigma diverso da quello di Rejewski. Disponen-do del crittogramma e sapendo che una sua parte, per esempio ETJWPX,corrispondeva a wetter, la sfida sarebbe consistita nell’individuare l’assetto diEnigma che trasformava la seconda sequenza di lettere nella prima. Il metodopiù diretto, ma poco pratico, in cui un crittoanalista poteva a"rontare il proble-ma era prendere una replica di Enigma, digitare wetter e vedere se il risultatoera ETJWPX; se non lo era, cambiare a poco a poco, una per volta e con me-todo, le regolazioni (cominciando dai cavetti, proseguendo con gli scambiatori,e così via) fino ad ottenere la sequenza cercata.

Il guaio era ciò che in crittoanalisi rende spesso inutile il metodo per provadi errore o a forza bruta (brute force): gli assetti possibili erano 159 miliardidi miliardi, e la guerra sarebbe finita molto prima che il crittoanalista avessee"ettuato un’insignificante porzione dei controlli necessari.

Per semplificare il problema, Turing imitò la strategia di Rejewski di scom-porre l’assetto di Enigma in parti che comportassero un numero più accettabiledi possibilità. In particolare, voleva separare il problema della disposizione degliscambiatori (quali scambiatori usare, e in quali alloggiamenti) e del loro orien-tamento, dal problema dei collegamenti del pannello a prese multiple. Se peresempio avesse potuto ricavare da un crib un indizio che non avesse nulla ache fare col pannello, sarebbe forse riuscito a trovare il modo di controllare i1.054.560 assetti (60 disposizioni x 17.576 orientamenti) degli scambiatori. Ri-

Page 24: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

4 La “Bomba” di Turing 24

solto questo problema, quello del pannello a prese multiple si sarebbe potutoa"rontare per via deduttiva.

Alla fine, la sua attenzione si concentrò su un particolare crib, contenentedelle concatenazioni. Tali concatenazioni riguardavano le lettere del testo chiaroe del testo crittato nell’ambito di un crib. Per esempio, il crib mostrato in figura7 contiene una concatenazione:

Fig. 7: Uno dei cribs di Turing, con la concatenazione messa in evidenza

Non bisogna dimenticare che i crib sono solo ipotesi. Tuttavia, se questaparticolare ipotesi è corretta, possiamo collegare le lettere w#E, e#T, t#W,in quanto appartenenti alla concatenazione. Anche se non sappiamo nulla degliassetti della macchina Enigma, possiamo chiamare «a» il primo assetto, qua-lunque esso sia. Di questo assetto sappiamo solo che porta a cifrare w come E.Dopo di che, il primo scambiatore avanza di una lettera, facendo assumere adEnigma l’assetto «a+1», e la lettera e è cifrata come T. Il primo scambiatoreavanza di un altro posto e cifra una lettera che non fa parte della concatena-zione, ragion per cui ignoriamo questa cifratura. Avanza ancora di uno spazio,e di nuovo ci imbattiamo in una lettera inclusa nella concatenazione: sappiamoche nell’assetto «a+3», t è cifrata come W. Riassumendo, siamo sicuri che:

Nell’assetto«a» Enigma critta w come E

Nell’assetto«a+1» Enigma critta e come T

Nell’assetto«a+3» Enigma critta t come W

Per ora la concatenazione sembra solo una curiosità, ma Turing sviluppò tutte leimplicazioni dei rapporti all’interno del crib, e capì che rappresentavano proprioil tipo di drastica scorciatoia che gli occorreva per far breccia in Enigma. Invecedi lavorare con una sola macchina per verificare ogni assetto egli cominciò adusarne tre: una per la cifratura di w come E, un’altra per la cifratura di e comeT, la terza per la cifratura di t come W. Le tre macchine avevano assetti identici,se si eccettua il fatto che la seconda avrebbe avuto gli scambiatori orientati unposto avanti rispetto alla prima (a+1), e la terza avrebbe avuto gli scambiatoriorientati di tre posti avanti rispetto alla prima (a+3). Stabilito ciò, Turingsi immaginò un trafelato crittoanalista che senza sosta inseriva e disinserivacavetti, mutava posto agli scambiatori e ne modificava l’orientamento, finchéogni macchina avesse cifrato come suggerito dal crib.

Fin qui, Turing non sembra aver concluso molto. Il povero crittoanalistaha ancora 159 miliardi di miliardi di assetti da controllare, e per di più devefarlo non su una, ma su tre macchine Enigma contemporaneamente. Ma il

Page 25: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

4 La “Bomba” di Turing 25

passo successivo del ragionamento di Turing trasforma la natura della sfida, ela semplifica radicalmente.

Egli immaginò di collegare le tre cifratrici con cavi elettrici posti tra l’inputdi una macchina e l’output della successiva, come mostrato in figura 8. In e"etti,la concatenazione ciclica del crib è riprodotta dal circuito elettrico. Il circuito sichiuderebbe, permettendo alla corrente di percorrerlo, solo quando tutte e trele macchine avessero raggiunto un assetto che realizzasse la concatenazione. Aquesto punto, se una lampadina facesse parte del circuito essa si accenderebbe,segnalando che la ricerca ha avuto buon esito. Per ora, ogni macchina dovevaancora controllare 159 miliardi di miliardi di combinazioni - il procedimento erastato automatizzato, non semplificato. Ma i passi compiuti fin qui erano solopreparatori in vista del vero colpo da maestro, che d’un tratto avrebbe reso ilcontrollo degli assetti cento milioni di milioni di volte più facile.

Turing aveva costruito il circuito in modo da annullare l’e"etto del pannello aprese multiple, e poter ignorare i miliardi di assetti possibili di questo elemento.Osservando la figura 8 si constata che nella prima macchina Enigma la correnteentra negli scambiatori ed emerge in corrispondenza di una lettera sconosciuta,che chiameremo L1. Poi la corrente attraversa il pannello e trasforma L1 inE. Questa E è collegata tramite un filo elettrico alla e della seconda macchinaEnigma, e al passaggio della corrente attraverso il scondo pannello si trasformadi nuovo in L1. In altre parole, i due pannelli a prese multiple si annullano avicenda. In modo analogo, la corrente in uscita dagli scambiatori della secondamacchina Enigma entra negli scambiatori in corrispondenza di L2, prima diessere trasformata in T. Questa T è collegata tramite un filo elettrico alla tdella terza Enigma, e col passaggio della corrente attraverso il terzo pannello sitrasforma di nuovo in L2. In breve, i pannelli si annullano a vicenda in tutto ilcircuito; perciò, si poteva prescindere completamente della loro esistenza.

Turing aveva solo bisogno di collegare l’output del primo gruppo di scam-biatori in corrispondenza di L1, all’input del secondo gruppo di scambiatori,sempre in corrispondenza di L1, e così via. Purtroppo egli non conosceva ilvalore di L1, perciò era costretto a collegare le 26 uscite del primo gruppo discambiatori ai 26 ingressi corrispondenti del secondo gruppo di scambiatori, ecosì via. In questo modo si formavano 26 circuiti, ciascuno dei quali dotato diuna lampadina a segnalarne la chiusura. I tre gruppi di scambiatori potevanocosì limitarsi a controllare i 17.576 orientamenti loro concessi, col secondo grup-po di scambiatori sempre un passo avanti del primo, e il terzo due passi avantiil secondo. Alla fine, scoperto il giusto orientamento degli scambiatori, uno deicircuiti si chiudeva causando l’accensione di una lampadina. Se gli scambiatoriavessero mutato orientamento ogni secondo, il controllo di tutti gli orientamentiavrebbe richiesto solo 5 ore.

Restavano solo due di!coltà. Innanzitutto era possibile che le tre macchinefunzionassero con una disposizione errata degli scambiatori.

Poiché le cifratrici contenevano tre scambiatori su cinque, disposti in qualun-que ordine, le disposizioni possibili erano sessanta. Quindi, controllati i 17.576orientamenti, se la lampada non si fosse illuminata sarebbe stato necessariocambiare disposizione, e ripetere il procedimento. Un’alternativa era munirsi diun gran numero di repliche di Enigma (sessanta gruppi di tre) e farle lavorarein parallelo.

La seconda di!coltà riguardava la determinazione del’assetto del pannelloa prese multiple, una volta risolti i problemi degli scambiatori. In questo caso,

Page 26: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

4 La “Bomba” di Turing 26

Fig. 8: La concatenazione del crib può essere riprodotta sotto forma di concate-nazione elettrica. Tre macchine Enigma sono regolate in modo identico,se si eccettua il fatto che la seconda ha gli scambiatori orientati un potoavanti rispetto alla prima (a+1), e la terza ha gli scambiatori orientati ditre posti avanti rispetto alla prima (a+3). L’output di ciascuna Enigmaè poi collegato all’input della successiva. Durante il funzionamento, i tregruppi di scambiatori avanzano all’unisono finché il circuito si chiude ela lampadina si accende. L’assetto raggiunto in quel momento è quellocercato. Nel diagramma qui sopra il circuito è completo, cioè corrispondeal giusto assetto degli scambiatori.

Page 27: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

4 La “Bomba” di Turing 27

la soluzione era relativamente semplice. Usando una macchina Enigma con lagiusta disposizione e il giusto orientamento degli scambiatori, il crittoanalistaavrebbe digitato il testo cifrato e osservato il testo chiaro risultante. Una stringacome tewwer avrebbe suggerito, per esempio, di collegare con un cavetto leprese t e w del pannello. L’immissione di altri frammenti di crittogrammaavrebbe chiarito la posizione degli altri cavetti.

L’uso simultaneo di cribs, concatenazioni e cifratrici collegate elettricamenteportò a un risultato quasi miracoloso, che solo Turing, con la sua cultura mate-matica e la propensione a ragionare in termini di congegni immaginari, avrebbepotuto conseguire. La macchina astratta universale di Turing era stata da luiconcepita per far luce su sottili questioni teoriche circa l’indecidibilità mate-matica; ma interessi puramente accademici l’avevano abituato ad uno stile diragionamento assai propizio all’ideazione di un’altra macchina: un apparecchia-tura per la decifrazione automatica capace di influenzare eventi tragicamentereali.

Le idee di Turing si concretizzarono nel 1940, quando egli terminò il pro-getto di quella che sarebbe passata alla storia come la “bomba” di Turing, cosìchiamata per il ticchettio prodotto dagli scambiatori che avanzavano meccani-camente oltre che per fare onore all’ideatore dell’omonimo dispositivo creato daRejewski.

Fig. 9: La “bomba” di Turing. Ricostruzione al “Bletchley Park Museum”

Il primo prototipo di bomba, battezzata «Victory», arrivò a Bletchley Parkil 14 marzo 1940. Fu subito messa in funzione, ma i risultati iniziali non fu-rono esattamente entusiasmanti. Il congegno, molto più lento di quanto ci siaspettasse, impiegò una settimana per individuare una sola chiave. Fu fatto unosforzo collettivo per migliorare la sua e!cienza, e un progetto modificato venneconsegnato poche settimane più tardi. Ma per disporre della nuova versione dibomba ci vollero 4 mesi. Nel frattempo i crittoanalisti dovettero a"rontare lacalamità da loro temuta. Il 10 maggio 1940 i tedeschi cambiarono la proceduradi comunicazione delle chiavi. La chiave di messaggio non venne più ripetuta ele decifrazioni di crittogrammi Enigma crollarono di colpo. Il blackout durò fino

Page 28: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

5 La “Bomba” di Turing: versione Informatica 28

all’8 agosto, quando arrivò la nuova bomba. Chiamata «Agnus Dei», o «Agnes»per brevità, essa corrispondeva al dispositivo sognato da Turing.

Di li a otto mesi le bombe in funzione furono quindici: divoravano cribs,controllavano assetti, rivelavano chiavi, ticchettavano come un esercito di nonneintente a sferruzzare. Se tutto andava bene, una bomba era in grado di indi-viduare una chiave Enigma in una sessantina di minuti al massimo. Una voltastabiliti i collegamenti sul pannello e la disposizione degli scambiatori (cioè lachiave di messaggio) per una intercettazione, dedurre la chiave giornaliera di-ventava un compito facile. Allora si potevano decifrare tutti i messaggi speditiquello stesso giorno.

Anche se le bombe rappresentavano un progresso crittoanalitico di primagrandezza, la decifrazione non era diventata una mera routine. C’erano moltiostacoli da superare prima che uno di quei congegni potesse cercare una chia-ve. Per esempio, per funzionare la bomba aveva bisogno di crib. I solutori dicodici con più esperienza lo indicavano agli operatori, ma niente garantiva cheil suggerimento fosse giusto. E anche se era giusto, poteva non riferirsi al pun-to giusto del crittogramma; in altre parole, la parola o la frase che secondo ilcrittoanalista si trovava nel messaggio in codice poteva davvero farne parte, main una posizione diversa da quella da lui ipotizzata. In questo caso, però, unsemplice trucco permetteva di controllare se un crib si trovasse nella posizionecorretta. Nel crib seguente, il crittoanalista è sicuro che il testo chiaro facciaparte del crittogramma, ma non è certo di dove collocarlo alle lettere giuste.

Una delle caratteristiche di Enigma, dovuta alla presenza del riflessore, eral’impossibilità di cifrare una lettera con se stessa. Così, a può essere cifratain qualunque modo fuorché come A. Ne consegue che il crib dell’esempio de-v’essere male allineato: infatti la prima e di wetter coincide con una E delcrittogramma. Per trovare l’allineamento giusto, conviene spostare il testo chia-ro rispetto al crittogramma finché nessuna lettera è al di sopra di una letterauguale. Muovendo il testo chiaro di un posto verso sinistra, l’allineamento nonè ancora soddisfacente, questa volta perché la prima s di sechs è sopra un’altraS. Invece, muovendo il testo chiaro di un posto verso destra, non si osserva-no sovrapposizioni inammissibili. Questo crib andrebbe quindi utilizzato pere"ettuare la ricerca automatica della chiave giornaliera.

5 La “Bomba” di Turing: versione Informatica

5.1 Considerazioni sulla simulazioneLa simulazione della “Bomba” di Turing necessita di alcune considerazioni in-troduttive. Se in e"etti ci si limitasse all’imitazione pura e semplice dell’esattocomportamento della macchina, allora il lavoro eseguito per la simulazione diEnigma sarebbe più che su!ciente per realizzare la versione informatica. Tuttala fase preliminare all’impostazione dell’assetto delle varie Enigma coinvolte nel-la Bomba consisterebbe in poche fasi, da eseguire tutte manualmente. La prima

Page 29: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

5 La “Bomba” di Turing: versione Informatica 29

sarebbe l’individuazione della posizione da far assumere al crib all’interno del te-sto cifrato manualmente. La seconda sarebbe la configurazione di una adeguatonumero di Enigma secondo il numero di concatenazioni coinvolte nel crib, sem-plicemente attuabile mediante l’ausilio del metodo setO!set. La terza ultimafase consisterebbe infine nella verifica dell’assetto che realizzi la concatenazioneper ciascuna delle 60 possibili disposizioni degli scambiatori negli alloggiamenti.

Tuttavia si ritiene che la previsione di funzioni aggiuntive come l’indivi-duazione automatica delle concatenazioni del crib, possa essere un aspetto nontrascurabile. Nonostante il lavoro sia facilitato rispetto a come erano costretti alavorare gli operatori di Bletchley Park, tale funzione non compromette in ma-niera eccessiva la fedeltà al funzionamento del simulatore anche perché, in findai conti, l’individuazione del posto ottimale in cui inserire il crib e il corrispet-tivo testo cifrato deve continuare ad essere fatto manualmente. Anche potendoprevedere un programma in grado di individuare tutte le posizioni valide delcrib all’interno del testo cifrato, sarebbe sempre l’operatore umano a fornire al-la macchina le informazioni aggiuntive per adottarne una in particolare (sempreprendendo ad esempio il crib wetter descritto in precedenza, un programma po-trebbe individuare una sua possibile collocazione alla fine del crittogramma; maciò è ovviamente una semplice coincidenza in quanto i crittoanalsti saprebberobene che la parola deve comparire in certe posizioni ben definite).

Pertanto si è deciso di prevedere classi e funzioni con le seguenti funzioni:

• Individuazione dell’allineamento ideale di un crib all’interno di un fram-mento di crittogramma.

• Istanziazione automatica delle Enigma necessarie all’individuazione dellachiave di messaggio.

• Esecuzione della ricerca in parallelo di tutti gli assetti di scambiatoririsolventi il problema.

5.2 Specifiche di oggetti e metodi5.2.1 Classe EnigmaForAnalysis

Si tratta di una sottoclasse della classe Enigma specificata in precedenza. Ilmotivo dell’estensione e dell’utilizzo dell’ereditarietà è presto detto: è necessarioche la versione di Enigma per la crittoanalisi dei crittogrammi preveda delleparticolari funzioni aggiuntive ed in particolare i metodi getCurrentConfig eaddO!set.

getCurrentConfig è un metodo che restituisce la configurazione attuale degliscambiatori di Enigma; questo metodo è necessario per facilitare il compitodegli altri programmi che si poggiano su oggetti del tipo EnigmaForAnalysis,restituendo l’informazione sull’assetto attuale in una forma più gestibile comela stringa piuttosto che l’array di char.

addO!set è un metodo che fa avanzare Enigma di un valore i passato co-me argomento; questo metodo è necessario per impostare la distanza che deveesistere tra gli assetti delle varie Enigma che compongono la bomba e deve ov-viamente essere fatta mediante il metodo goNext ereditato dalla superclasse perconsentire che si abbia l’avanzamento opportuno di tutti gli scambiatori nel casosia raggiunto il limite dell’assetto (passaggio da Z ad A in uno degli scambiatori).

Page 30: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

5 La “Bomba” di Turing: versione Informatica 30

5.2.2 Classe BadCribException

Si tratta di una sottoclasse della classe Exception prevista dall’SDK Java checonsente di gestire in maniera specifica il caso in cui sia stato passata, alla classeche si occupa dell’individuazione della posizione del crib nel crittogramma, unastringa che non produce concatenazioni.

Vi è solo un costruttore che carica la variabile private msg con un valorepassato come argomento e l’override del metodo toString.

5.2.3 Classe CribNode

Si tratta della classe chiave per l’individuazione automatica delle concatenazioni.In sostanza individua l’esistenza di un ciclo e memorizza in una struttura datiad albero tutte le possibili concatenazioni che si possono realizzare con il crib eil crittogramma passati come argomento. Esso si compone, per quanto riguardai campi privati di:

• chiaro: rappresenta qual’è il carattere in chiaro di partenza

• cifra: rappresenta come il carattere in chiaro venga cifrato nel nodo cor-rente.

• end: si tratta di una variabile di controllo; vale true se uno dei nodi figlidel nodo corrente è raggiunto alla fine della ricerca ovvero se è riuscito achiudere la concatenazione tornando al carattere di partenza; vale false sul’evetualità sopra descritta non si verifica.

• o!set: rappresenta la distanza dell’allinemento in esame da quello dipartenza.

• sons: si tratta della struttura dati a lista che contiene tutte le possibiliconcatenazioni che si possono realizzare a partire dall’allinemento corrente(per esempio se si considera il crib e il testo cifrato wetter e ETJWPX,risulta chiaro che se al primo ciclo la w viene crittata come E, al passaggiosuccessivo è necessario verificare se la prima e di wetter, in posizione2 nella parola, o la seconda, in posizione 5 nella parola, producano unaconcatenazione valida; è evidente che in questo caso solo la prima produrràuna concatenazione).

• initChar: si tratta del carattere da cui si parte per generare le concate-nazioni. È necessario per verificare, ad ogni generazione di figli, se si siaconclusa la ricerca di una concatenazione.

Le specifiche dei metodi sono le seguenti:

• CribNode (costruttore): ricevuti in ingresso un array di char che rappre-senta il crib ed un array di char che rappresenta il crib cifrato inizializzacifra e chiaro secondo il valore di o" passato come argomento e verifica,per ogni occorrenza di cifra adattato in minuscolo, se tale valore compaianel crib passato come argomento. Se tale evenienza si verifica aggiungealla lista dei figli tale occorrenza. Al termine del popolamento della listadei figli inizializza il proprio campo di controllo end a seconda del fattoche uno dei propri figli abbia o meno completato la concatenazione con ilcrib passato e il corrispettivo ipotetico testo cifrato.

Page 31: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

5 La “Bomba” di Turing: versione Informatica 31

• CribNode (costruttore): copia i valori del CribNode da copiare in quellocorrente rendendo opinabile la copiatura della lista dei figli.

Come già avvenuto nella presente documentazione si rimandano i restanti me-todi alla lettura per la loro facilità di comprensione.

5.2.4 Classe CribNodeList

È la classe utilizzata dalla classe precedente per implementare la lista dei figli.Prevede al suo interno una classe privata CribNodeListNode per memorizzareogni singolo nodo in un oggetto separato che punta all’elemento successivo dellalista.

Le specifiche dei metodi sono le seguenti:

• CribNodeList (costruttore): privo di argomenti, inizializza a null il valoredel nodo radice.

• CribNodeList (costruttore): avente come argomento un’altra CribNode-List, copia l’intero contenuto della lista passata nella lista corrente.

• addNode: aggiunge un nodo in fondo alla lista corrente.

• isClosedLoop: verifica se la lista corrente contiene dei nodi che chiudono laconcatenazione, ovvero se esiste almeno un CribNode nella lista correnteche restituisca true quando gli viene applicato il metodo getEnd.

• getPossibleWays(statico): conta, passato come argomento un CribNode,quante sono le concatenazioni chiuse che produce tale nodo. Per ognifiglio del nodo applica ad esso getPossibleWays, sommando tutti i risultatipossibili. Se un nodo terminale (privo di figli) ha chiuso il cilo vieneritornato un 1, in caso contrario uno 0.

• toCribNodeArray: converte la lista corrente in un array di CribNode.

• getValidLoop(statico): passato come argomento un CribNode, restituisceuna lista contenente la prima concatenazione di nodi producente un ci-clo valido (quindi chiuso) a partire dal nodo passato come argomento edanalizzando le caratteristiche dei figli.

Come già avvenuto nella presente documentazione si rimandano i restanti me-todi alla lettura per la loro facilità di comprensione.

5.2.5 Classe CribTree

Rappresenta l’oggetto unico che raccoglie un’unico CribNode radice da cui di-partono tutti i figli in cui si verifica la concatenazione, costruendo una vera epropria struttura ad albero n-ario variabile.

I metodi implementati consistono semplicemente nell’applicazione dei metodistatici della classe CribNodeList al nodo radice.

Page 32: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

5 La “Bomba” di Turing: versione Informatica 32

5.2.6 Classe Bomb

È una classe che rappresenta un unica bomba di Turing che verifica gli assettidegli scambiatori realizzanti una concatenazione per una singola disposizione discambiatori.

Si compone di un certo numero di campi privati:

• crib: è il crib che si presume comparire nel testo cifrato codedCrib.

• codedCrib: è il testo cifrato in si presume si trovi la variabile crib.

• enigmas: è i vettore di EnigmaForAnalysis che saranno configurate se-condo le concatenazioni possibili di crib in codedCrib individuate dallapresente classe.

• vett: è il vettore di CribNode che contiene le configurazioni necessarie perinizializzare l’array enigmas e per verificare di aver individuato l’assettocorretto.

• o!set: rappresenta la distanza del crib passato come argomento dall’iniziodel testo cifrato, da considerare nel momento in cui si produce l’elencodegli assetti risolventi il crittogramma.

• scambUsed: contiene il vettore degli scambiatori utilizzati con corrispet-tivo codice.

• possibleRes: istanza della classe ArrayList prevista nello SDK per imma-gazzinare tutti gli assetti risolventi il crittogramma.

Per quanto riguarda i metodi previsti, ecco le loro specifiche:

• Bomb(costruttore): accetta come argomenti il crib di partenza, il testocifrato in cui si presume essere contenuto il crib, la disposizione degliscambiatori e l’o"set iniziale. Dopo aver inizializzato le variabili neces-sarie, richiama il metodo privato configure, per popolare vett con unaconcatenazione valida (se presente nel codedCrib). In caso vett rimangapari a null (ovvero nel caso il crib nel codedCrib non produca alcuna con-catenazione o nel caso siano state passate stringhe vuote) viene lanciataun’eccezione BadCribException, in caso contrario si procede all’inizializza-zione del vettore enigmas secondo le caratteristiche della concatenazione,memorizzate in vett.

• configure: verifica se il crib corrente possa produrre concatenazioni in co-dedCrib. Nel caso i due vettori siano di lunghezza uguale allora vienerichiamato il metodo normalConfiguration. In caso contrario si tenta-no tutti gli allineamenti possibili di crib in codedCrib validi (che ovveronon contengono lettere alfabetiche uguali in corrispondenza dei medesimiindici) e per ciascuno si verifica la chiusura della concatenazione.

• normalConfiguration: accetta due array (il crib e il testo cifrato corrispon-dente) oltre che un intero, per sapere a che distanza collocare il crib, everifica se uno degli alberi generati a partire da ciascun allineamento pro-duca un ciclo chiuso. In caso a"ermativo carica vett con tale ciclo chiusoaltrimenti lo lascia con valore null.

Page 33: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

5 La “Bomba” di Turing: versione Informatica 33

• find: testa tutte i 17.576 possibili assetti al fine di verificare se uno diessi realizzi la concatenazione che è memorizzata in ciascun nodo presentein vett. Nel caso ne venga trovata una che chiuda il ciclo, il numerodell’assetto corrente viene convertito nell’assetto in lettere dal metodonumberToAlfaConversion e immagazzinato nell’ArrayList possibleRes.

• printSequence: restituisce una stringa in cui sono specificate l’indice dipartenza della concatenazione (ovvero quale lettera in codedCrib rappre-senta l’inizio della concatenazione) e la sequenza di concatenazioni tralettere memorizzate in vett.

• getResults: viene restituito un array di stringhe in cui sono memorizzatitutti gli assetti immagazzinati in possibleRes.

• getArray: restituisce la copia dell’array contenente l’assetto degli scam-biatori analizzato dalla bomba corrente.

• alfaToNumberConversion(statico): converte una stringa di 3 caratteri al-fabetici nell’indice corrispondente all’assetto di Enigma ad essa relativo.È come se venisse fatta una conversione da un numero espresso in base 26(in cui i simboli sono a,b, ..., z) in un numero in base 10.

• numberToAlfaConversion(statico): converte un numero nell’assetto corri-spondente di Enigma ad esso relativo. Funzione inversa del metodo pre-cedente, converte un numero espresso in base 10 in un numero espresso inbase 26 con i simboli specificati in precedenza.

• notEqualsCharArray(statico): restituisce true se i due array passati comeargomento contengono diversi valori alfabetici in corrispondenza dei me-desimi indici, false se c’è almeno un indice in cui i valori alfabetici sonouguali.

5.2.7 Classe BombRunner

Classe wrapper della classe Bomb per rendere possibile l’esecuzione in multith-read del metodo find. Implementa l’interfaccia Runnable per rendere possibilela parallelizzazione mediante oggetti di tipo Thread ed e"ettua l’unboxing deimetodi contenuti nell’oggetto Bomb istanziato al suo interno.

5.2.8 Classe AlanTuringBombs

Rappresenta la realizzazione informatica di «Agnes» ovvero la bomba creata edimmaginata da Turing che verifica tutte le disposizioni di Scambiatori possibili.In sostanza una volta istanziato un oggetto di questa classe vengono createtante variabili di tipo BombRunner quante sono le disposizioni possibili di 5scambiatori in 3 alloggiamenti (60 in tutto), le quali poi, mediante il metodostartThemAll, individueranno tutti gli assetti risolventi il crittogramma.

Le variabili private con le loro funzioni sono le seguenti:

• threads: l’array di BombRunner in cui verranno immagazzinate tutte lebombe necessarie a verificare ciascuna disposizione.

• crib: la stringa che rappresenta il crib.

Page 34: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

5 La “Bomba” di Turing: versione Informatica 34

• codedCrib: la stringa che rappresenta il testo cifrato in cui si presumeessere memorizzato il crib.

• initO!set: la distanza del codedCrib dall’inizio della cifratura di cui tenereconto nel momento in cui si restituisce l’assetto risultante (operazione fattadalle singole Bomb).

Invece, i metodi sono i seguenti:

• AlanTuringBombs(costruttore): verifica se siano state passate stringhevuote per generare una BadCribException e solo una volta estinto talepericolo inizializza tutte le variabili precedentemente descritte usando ilmetodo disposizioni per generare ciascuna disposizione di 3 elementi in unset di 5.

• startThemAll: genera un Thread per ogni BombRunner inizializzato nelcostruttore e li fa partire in parallelo. Prima di terminare l’esecuzio-ne applica il metodo join per assicurare che l’elaborazione abbia avutotermine.

• getSolverResult: produce l’array di stringhe in cui sono memorizzati tuttigli assetti risolventi il crittogramma relativamente all’i-esima Bomba.

• fact(statico): restituisce il fattoriale di un numero passato come argomen-to.

• disposizioni(statico): genera l’i-esima k-permutazione (disposizione n,kcon n pari alla dimensione di base) del vettore di array base.

• getSequence: restituisce il ciclo relativo alla prima BombRunner (equiva-lente a tutte le altre) secondo la semantica già descritta.

5.2.9 Classe AlanTuringBombSimulator

Interfaccia grafica in swing che realizza la simulazione della crittoanalisi deicrittogrammi enigma inseriti.

L’interfaccia grafica si compone di:

• 2 Aree di testo(Crib in chiaro, Testo cifrato): per inserire il crib e il testocifrato che dovrebbe contenerlo.

• 1 Pulsante (Trova): che istanzia l’oggetto AlanTuringBombs con il crib eil testo cifrato indicati nelle due aree di testo.

• 1 Casella Combinata (Scambiatori): rappresenta ciascuna delle possibi-li disposizioni che assumono gli scambiatori (essendo caricate alla stessamaniera della Bomb è su!ciente utilizzarne l’indice relativo per sapere aquale disposizione si sta facendo riferimento).

• 1 Campo di Testo (Assetti Validi): recherà la concatenazione individuatadal programma rispetto al crib in chiaro e al testo cifrato inseriti.

• 1 Lista: indicherà ciascuno degli assetti risolventi il crittogramma.

Page 35: Enigma e la “bomba” di Turing Una storia contemporanea ... · cercatori di significati, alchimisti votati alla trasmutazione di astruse serie di segni in parole dotate di senso.

5 La “Bomba” di Turing: versione Informatica 35

Il sorgente è abbastanza chiaro nelle sue funzioni (anche perché la semanticadi ciascun componente è già stata descritta). Tuttavia si ritiene necessariochiarire ciò che è stato fatto per la gestione della pressione del pulsante Trova eil cambiamento del valore memorizzato nella casella combinata Scambiatori.

• Trova: normalizza il contenuto delle due aree di testo secondo le regolespecificate in Enigma per il testo chiaro e quello cifrato, dopodiché istanziail campo privato theBomb di tipo AlanTuringBombs secondo il contenutoaggiornato delle due aree di testo. Nel caso venga generata un eccezio-ne di tipo BadCribException (perché il contenuto delle aree è assente operché il crib e il testo cifrato inseriti non producono concatenazioni) vie-ne visualizzata una finestra di dialogo scomparsa la quale viene svuotatoil contenuto del componente lista. In caso ciò non si verifichi, ovvero incaso ci sia una concatenazione, vengono lanciati i thread di theBomb einfine caricati nella lista i risultati relativi al valore corrente della casellacombinata.

• Scambiatori: se si è istanziata la variabile oggetto theBomb, la lista vienecaricata con l’elenco dei risultati prodotti per il valore relativo alla nuovadisposizione selezionata nella casella combinata.

Riferimenti bibliografici

[1] Codici & Segreti “La storia a"ascinante dei messaggi cifrati dall’anticoEgitto ad Internet” - Simon Singh - Biblioteca Universale Rizzoli - 2005

[2] Enigma Machine - http://en.wikipedia.org/wiki/Enigma_machine

[3] CryptoAnalysis of the Enigma - http://en.wikipedia.org/ wiki/Cryp-tanalysis_of_the_Enigma

[Nota 1] Prodotti software usati per realizzare i programmi: “NetBeans 6.5”

[Nota 2] Prodotti software usati per realizzare la presente documentazione:“Lyx version 1.6.2 Copyright 1995 by Matthias Ettrich”

[Nota 3] I testi descrittivi relativi al funzionamento di Enigma sono statiliberamente tratti e riadattati dal libro Codici & Segreti

[Nota 4] Le immagini della presente documentazione sono stati digitalizzati dallibro Codici & Segreti e tratti da en.wikipedia.org

[Nota 5] Il codice sorgente del progetto in esame è liberamente consultabileall’indirizzo “http://code.google.com/p/iiwwcryptography/”