Ultima modifica:
Parti dal presupposto che, sia nel cifrario di Cesare che nei cifrari affini, quello che vai a cifrare è una sequenza di numeri. Se vuoi cifrare del testo, ovvero dei dati che sono apparentemente inadatti a questi cifrari, dovrai prima encodarlo in una sequenza di numeri. Ad esempio, puoi dire
Una volta che hai rappresentato i tuoi dati (che sia testo, immagini o altro) come sequenza di numeri, nel cifrario di Cesare dici: sostituisci l'i-esimo elemento del plaintext
Se vuoi attaccare il cifrario di cesare, ovvero se riesci a intercettare del testo cifrato e vuoi scoprire cosa c'è scritto senza conoscere k, ti basta fare
I cifrari affini allargano lo spazio delle chiavi senza modificare l'encoding. La chiave diventa una coppia di numeri
Per esempio, questo è stato cifrato con il cifrario di Cesare
mentre questo è stato cifrato con un cifrario affine
riesci a decifrare il testo senza che io ti dico le chiavi? Con quello di Cesare sono sicuro che farai poca fatica, con l'altro è un'altra storia... in entrambi i casi ti dico che ho usato l'alfabeto inglese di 26 caratteri (maiuscole e minuscole non fanno differenza).
PS. Per adesso sono rimasto sul vago per farti capire le basi, ma ti accenno che non è proprio vero che le chiavi sono
0=a, 1=b, 2=c, ..., z=25
, oppure puoi prendere i valori ASCII corrispondenti o fare mille altre cose. L'encoding non è crittografia perché non esiste nessun segreto, non hai una chiave/password da ricordarti.Una volta che hai rappresentato i tuoi dati (che sia testo, immagini o altro) come sequenza di numeri, nel cifrario di Cesare dici: sostituisci l'i-esimo elemento del plaintext
Pi
con Ei = Pi + k mod N
dove k è la chiave (i.e., il segreto che conoscono solo le due persone che comunicano) e N è la dimensione dell'alfabeto (e.g., 26 per le lettere A-Z, 128 per ASCII, 2^24 per il colore di un pixel, ecc...).Se vuoi attaccare il cifrario di cesare, ovvero se riesci a intercettare del testo cifrato e vuoi scoprire cosa c'è scritto senza conoscere k, ti basta fare
N-1
tentativi. Ad esempio, nel caso in cui stai intercettando del testo encodato con 0=a, 1=b, 2=c, ..., z=25
se k fosse uguale a 0 il testo non sarebbe nemmeno cifrato e se k fosse maggiore di 25 ti basta prendere k mod 26
(e.g., la criptazione con k=3 è identica alla criptazione con k=29 o k=55).I cifrari affini allargano lo spazio delle chiavi senza modificare l'encoding. La chiave diventa una coppia di numeri
(x, y)
e per cifrare sotituisci l'i-esimo elemento del plaintext Pi
con Ei = x * Pi + y mod N
. Ciò ti porta ad avere potenzialmente (N-1)^2
possibili chiavi distinte! Ad esempio, se con Cesare e N=128 (codifica ASCII) l'attaccante aveva solo 127 chiavi da provare, con un cifrario affine ne ha ben 16129 mentre chi comunica dovrà solo ricordarsi (la chiave) due numeri al posto di uno. Inoltre, il cifrario affine non effettua (necessariamente) uno shift lineare; quindi, se nel testo cifrato tu vedi due lettere uguali non puoi assumere che sia probabilmente una delle poche lettere doppie che occorrono frequentemente nella lingua italiana e tradurre tutto il testo a partire da questa tua intuizione: non ti basta saper tradurre una lettera per tradurre tutto il testo.Per esempio, questo è stato cifrato con il cifrario di Cesare
Enomnojgr dj zoqratn HjyyzorDbo
mentre questo è stato cifrato con un cifrario affine
Oniib dnyzron kniib hazugrtabqzb, gz wb hriuzgr ubagzhribalnogn zi hzqabazr kz Hndban
riesci a decifrare il testo senza che io ti dico le chiavi? Con quello di Cesare sono sicuro che farai poca fatica, con l'altro è un'altra storia... in entrambi i casi ti dico che ho usato l'alfabeto inglese di 26 caratteri (maiuscole e minuscole non fanno differenza).
PS. Per adesso sono rimasto sul vago per farti capire le basi, ma ti accenno che non è proprio vero che le chiavi sono
(N-1)^2
. Inizia a capire le basi, poi se vuoi approfondire ne riparliamo.