Je typický představitel polyalfabetické substituční šifry. Na rozdíl od většiny triviálních klasických kryptosystémů umožňuje využívat komplexní klíč (libovolný řetězec, v podstatě standardní heslo). Její kryptoanalýza není triviální záležitost (a nemusí být vůbec možná). Byla popsána zhruba v 16. století.
Provádí se pomocí tzv. Vigenèrova čtverce. Vstupní slovo a slovo klíče se napíše pod sebou a hledá se průnik ve čtverci, ten představuje výstupní symbol.
| - | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| A | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
| B | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A |
| C | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B |
| D | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C |
| E | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D |
| F | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E |
| G | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F |
| H | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G |
| I | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H |
| J | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I |
| K | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J |
| L | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K |
| M | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L |
| N | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M |
| O | O | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N |
| P | P | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
| Q | Q | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P |
| R | R | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q |
| S | S | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R |
| T | T | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S |
| U | U | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T |
| V | V | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U |
| W | W | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V |
| X | X | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W |
| Y | Y | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X |
| Z | Z | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y |
Zašifrujeme větu TOTO JE VIGENEROVA SIFRA klíčem HESLO.
| Šifruj("TOTO JE VIGENEROVA SIFRA") | → |
|
→ | ASLZLQIPGWNIFPFVZSIGPJJL |
Zamyslete se nad tím, jak funguje následující algoritmus realizující Vigenèrovu šifru v jazyce Python.
def vigenereRectangle(char, key):
return chr( (( (ord(key) - 97) + (ord(char) - 97) ) % 26) + 97 );
word = "totoxjexvigenerovaxsifra";
key = "heslo";
cipher = "";
for i in range(0, len(word)):
cipher = cipher + vigenereRectangle(word[i],key[i%len(key)]);
print(cipher);
Je proveditelná na větším souboru dat s využitím frekvenční analýzy. Obvykle se odhaduje délka klíče a pak se provádí frekvenční analýza pro jednotlivé části. Další způsob kryptoanalýzy je odhad části zprávy, pokud je správný, je možný dopočíst příslušnou část klíče.
Představuje speciální případ Vigenèrovy šifry, odlišuje se tím, že klíč musí mít právě tolik znaků jako šifrovaná zpráva. Pokud je klíč této šifry vygenerován zcela náhodným způsobem a je využit při šifrování právě jednou (tj. neopakuje se pro více zpráv), je Vernamova šifra absolutně bezpečná, tj. neexistuje kryptoanalytická metoda, která by ji dokázala úspěšně vyřešit. Tato šifra byla oblíbená za studené války, kdy jednotliví špióni měli k dispozici kódové knihy obsahující klíč coby náhodný řetězec znaků. Poté, co využili některou stránku z kódové knihy, ji museli vytrhnout a spálit. Pokud neudělal špión chybu (jako, že by využil stejný klíč dvakrát), byla pro kryptoanalytiky zpráva zcela nerozluštitelná.
Šifru lze snadno implementovat s využitím bitové operace XOR (tj. nonekvivalence), blíže viz sekce bitové operace. Šifrování spočívá v operaci hodnota klíče na dané pozici XOR hodnota zprávy na téže pozici. Přesně stejným způsobem se provádí i dešifrování zprávy.