Crypto

Introduzione §

Il cifrario Enigma era un cifrario da campo usato dai tedeschi durante la seconda guerra mondiale. Enigma è una delle macchine di crittografia storiche più conosciute, e in realtà si riferisce a una serie di macchine cifranti simili. La prima macchina Enigma fu inventata da un ingegnere tedesco chiamato Arthur Scherbius alla fine della prima guerra mondiale. Fu usata commercialmente dai primi anni venti in poi, e fu anche adottata dai servizi militari e governativi di un certo numero di nazioni – soprattutto dalla Germania nazista prima e durante la seconda guerra mondiale. Sono stati prodotti diversi modelli di Enigma, ma il modello militare tedesco, il Wehrmacht Enigma, è la versione più comunemente discussa.

Se volete criptare alcuni dei vostri messaggi Enigma, date un’occhiata all’esempio javascript.

L’algoritmo §

Questa sezione parlerà di Enigma I alias Wehrmacht Enigma, altre varianti sono simili nel funzionamento. La ‘chiave’ di Enigma consiste di diversi elementi:

  1. I rotori e il loro ordine
  2. Le posizioni di partenza dei rotori
  3. La ringstellung, o impostazioni degli anelli
  4. Steckerverbindungen, o impostazioni della scheda

Per informazioni sulle procedure usate dai tedeschi durante la seconda guerra mondiale per inviare messaggi Engima, incluso come venivano impostati gli indicatori, vedi questa descrizione.

I rotori §

Assumiamo che i nostri rotori siano I,II,III che si muovono da sinistra a destra, e stiamo cercando di cifrare la lettera ‘A’. Assumiamo per ora che mentre la lettera ‘A’ viene cifrata ogni rotore sia nella sua posizione iniziale (‘AAA’). Poiché i nostri rotori sono I,II,III che si muovono da sinistra a destra, il carattere A passerà prima attraverso il rotore III. Ogni rotore applica una semplice operazione di sostituzione. La tabella di sostituzione per il rotore III può essere vista qui sotto.

ABCDEFGHIJKLMNOPQRSTUVWXYZBDFHJLCPRTXVZNYEIWGAKMUSQO

B viene sostituito con D, C viene sostituito con F ecc. Così, dopo che la lettera ‘A’ passa attraverso il rotore, esce come ‘B’. La lettera ‘B’ viene ora immessa attraverso il rotore II, dove viene sostituita da ‘J’ ecc. Questo è meglio rappresentato usando una tabella (per una descrizione completa dei cablaggi del rotore per ogni rotore, vedi questa pagina di wikipedia):

III II I Riflettore inv(I) inv(II) inv(III)
A -> B B -> J J -> Z Z -> T T -> L L -> K K -> U

Dopo che la lettera passa attraverso i rotori III,II,I colpisce il riflettore e subisce un’altra sostituzione semplice. Dopo essere uscita dal riflettore, la lettera viene rimandata indietro attraverso i rotori nella direzione inversa (questo significa che viene applicata la sostituzione inversa). Possiamo vedere dalla tabella che dopo che la lettera cifrata esce dal rotore III alla fine, siamo rimasti con la lettera U. Un passo importante che non ho ancora menzionato è il fatto che i rotori aumentano prima che ogni lettera sia cifrata. Se le posizioni iniziali dei rotori sono ‘FEQ’, allora saranno prima incrementate a ‘FER’ prima che la prima lettera sia cifrata.

Incremento dei rotori §

Un errore comune quando si implementa l’enigma è assumere che i rotori agiscano come un contachilometri standard, ci sono comunque alcune differenze chiave. Ogni rotore ha una tacca che fa fare un passo al rotore alla sua sinistra. Il rotore I provoca il passo del rotore successivo sulla transizione da Q a R, il rotore II sulla transizione da E a F ecc. I rotori da I a V sono utilizzati nell’enigma Wermacht, più tardi furono aggiunti altri rotori che avevano due tacche.

I II III IV V VI VII VIII
Q E V J Z Z,M Z,M Z,M

