Cifrario di Cesare

Da Wikipedia, l'enciclopedia libera.

In crittografia il cifrario di Cesare è uno dei più antichi algoritmi crittografici di cui si abbia traccia storica. È un cifrario a sostituzione monoalfabetica in cui ogni lettera del testo in chiaro è sostituita nel testo cifrato dalla lettera che si trova un certo numero di posizioni dopo nell'alfabeto. Questi tipi di cifrari sono detti anche cifrari a sostituzione o cifrari a scorrimento a causa del loro modo di operare: la sostituzione avviene lettera per lettera, scorrendo il testo dall'inizio alla fine.

Schema del cifrario di Cesare

In particolare, Cesare utilizzava uno spostamento di 3 posizioni (la chiave era dunque 3), secondo il seguente schema:

Testo in chiaro a b c d e f g h i k l m n o p q r s t u x
Testo cifrato D E F G H I K L M N O P Q R S T V X A B C

Lo stesso si può fare con l'alfabeto italiano:

Testo in chiaro a b c d e f g h i l m n o p q r s t u v z
Testo cifrato D E F G H I L M N O P Q R S T U V Z A B C

Per cifrare un messaggio, basta prendere ogni lettera del testo in chiaro e sostituirla con la corrispondente lettera della riga testo cifrato. Per decifrare, viceversa. Ecco un semplice esempio (coerentemente con l'uso antico di omettere gli spazi tra le parole nei papiri, nel testo questi sono omessi; questo aumenta anche la sicurezza del cifrario perché toglie un importante punto di riferimento, cioè la suddivisione in parole, a chi tentasse la decrittazione):

Testo in chiaro attaccaregliirriducibiligalliallaorasesta
Testo crittato DZZDFFDUHLONNUUNGAFNENONLDOONDOODRUDVHVZD

Cifrare (e decifrare) il testo più volte non migliora la sicurezza, in quanto una rotazione di A posti seguita da una di B posti equivale ad una di A + B. Matematicamente parlando, la cifratura con le varie chiavi forma un gruppo.

Storia[modifica | modifica wikitesto]

Il cifrario di Cesare prende il nome da Giulio Cesare, che lo utilizzava per proteggere i suoi messaggi segreti. Grazie allo storico Svetonio[1] sappiamo che Cesare utilizzava in genere una chiave di 3 per il cifrario, come nel caso della corrispondenza militare inviata alle truppe comandate da Quinto Tullio Cicerone. Al tempo era sicuro perché gli avversari spesso non erano neanche in grado di leggere un testo in chiaro, men che mai uno cifrato; inoltre non esistevano metodi di crittanalisi in grado di rompere tale codice, per quanto banale.

Conosciamo anche altri che usarono questo cifrario al tempo di Cesare: Augusto, suo nipote, lo utilizzava con chiave 1 ma senza ripartire da sinistra in caso di fine dell'alfabeto. Quindi, scriveva B per A, C per B ma AA per X.

Dalla scoperta dell'analisi delle frequenze da parte del matematico arabo Al-Kindi nell'XI secolo circa, tutti i cifrari di questo tipo sono divenuti molto semplici da rompere; nessuno è adatto per comunicazioni sicure allo stato tecnologico attuale, né lo è stato negli ultimi 1000 anni. Tuttavia, una forma di questo cifrario, chiamata ROT13, è ancora usata oggi per offuscare parti di un messaggio in modo da non renderle immediatamente comprensibili.

I "pizzini" di Provenzano[modifica | modifica wikitesto]

Un rudimentale sistema di cifratura basato sul cifrario di Cesare è stato usato anche da Bernardo Provenzano per proteggere informazioni rilevanti scritte nei suoi famosi pizzini, i piccoli foglietti di carta con i quali il boss della mafia, durante la sua latitanza, riceveva informazioni e impartiva ordini[2]. Il sistema scelto da Provenzano era abbastanza semplice: si trattava di sostituire ad ogni lettera il numero corrispondente alla posizione nell'alfabeto sommato a 3 e di comporre così un singolo, lungo numero. Ad esempio, i numeri "512151522 191212154" nascondono il nome di "Binnu Riina": infatti, 5 = 2 (posizione della B) più 3; 12 = 9 (posizione della I) più 3; ecc...

Matematica[modifica | modifica wikitesto]

Considerazioni generiche[modifica | modifica wikitesto]

Il funzionamento del codice di Cesare è possibile grazie all'aritmetica modulare:

Alphabet table.png

dove è il numero di lettere dell'alfabeto.

In particolare per la chiave 3, nell'alfabeto inglese:


Funzione inversa[modifica | modifica wikitesto]

Partendo dalla funzione generale scritta esprimendo con la variabile dipendente :

Trasportiamo al secondo membro e al primo:

Moltiplichiamo entrambi i membri per -1:

Poniamo come variabile dipendente () e come variabile indipendente ():


In conclusione:

dove è il numero di lettere dell'alfabeto.

In particolare per la chiave 3, nell'alfabeto inglese:


Cifrario affine[modifica | modifica wikitesto]

Un ulteriore generalizzazione è costituita dal cifrario affine:

con , perché altrimenti ci sarebbe una stessa cifratura per diverse lettere.

Rompere la cifratura[modifica | modifica wikitesto]

Con un diagramma delle frequenze delle lettere nel testo in cifra e nella lingua originale del testo, è facile individuare il valore della chiave osservandone la disposizione. Ad esempio, nella lingua italiana, le lettere più frequenti sono le vocali E, A, O ed I, con lievi differenze, seguite dalle consonanti L, N, R, S e T, mentre sono rare B, F, Q e Z e praticamente assenti le lettere straniere J, K, Y, X e W; nella lingua inglese, invece, le lettere più frequenti sono E e T, mentre le più rare sono Q e Z. Anche i computer sono in grado di eseguire simili calcoli senza difficoltà.

Il cifrario di Cesare è molto più debole di uno in cui la corrispondenza delle lettere sia casuale, come succede in molti giochi enigmistici. I luoghi più comuni dove si può trovare questo cifrario è in giochi per bambini oppure nell'algoritmo ROT13, che è fatto apposta per essere facile da decifrare.

Codifica del cifrario in campo informatico[modifica | modifica wikitesto]

Il suddetto cifrario può essere trascritto in tutti i linguaggi di programmazione, questo è un esempio in C++:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cctype>
using namespace std;

#define MAX 200

int main(void) 
{
   char string[MAX];

   cout << "Inserire frase:" << endl;
   cin.getline(string,MAX);

   printf("     Frase  normale: %s\n", string);
   printf("Frase crittografata: ");

   for (int i=0, len=strlen(string) ; i<len; i++) 
   {
      if ( (string[i]>='A' && string[i]<='W') || (string[i]>='a' && string[i]<='w') ) 
      {
         // lettere dalla A alla W (maiuscole) e dalla a alla w (minuscole)
         printf("%c", string[i] + 3);
      }
      else if (isalpha(string[i]))
      {
         // tutte le altre lettere (X Y Z x y z)
         printf("%c", string[i] - 23);
      }
      else 
      {
         // tutti gli altri caratteri
         printf("%c", string[i]);
      }
   }
   cout << endl;
   
   return 0;
}

Note[modifica | modifica wikitesto]

  1. ^ Extant et ad Ciceronem, item ad familiares, id est sic structo litterarum ordine, ut nullum verbum effici posset: quae si qui investigare et persequi velit, quartam elementorum, id est D pro A et perinde reliquas commutet. - Vite dei Cesari (56, I), Svetonio
  2. ^ Il Cifrario di Cesare era la protezione dei "Pizzini" di Provenzano - Anti-Phishing Italia

Bibliografia[modifica | modifica wikitesto]

  • Joan Gómez Urgellés, Matematici, spie e pirati informatici, RBA Italia, 2013, capitolo 2

Voci correlate[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

Crittografia Portale Crittografia: accedi alle voci di Wikipedia che trattano di crittografia