Reading Time: 4 minutes

Il cifrario di Cesare in Python

Come abbiamo visto, e come sappiamo, i dati che viaggiano sulle autostrade dell’informazione sono vulnerabili per la presenza di spie e potenziali ladri.

È facile osservare i dati che attraversano una rete, in particolare adesso che le trasmissioni wireless sono in crescente aumento.

Per esempio, una persona può starsene seduta in automobile nel parcheggio di un hotel e intercettare le trasmissioni tra due computer se dispone di un apposito software detto sniffer.

Per questo motivo, molte applicazioni adesso utilizzano funzioni per crittografare i dati per proteggere le informazioni trasmesse in rete.

Alcuni protocolli di applicazioni sono stati aggiornati per includere versioni che garantiscono la sicurezza dei dati tramite la crittografia.

Per esempio FTPS e HTTPS sono versioni sicure dei protocolli FTP e HTTP per il trasferimento di file e di pagine web, rispettivamente.

Le tecniche di crittografia sono vecchie quanto la pratica di trasmettere e ricevere messaggi.

Il mittente codifica un messaggio traducendolo in un codice segreto, detto testo cifrato.

All’altra estremità, il destinatario decodifica il testo cifrato per riportarlo al suo stato originale (testo in chiaro).

Entrambe le parti di questa transazione devono avere a loro disposizione una o più chiavi che consentono di codificare e decodificare i messaggi.

Per dare un’idea di come funziona questo processo, esaminiamo ora una classica tecnica di crittografia applicata già nell’antichità.

Tale algoritmo prende il nome di cifrario di Cesare.

Questo algoritmo è stato utilizzato per migliaia di anni!

Ricordiamo che i caratteri di testo in una stringa sono ordinati come una sequenza di valori distinti.

Questo algoritmo di codifica, sostituisce ciascun carattere di testo in chiaro con il carattere che si trova a una data distanza nella sequenza.

Per distanze positive, il metodo ritorna all’inizio della sequenza per trovare i caratteri con i quali sostituire quelli che si trovano verso la fine del testo.

Per esempio, se il valore della distanza di un cifrario di Cesare è 5 caratteri, la stringa “ciao” sarà cifrata come “hnft”.

Per riportare questo testo in chiaro, si applica un metodo che usa la stessa distanza, ma che ricerca i caratteri a sinistra per la loro sostituzione.

Questo metodo crittografico ritorna accapo alla fine della sequenza per trovare il carattere con il quale sostituire quello che si trova all’inizio del testo.

I prossimi due script in linguaggio Python implementano l’algoritmo alla base del cifrario di Cesare per qualsiasi stringa che contiene lettere minuscole e per qualsiasi distanza tra 0 e 26.

Ricordiamo che la funzione ord restituisce la posizione ordinale del valore di un carattere nella sequenza ASCII, mentre la funzione chr svolge il compito inverso.

“””
File: encrypt.py

Codifica la stringa di lettere minuscole digitata dall'utente e visualizza il risultato.
L'altro input è il valore della distanza.
“””

plainText = input (“Digita una parola in lettere minuscole: “)
distance = int (input(“Digita il valore della distanza: “))
code = “”
for ch in plainText:
ordValue = ord(ch)

cipherValue = ordValue + distance
if cipherValue > ord ('z'):
cipherValue = ord('a') + distance – ord('z') – ordValue + 1)
code += chr(cipherValue)
print (code)
“””

File: decrypt.py
Decodifica la stringa di lettere minuscole digitata dall'utente e visualizza il risultato.
L'altro input è il valore della distanza.

"""

code = input (“Digita il testo da decifrare: “)
distance = int (input(“Digita il valore della distanza: “))
plainText = ' '
for ch in code:

ordValue = ord(ch)
cipherValue = ordValue – distance
if cipherValue < ord('a'):
cipherValue = ord('z') – (distance – (ord ('a') – ordValue +1))
plainText += chr(cipherValue)
print (plainText)

Questi sono alcuni esempi di esecuzione dei due script dal prompt del terminale.

Gli input dell’utente sono in corsivo.

> python encrypt.py
Digita una parola in lettere minuscole: invaders
Digita il valore della distanza: 5
nsafijwk

> python decrypt.py
Digita il testo da decifrare: nsafijwk
Digita il valore della distanza: 5
invaders

Questi script potrebbero essere estesi per coprire tutti i caratteri, inclusi gli spazi e i segni di punteggiatura.

Sebbene funzionasse molto bene nei tempi antichi, un cifrario di Cesare non sarebbe un ostacolo per un odierno attaccante o hacker e non incrementerebbe significativamente il livello di sicurezza di un sistema.

Supponendo che ci siano 128 caratteri ASCII, basterebbe scrivere un programma che elabora la stessa riga di testo tramite lo script decrypt esteso ai valori da 0 a 127, finchè non viene restituito un testo che abbia senso.

Ciò richiederebbe meno di un secondo di calcolo in un computer moderno.

Il difetto principale di questa tecnica crittografica è che il testo in chiaro viene codificato un carattere alla volta e ciascun carattere codificato dipende dallo stesso carattere e da una distanza fissa.

In un certo senso, la struttura del testo originale è preservata nel testo cifrato, quindi non sarebbe difficile scoprire una chiave da una semplice analisi visiva.

Una tecnica crittografica più efficace e sofisticata è detta cifratura a blocchi.

Questa tecnica usa un carattere in chiaro per calcolare due o più caratteri cifrati, e ciascun carattere cifrato è calcolato utilizzando due o più caratteri in chiaro.

Questo meccanismo è realizzato tramite una struttura matematica detta matrice invertibile, che determina i valori dei caratteri cifrati.

La matrice fornisce la chiave in questa tecnica.

Il destinatario usa la stessa matrice per decifrare il testo cifrato.

Il fatto che l’informazione utilizzata per determinare ciascun carattere provenga da un blocco di dati rende più difficile l’identificazione della chiave.

error: Content is protected !!

La maggior parte dei contenuti del blog ComputerSec vengono pubblicati a beneficio di tutti e in modo completamente gratuito.
Tuttavia per supportare il blog, e per avere ulteriori vantaggi, puoi decidere di abbonarti e sfruttare al 100% tutti i contenuti!
Abbonati Ora!

Complimenti! Ti sei iscritto alla nostra Newsletter

C'è stato un errore durante l'invio della richiesta. Per favore riprova.

Computer Security will use the information you provide on this form to be in touch with you and to provide updates and marketing.