Track
/
Pharo
Pharo
/
Esercizi
/
Cifrario semplice
Cifrario semplice

Cifrario semplice

Medio

Istruzioni

Implementa un semplice cifrario a scorrimento, come quello di Cesare, e un cifrario a sostituzione più sicuro.

Passaggio 1

«Se aveva qualcosa di riservato da dire, lo scriveva in cifra, cioè cambiando talmente l'ordine delle lettere dell'alfabeto che non se ne potesse ricavare una sola parola. Se qualcuno vuole decifrare queste cose e capirne il significato, deve sostituire alla A la quarta lettera dell'alfabeto, cioè la D, e così via con le altre.» Svetonio, Vita di Giulio Cesare

I cifrari sono algoritmi molto semplici che ci permettono di rendere un testo meno leggibile pur consentendo di decifrarlo con facilità. Sono vulnerabili a molte forme di crittanalisi, ma Cesare fu fortunato: i suoi nemici non erano crittanalisti.

Il cifrario di Cesare fu usato per alcuni messaggi che Giulio Cesare inviava quando era lontano. Cesare sapeva che il cifrario non era un granché, ma in questo aveva un alleato: quasi nessuno sapeva leggere bene. Quindi anche sbagliare di un paio di lettere bastava perché la gente non riconoscesse le poche parole che pure conosceva.

Il tuo compito è creare un semplice cifrario a scorrimento come il cifrario di Cesare. Questa immagine è un ottimo esempio del cifrario di Cesare:

Caesar Cipher

Per esempio:

Passando "iamapandabear" come input alla funzione encode si ottiene il testo cifrato "ldpdsdqgdehdu". Abbastanza oscuro da mantenere segreto il nostro messaggio durante la trasmissione.

Quando si passa "ldpdsdqgdehdu" alla funzione decode, questa restituisce l'originale "iamapandabear", permettendo al tuo amico di leggere il messaggio originale.

Passaggio 2

I cifrari a scorrimento smettono rapidamente di essere utili quando il comandante avversario li scopre. Invece, proviamo a usare un cifrario a sostituzione. Prova a modificare il codice per permetterci di specificare una chiave e usarla come distanza di scorrimento.

Ecco un esempio:

Data la chiave "aaaaaaaaaaaaaaaaaa", codificando la stringa "iamapandabear" si otterrebbe l'originale "iamapandabear".

Data la chiave "ddddddddddddddddd", codificando la nostra stringa "iamapandabear" si otterrebbe l'oscura "ldpdsdqgdehdu"

Nell'esempio sopra, abbiamo impostato a = 0 come valore della chiave. Quindi, sommando il testo in chiaro alla chiave, otteniamo di nuovo lo stesso messaggio. Perciò "aaaa" non è una chiave ideale. Ma se impostiamo la chiave su "dddd", otteniamo la stessa cosa del cifrario di Cesare.

Passaggio 3

L'anello più debole di qualsiasi cifrario è l'essere umano. Rendiamo il tuo cifrario a sostituzione un po' più tollerante agli errori, fornendo una fonte di casualità e assicurandoci che la chiave contenga solo lettere minuscole.

Se qualcuno non fornisce affatto una chiave, genera una chiave davvero casuale di almeno 100 caratteri minuscoli.

Estensioni

I cifrari a scorrimento funzionano rendendo il testo un po' strano, ma sono vulnerabili all'analisi delle frequenze. I cifrari a sostituzione aiutano in questo, ma restano molto vulnerabili quando la chiave è corta o se gli spazi vengono mantenuti. Più avanti vedrai una soluzione a questo problema nell'esercizio "crypto-square".

Se vuoi andare oltre in questo campo, le domande iniziano a riguardare come scambiarsi le chiavi in modo sicuro. Dai un'occhiata a Diffie-Hellman su Wikipedia per una delle prime implementazioni di questo schema.

Nota

Prova a usare operazioni aritmetiche come l'operatore modulo per far ripartire gli indici quando superano il limite. Anche le classi Character e String possono tornare utili.

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Pharo Exercism

Vuoi iniziare Cifrario semplice?

Iscriviti a Exercism per imparare e padroneggiare Pharo con 50 esercizi e il mentoring di persone reali, tutto gratis.