Il cifrario polialfabetico più conosciuto è il cifrario di Vigenère. Si può considerare una generalizzazione del cifrario di Cesare: invece di spostare sempre dello stesso numero di posti una certa lettera da cifrare, questa viene spostata di un numero di posti variabile, ma ripetuto, determinato in base ad una parola chiave.
Avendo una sequenza di lettere in plaintext:
e una chiave composta da un certo numero di lettere:
dove sappiamo che il numero di lettere nella chiave è inferiore al numero di lettere da cifrare:
la sequenza di lettere cifrate è:
ed è calcolata come segue:
E = Encryption
Ovvero la prima lettera della parola da cifrare
Una equazione generica per il processo di cifratura è:
E una equazione per il processo di decifratura è:
Esempio utilizzando la chiave: deceptive
key: | deceptivedeceptivedeceptive |
---|---|
plaintext: | wearediscoveredsaveyourself |
ciphertext: | ZICVTWQNGRZGVTWAVZHCQYGLMGJ |
Proviamo ed esprimerlo numericamente:
keyword | d | e | c | e | p | t | i | v | e | d | e | c | e | p | t | i | v |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
key | 3 | 4 | 2 | 4 | 15 | 19 | 8 | 21 | 4 | 3 | 4 | 2 | 4 | 15 | 19 | 8 | 21 |
plaintext | 22 | 4 | 0 | 17 | 4 | 3 | 8 | 18 | 2 | 14 | 21 | 4 | 17 | 4 | 3 | 18 | 0 |
ciphertext (numbers) | 25 | 8 | 2 | 21 | 19 | 22 | 16 | 13 | 6 | 17 | 25 | 6 | 21 | 19 | 22 | 0 | 21 |
plaintext | w | e | a | r | e | d | i | s | c | o | v | e | r | e | d | s | a |
ciphertext (letters) | Z | I | C | V | T | W | Q | N | G | R | Z | G | V | T | W | A | V |
keyword | e | d | e | c | e | p | t | i | v | e |
---|---|---|---|---|---|---|---|---|---|---|
key | 4 | 3 | 4 | 2 | 4 | 15 | 19 | 8 | 21 | 4 |
plaintext | 21 | 4 | 24 | 14 | 20 | 17 | 18 | 4 | 11 | 5 |
ciphertext (numbers) | 25 | 7 | 2 | 16 | 24 | 6 | 11 | 12 | 6 | 9 |
plaintext | v | e | y | o | u | r | s | e | l | f |
ciphertext (letters) | H | C | Q | Y | G | L | M | G | J |
La forza di questo cifrario è che ci sono più lettere cifrate per ogni lettera in chiaro. Infatti la lettera a per esempio è cifrata come la lettera c, ma anche come la lettera v. Da questo primo esempio potrebbe sembrare che non vi sia alcuna corrispondenza (statistica) tra le lettere in chiaro e quelle cifrate. In realtà non del tutto.
Vediamo un metodo per attaccare questo cifrario: ciò che torna utile nel caso di un cifrario di Vigenére è di cercare di capire quanto è lunga la chiave.
Se due sequenze identiche di testo in chiaro occorrono ad un certa distanza, esse genereranno lo stesso testo cifrato.
Notiamo che la r si ripete dopo un certo numero di lettere: 9. Stessa cosa vale per la e e la d.
Di conseguenza in entrambi i casi, r è crittata come e, e come p e d come t. In entrambi i casi i gruppi di lettere sono sostituite con la sequenza VTW. Il fatto che queste due sequenze si ripetono dopo 9 caratteri porta un analista ad assumere che la lunghezza della chiave sia di 9 caratteri. Se il testo è abbastanza lungo, ci saranno più sequenze di lettere che si ripetono e ciò porterà a trovare che la parola chiave è DECEPTIVE.
Il problema di sequenze di lettere che si ripetono dopo un certo numero di lettere è utilizzare chiavi che non si ripetono: invece di DECEPTIVE usare DECEPTIVEWEAREDISCOVEREDSAV
key: | DECEPTIVEWEAREDISCOVEREDSAV |
---|---|
plaintext: | wearediscoveredsaveyourself |
ciphertext: | il risultato è diverso |
Anche questo schema è vulnerabile alla critto-analisi. Perché la chiave e il testo in chiaro condividono la stessa frequenza di distribuzione di lettere.