CifrariGriglieGriglie a rotazione
Crittanalisi di una griglia di Fleissner 7x7 (1916)
La crittografia italiana nella Grande GuerraTaccuino di Luigi SaccoTaccuino, copia integrale

Il crittogramma

Dal taccuino 1916 di Luigi Sacco una coppia di pagine dedicate a un cifrato con griglia di Fleissner (griglia quadrata di ordine dispari con casella nera al centro). Le pagine fanno parte di un capitolo intitolato “Sistemi a griglia” e datato 17 ott 1916, e sono le prime a riportare cifrati con griglia.

A differenza di altre pagine, qui Sacco non riporta esplicitamente alcuna soluzione, ma prospetta una possibile strategia di soluzione; avendo già esperienza nella decrittazione di trasposizioni a rettangolo irregolare, è naturale che Sacco tenti di trasformare la griglia 7x7 in una equivalente griglia rettangolare, in modo da poter applicare i metodi già collaudati.

Aggiornamento maggio 2020: Tobias Schrödel, noto esperto di crittografia storica, ha scoperto che la soluzione del cifrato è in realtà presente nella pagina, anche se mimetizzata: il secondo quadrato in alto, evidenziato in rosso, contiene infatti una serie di numeri da 1 a 48 che sovrapposti alla griglia forniscono l'ordine di lettura della soluzione. Riesaminando la pagina sembre che Sacco abbia scritto queste due pagine usando una griglia già risolta in precedenza come esempio per considerazioni sul modo di risolvere queste griglie. Nell'ottobre 1916 dunque era già in grado di risolvere queste griglie.

In altra pagina vengono trattati altri due crittogrammi cifrati con griglia quadrata 8x8.


Oggi questi crittogrammi possono essere decrittati in pochi secondi via software. Qui sotto mostro come ho decrittato questo cifrato con l'aiuto di un software tipo computer aided, e seguendo alcune idee esposte nel manuale di Sacco; viene poi mostrata una soluzione completamente automatica di Bart Wenmeckers basata su un algoritmo di hill climbing.


Crittanalisi assistita da software

Una prima cosa che salta all'occhio è la presenza di due lettere rare in tedesco, come X e Y in basso a sinistra nella griglia; immediato il sospetto che siano le ultime due lettere del testo, usate come riempitivo per completare la griglia; ipotesi che si rivelerà corretta.

Altra cosa singolare è la presenza della O con la umlaut, che suggerisce subito una parola come ÖSTLICH; inoltre si intravede nella parte in altro a destra la parola SUCHE o SUCHEN ma ci sono quattro S, tre U, quattro E e due N che possono fare al caso. Ci sono quindi decine di combinazioni da esaminare.

Usando un software da me sviluppato in forma di pagina web, che simula una griglia con i suoi fori, sono riuscito a decrittare il cifrato. Punto di partenza come detto la parola suchen. Dopo diversi tentativi è emersa la soluzione riportata qui sotto, con una copia della pagina suddetta; i quattro colori indicano le quattro rotazioni della griglia: 0° in blu; 90° in verde; 180° in rosso; 270° in giallo.

ESWURDENDREIPUNKTEGESEHENOTLLICHWEITESRSSUCHENXY

ES WURDEN DREI PUNKTE GESEHEN OTLLICH WEITESRS SUCHEN XY

Il messaggio ha diversi errori, OTLLICH invece di OSTLICH, una L di troppo, e una S mancante; e WEITESRS verosimilmente invece di WEITER, due S di troppo, forse usate come riempitivo, utili per mimetizzare la S di suchen? Insomma, errori accidentali o voluti per confondere il crittanalista? In ogni modo il testo tedesco corretto dovrebbe essere:

Es wurden drei Punkte gesehen östlich weiter suchen XY

che tradotto in italiano è:

Furono avvistati tre punti, cercare ulteriormente verso est XY

