Szyfr Vigenère’a jest to jeden z klasycznych algorytmów szyfrujących. Należy on do grupy tzw. polialfabetycznych szyfrów podstawieniowych. Szyfr ten błędnie został przypisany twórcy bardziej skomplikowanego szyfru Blaise’owi de Vigenère.
Szyfr, który obecnie nazywamy szyfrem Vigenère’a, po raz pierwszy został opisany przez Giovana Batista Belaso w 1553, w broszurze zatytułowanej La cifra del. Sig. Giovan Batista Belaso.
Działanie szyfru Vigenère’a oparte jest na tablicy kodowej:
| ABCD EFGH IJKL MNOP QRST UVWX YZ
A | ABCD EFGH IJKL MNOP QRST UVWX YZ
B | BCDE FGHI JKLM NOPQ RSTU VWXY ZA
C | CDEF GHIJ KLMN OPQR STUV WXYZ AB
D | DEFG HIJK LMNO PQRS TUVW XYZA BC
E | EFGH IJKL MNOP QRST UVWX YZAB CD
F | FGHI JKLM NOPQ RSTU VWXY ZABC DE
G | GHIJ KLMN OPQR STUV WXYZ ABCD EF
H | HIJK LMNO PQRS TUVW XYZA BCDE FG
I | IJKL MNOP QRST UVWX YZAB CDEF GH
J | JKLM NOPQ RSTU VWXY ZABC DEFG HI
K | KLMN OPQR STUV WXYZ ABCD EFGH IJ
L | LMNO PQRS TUVW XYZA BCDE FGHI JK
M | MNOP QRST UVWX YZAB CDEF GHIJ KL
N | NOPQ RSTU VWXY ZABC DEFG HIJK LM
O | OPQR STUV WXYZ ABCD EFGH IJKL MN
P | PQRS TUVW XYZA BCDE FGHI JKLM NO
Q | QRST UVWX YZAB CDEF GHIJ KLMN OP
R | RSTU VWXY ZABC DEFG HIJK LMNO PQ
S | STUV WXYZ ABCD EFGH IJKL MNOP QR
T | TUVW XYZA BCDE FGHI JKLM NOPQ RS
U | UVWX YZAB CDEF GHIJ KLMN OPQR ST
V | VWXY ZABC DEFG HIJK LMNO PQRS TU
W | WXYZ ABCD EFGH IJKL MNOP QRST UV
X | XYZA BCDE FGHI JKLM NOPQ RSTU VW
Y | YZAB CDEF GHIJ KLMN OPQR STUV WX
Z | ZABC DEFG HIJK LMNO PQRS TUVW XY
Jak można zauważyć, każdy z wierszy tablicy odpowiada szyfrowi Cezara, przy czym w pierwszym wierszu przesunięcie wynosi 0, w drugim 1 itd.
Aby zaszyfrować jakiś tekst, potrzebne jest hasło. Hasło mówi, z którego wiersza (lub kolumny) należy w danym momencie skorzystać.
Przypuśćmy, że chcemy zaszyfrować prosty tekst, np.:
TO JEST BARDZO TAJNY TEKST
Do tego celu użyjemy znanego tylko nam hasła, np.: TAJNE
Na początku zauważamy, że użyte hasło jest zbyt krótkie, by wystarczyło do zaszyfrowania całego tekstu, więc należy użyć jego wielokrotności. Będzie to miało następującą postać:
Wiadomość: TO JEST BARDZO TAJNY TEKST
Hasło: TA JNET AJNETA JNETA JNETA
Szyfrowanie wykonujemy w następujący sposób: litera szyfrogramu odpowiada literze z tabeli znajdującej się na przecięciu wiersza, wyznaczanego przez literę tekstu jawnego i kolumny wyznaczanej przez literę hasła, np. po kolei „T” i „T” daje „M”, „O” i „A” daje „O” itd. W efekcie otrzymujemy zaszyfrowany tekst:
MO SRWM BJEHSO CNNGY CROLT
Warto zauważyć, że tak naprawdę nie ma znaczenia, czy litera tekstu jawnego będzie wyznaczała wiersz, a słowa kluczowego kolumnę, czy na odwrót, efekt szyfrowania będzie zawsze taki sam.
Odszyfrowywanie przebiega bardzo podobnie. Bierzemy kolejne litery szyfrogramu oraz odpowiadające im litery słowa kluczowego (podobnie, jak przy szyfrowaniu). Wybieramy kolumnę odpowiadającą literze słowa kluczowego. Następnie w tej kolumnie szukamy litery szyfrogramu. Numer wiersza odpowiadający znalezionej literze jest numerem litery tekstu jawnego. Np. w kolumnie 'T' litera „M” znajduje się w wierszu 'T', w kolumnie 'A' litera „O” znajduje się w wierszu 'O' itd.
Istnieje jednakże prostszy, szczególnie dla celów implementacyjnych, sposób deszyfrowania. Wymaga on wykonania prostej operacji „odwrócenia” hasła, jak poniżej:
- K2(i) = [26 – K(i)] mod 26
gdzie K(i) – kolejna litera hasla, numerowane A=0, B=1 itd., a K2(i) – kolejna litera hasła „odwróconego”. 26 oznacza liczbę liter alfabetu łacińskiego.
Efektem działania takiego przekształcenia dla hasła „TAJNE” będzie słowo „HARNW”.
Następnie należy na szyfrogramie wykonać operację szyfrowania z otrzymanym hasłem. Wynikiem, jak można się przekonać, będzie postać jawna tekstu.
Korzystając z wersji z kluczem alfabetu pierwszy wiersz tabeli kodowej będzie miał postać alfabetu z kluczem. Klucz jest dopisywany do alfabetu bez powtarzania znaków.
Niech naszym kluczem alfabetu będzie słowo KLUCZ. Dodajemy je np. na początku alfabetu. Nasz alfabet z kluczem będzie miał teraz postać:
KLUCZABDEFGHIJMNOPQRSTVWXY
Natomiast tabela kodowa z kluczem będzie wyglądała następująco:
| KLUC ZABD EFGH IJMN OPQR STVW XY
K | KLUC ZABD EFGH IJMN OPQR STVW XY
L | LUCZ ABDE FGHI JMNO PQRS TVWX YK
U | UCZA BDEF GHIJ MNOP QRST VWXY KL
C | CZAB DEFG HIJM NOPQ RSTV WXYK LU
Z | ZABD EFGH IJMN OPQR STVW XYKL UC
A | ABDE FGHI JMNO PQRS TVWX YKLU CZ
B | BDEF GHIJ MNOP QRST VWXY KLUC ZA
D | DEFG HIJM NOPQ RSTV WXYK LUCZ AB
E | EFGH IJMN OPQR STVW XYKL UCZA BD
F | FGHI JMNO PQRS TVWX YKLU CZAB DE
G | GHIJ MNOP QRST VWXY KLUC ZABD EF
H | HIJM NOPQ RSTV WXYK LUCZ ABDE FG
I | IJMN OPQR STVW XYKL UCZA BDEF GH
J | JMNO PQRS TVWX YKLU CZAB DEFG HI
M | MNOP QRST VWXY KLUC ZABD EFGH IJ
N | NOPQ RSTV WXYK LUCZ ABDE FGHI JM
O | OPQR STVW XYKL UCZA BDEF GHIJ MN
P | PQRS TVWX YKLU CZAB DEFG HIJM NO
Q | QRST VWXY KLUC ZABD EFGH IJMN OP
R | RSTV WXYK LUCZ ABDE FGHI JMNO PQ
S | STVW XYKL UCZA BDEF GHIJ MNOP QR
T | TVWX YKLU CZAB DEFG HIJM NOPQ RS
V | VWXY KLUC ZABD EFGH IJMN OPQR ST
W | WXYK LUCZ ABDE FGHI JMNO PQRS TV
X | XYKL UCZA BDEF GHIJ MNOP QRST VW
Y | YKLU CZAB DEFG HIJM NOPQ RSTV WX
Pozostałe czynności szyfrowania/deszyfrowania wykonujemy tak samo jak w wersji bez klucza alfabetu wykorzystując do tego tabele kodową z kluczem.
Oczywistym jest, że dodanie klucza alfabetu zwiększa bezpieczeństwo szyfrogramu. Ponieważ do odkodowania oprócz hasła niezbędne jest posiadanie również klucza alfabetu.
Więcej na: Wikipedia - Szyfr Vigenère’a