Vigenèrova šifra je komplexnější šifra, jedná se o polyalfabetickou šifru využívající jako klíč slovo různé délky. Šifruje se pomocí Vigenèrova čtverce.

Vigenèrova šifra

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í.

Šifrování a dešifrování

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

Ukázka

Zašifrujeme větu TOTO JE VIGENEROVA SIFRA klíčem HESLO.

Šifruj("TOTO JE VIGENEROVA SIFRA")
TOTOXJEXVIGENEROVAXSIFRA
HESLOHESLOHESLOHESLOHESL
ASLZLQIPGWNIFPFVZSIGPJJL
ASLZLQIPGWNIFPFVZSIGPJJL

Algoritmus

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);
    

Kryptoanalýza

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.

Vernamova šifra

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á.

Implementace Vernamovy šifry

Š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.