Curioso il fatto che una ingenuità come quella di concludere il messaggio con XY si accompagni con quelle che sembrano astuzie utili per confondere il crittanalista; in effetti avevo correttamente immaginato la parola östlich ma poi non c'era verso di trovarla nella griglia; e le tre S hanno notevolmente rallentato la ricerca della parola suchen.

Crittanalisi automatica

Oggi è possibile fare ancora meglio, una crittanalisi completamente automatica; la soluzione riportata a sinistra è quella dovuta a Bart Wenmeckers amministratore del gruppo facebook Cryptograms & Classical Ciphers.

Nella figura a sinistra, i passi, coppie di righe, della soluzione: la prima riga rappresenta la griglia (C per foro, D per non-foro), il numero alla fine il punteggio, la seconda riga il tentativo di soluzione. Alla fine la soluzione coincide perfettamente con quella descritta qui sopra.

Qui sotto il diagramma di flusso dell'algoritmo e la spiegazione, entrambe cortesemente fornite da Bart Wenmeckers.

  • Initialise key: inizializzare la chiave (di solito a caso) come punto di partenza. Dipende dal tipo di cifra usata.
  • Modify key: la chiave subisce una mutazione o cambiamento semplice. Spesso è un semplice scambio tra due elementi della chiave, a seconda del tipo di cifra usato.
  • Decoding: il testo cifrato è decifrato usando la chiave corrente in modo da produrre un testo chiaro. Diversi moduli di decifra possono essere usati a seconda del cifrario usato: sostituzione, griglia, trasposizione per colonne, trasposizione Amsco ecc.
  • Fitness aka scoring: Il fitness test si propone di valutare una data stringa di testo in rapporto a una data lingua. Questo è spesso fatto sommando i logaritmi delle frequenze dei poligrammi (digrammi, trigrammi ...) nella lingua data osservate nel testo in esame. Un database di frequenze logaritmiche della data lingua viene creato da un software che legge una vasta scelta di testi e memorizza il numero di poligrammi osservati; di solito si considerano poligrammi compresi tra 3 e 7 caratteri.
  • Control Algorithm: Ci sono diversi algoritmi che possono essere usati: Hill climbers (salire la collina), Simulated annealing (ricottura simulata), genetici e molti altri anche ibridi. Gli algoritmi devono prendere il risultato del fitness tester e decidere se tenere la chiave e lavorarci ulteriormente. Per gli algortimi hill climbers questa è di solito la scelta tra la chiave precedente e quella ottenuta dopo il cambiamento.

Contesto storico

Si tratta di crittogrammi austriaci o tedeschi? Come le suddette griglie 8x8 intercettate nello stesso periodo (ottobre 1916) anche questo sembra riferirsi a un evento della guerra navale, e le ipotesi sono le stesse: a) flotta austriaca in Adriatico; b) navi tedesche presenti nel Mar Nero.

L`ipotesi b) tedesca sarebbe coerente con l'uso delle griglie a rotazione, usate frequentemente dai Tedeschi durante la guerra, mentre non risulta che griglie di questo tipo fossero usate dagli Austriaci.

Risulta (p.es. Kahn, Codebreakers) che l'esercito tedesco tra la fine del 1916 e l'inizio del 1917 usò le griglie quadrate a rotazione e Sacco nel par. 157 del suo Manuale ricorda la decrittazione di cifrati di questo tipo (“Notevoli risultati si sono ottenuti contro i cifrari tedeschi, a trasposizione semplice e doppia, usati nei settori balcanici e nel traffico del Danubio.”)


Riferimenti bibliografici
Siti e pagine web
X Grppi di lettere con frequenza molto elevata; p.es. in italiano il digramma QU (la Q è quasi sempre seguita da U); in tedesco il digramma CH (la C è nel 90% dei casi seguita da H). Vedi par. 76 e seguenti del Manuale di Crittografia.
X Vorausichtlich invece di Voraussichtlich: può essere un refuso, o anche una deliberata eliminazione della doppia, abbastanza frequente nella crittografia classica. Però le doppie T di BITTE e MITTEILUNG sono rimaste.