Tecniche di trasposizione

La cifratura con tecniche di trasposizione si basa su una permutazione delle lettere del testo in chiaro, che vengono solo “spostate”, senza modificarle. Allora, a differenza di quanto accade con le tecniche di sostituzione, la frequenza delle lettere rimane invariata dal testo in chiaro al testo cifrato, ma, in compenso, spostando le lettere si “spezzano” le strutture di più lettere presenti nel plaintext (diagrammi, trigrammi, header di un file / protocollo, ecc), che gli schemi di sostituzione tendono invece a preservare.

Rail fence

Un semplice esempio di tecnica di trasposizione è la rail fence (”staccionata”), che consiste nello scrivere il testo in chiaro come una sequenza di diagonali di una certa lunghezza, e poi leggere le lettere così disposte come una sequenza di righe per ottenere il testo cifrato. In questo schema, la chiave è la profondità della staccionata, cioè la lunghezza delle diagonali.

Ad esempio, dato il testo in chiaro

$$ \texttt{meet me after the toga party} $$

per cifrarlo con provondità due esso viene disposto come

Untitled

e poi letto riga per riga, ottenendo:

$$ \texttt{MEMATRHTGPRYETEFETEOAAT} $$

Questo schema può essere facilmente oggetto di attacchi a forza bruta, perchè lo spazio delle chiavi è limitato dal fatto che le diagonali non possono essere più lunghe del messaggio, dunque un attaccante riuscirebbe facilmente a provare tutte le possibili lunghezza, fino a ottenere il testo in chiaro (purchè, come al solito, sia in grado di riconoscere quest’ultimo per capire che la decifratura ha avuto successo).

Trasposizione di colonne

Uno schema più complesso consiste nello scrivere un messaggio riga per riga in una matrice, e poi leggerlo colonna per colonna, permutando però l’ordine delle colonne. L’ordine in cui leggere le colonne (e il numero di colonne) costituisce dunque la chiave.

Ad esempio, si considerino il testo in chiaro

$$ \texttt{attack postponed until two am} $$

e la chiave $\texttt{4 3 1 2 5 6 7}$, nella quale ogni numero corrisponde a una colonna e indica la sua posizione nell’ordine di lettura. Per eseguire la cifratura, si dispone innanzitutto il plaintext riga per riga in una matrice avente tante colonne quanti sono i numeri che formano la chiave; se la lunghezza del messaggio non è un multiplo del numero di colonne, si aggiungono dei caratteri di riempimento prefissati (concordati con il destinatario del messaggio; qui ad esempio sono lettere $\texttt x$) per completare l’ultima riga:

Untitled

Il testo cifrato è poi ottenuto leggendo la prima colonna che la chiave ha numerato 1, dall’alto verso il basso, poi la colonna 2, e così via:

$$ \texttt{TTNAAPTMTSUOAODWCOIXKNLXPETX} $$

Anche se questo schema è più complesso del rail fence, la crittoanalisi rimane abbastanza semplice: si dispone il testo cifrato su una matrice di larghezza corrispondente alla lunghezza della chiave ipotizzata e si prova a ricostruire l’ordine delle colonne.