C’è un ulteriore dettaglio che confonde, quello del “doppio passo”. Quando un rotore fa un passo, fa fare un passo anche al rotore alla sua destra. Questo non viene notato quando il secondo rotore fa un passo, poiché il primo rotore fa un passo ogni volta che si preme un tasto. Tuttavia, quando il terzo (più a sinistra) rotore fa un passo, fa sì che anche il secondo rotore faccia un passo. Questo significa che il periodo della macchina non è 26x26x26, ma solo 26x25x26.

La Ringstellung §

La Ringstellung (impostazioni dell’anello) sono generalmente fornite come una stringa di 3 lettere, ad esempio ‘FAM’ (o in alternativa come numeri tra 1 e 26, che rappresentano le lettere). Nella discussione precedente ho assunto che il cifrario a sostituzione semplice di ogni rotore fosse fisso. Il ringstellung fornisce la possibilità di spostare il cifrario di sostituzione come segue. Con un anello impostato su ‘A’ (o 1), la sostituzione del rotore I appare così:

ABCDEFGHIJKLMNOPQRSTUVWXYZEKMFLGDQVZNTOWYHXUSPAIBRCJ

Con un anello impostato su ‘B’ (o 2), la sostituzione del rotore I appare così:

ZABCDEFGHIJKLMNOPQRSTUVWXYEKMFLGDQVZNTOWYHXUSPAIBRCJ

Lo Steckerverbindungen §

Lo steckerverbindungen (plugboard) è un ulteriore livello di sicurezza che consiste in 13 fili che si inseriscono in prese sulla parte anteriore della macchina Enigma.Ogni filo collega 2 lettere, per esempio P a O. Queste coppie sono specificate come parte del materiale della chiave. Quando una lettera viene digitata, prima che entri nel primo rotore, subisce la sostituzione secondo la scheda, poi dopo che la lettera esce, viene nuovamente sottoposta alla sostituzione della scheda prima di essere emessa. Un esempio di impostazione del tabellone è il seguente: PO ML IU KJ NH YT GB VF RE AC (Questo significa che P e O sono scambiate, M e L sono scambiate ecc.)

Se usiamo l’esempio precedente dove la lettera ‘A’ è stata criptata con i rotori I, II e III con le posizioni iniziali AAA, abbiamo avuto la lettera A criptata come una U. Se ora prendiamo in considerazione la scheda, usando le impostazioni della scheda nel paragrafo precedente, la ‘A’ è prima tradotta in una ‘C’ prima dell’encipherment. L’encipherment continua come al solito, questa volta la ‘C’ viene emessa come ‘J’. Questa lettera viene poi instradata di nuovo attraverso la scheda per essere sostituita con la ‘K’. Così ora abbiamo una ‘A’ che viene cifrata come una ‘K’ con il tabellone in uso. La scheda aumenta significativamente la forza del cifrario Enigma nel suo complesso, più di quanto potrebbe fare l’aggiunta di un altro rotore.

Esempio JavaScript §

Plaintext

impostazioni chiave:
impostazioni dell’anello:
Rotori:
Impostazioni della scheda della spina:

Ciphertext

Altre implementazioni §

Per cifrare i vostri messaggi in python, potete usare il modulo pycipher. Per installarlo, usate pip install pycipher. Per cifrare i messaggi con il cifrario Enigma (o un altro cifrario, vedi qui per la documentazione), vedi l’esempio qui.

Criptanalisi §

Per alcuni codici per decifrare automaticamente i messaggi Enigma vedi Cryptanalysis of Enigma.

Molto lavoro è stato fatto per decifrare Enigma, alcuni metodi come rodding e buttoning up furono usati durante la seconda guerra mondiale, ma richiedono ‘cribs’, o pezzi noti di testo in chiaro. Questi metodi sono discussi nella pagina di wikipedia.

Approcci più moderni includono il documento di Jim Gillogly ‘Ciphertext only Cryptanalysis of the Enigma’. Una lettera di follow-up che corregge alcuni errori nel documento può essere trovata qui. Un altro articolo che si basa su quello di Jim Gillogly è ‘Applying Statistical Language Recognition Techniques in the Ciphertext only Cryptanalysis of Enigma’ di Heidi Williams. Un’altra risorsa interessante è The Cryptographic Mathematics of Enigma.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.