Szyfr Vernama, szyfr doskonały, szyfr One-time pad lub OTP jest to szyfr należący do grupy szyfrów polialfabetycznych. Uważany jest za jedyną sprawdzoną metodę kryptograficzną, która umożliwia bezwarunkowo bezpieczne szyfrowanie, co zostało udowodnione matematycznie. Wynaleziony został w 1882 roku, a zaproponowany w 1917 roku przez Gilberta Vernama z AT&T.
Przypomina szyfr Cezara, ale nie przesuwa liter o taką samą liczbę miejsc, lecz każdą o losową liczbę i kierunek.
Szyfr Vernama występuje w wersji binarnej i znakowej. W wersji binarnej szyfrujemy/deszyfrujemy korzystając z algorytmu Xor. Natomiast w wersji znakowej szyfrujemy/deszyfrujemy korzystając z szyfru Vigenere`a.
Aby szyfr był szyfrem doskonałym klucz kodujący powinien spełniać trzy warunki:
- musi być ciągiem losowym;
- musi być jednorazowy;
- długość klucza musi być przynajmniej tak samo długa jak długość szyfrowanego tekstu.
Dla przykładu użycia szyfru Vernama załóżmy, że Ewa chce wysłać tajną wiadomość CALCOOLATOR do Adama. Wcześniej oboje dostali kartki z identycznymi kluczami. Ewa wybiera odpowiednią kartkę z kluczem. Sposób wybrania tej kartki jest zwykle ustalany z wyprzedzeniem, na przykład "użyj 5 kartki w dni 3 marca" lub "użyj następnej dostępnej kartki dla następnej wiadomości".
Każda litera z klucza zostanie połączona w określony sposób z jedną literą wiadomości. Często, ale nie jest to wymagane, każdej literze przypisywana jest wartość liczbowa (w kolejności alfabetycznej) np. 'A' to 0, 'B' to 1, 'C' to 2 itd.
Technika kodowania polega na połączeniu klucza i wiadomość za pomocą dodawania modułowego. Wartości liczbowe odpowiadających im wiadomości i liter są dodawane razem, modulo 26 (dla alfabetu łacińskiego).
Załóżmy, że tajny klucz to MWZYOWBXNIW wówczas kodowanie słowa CALCOOLATOR zostanie wykonane w następujący sposób:
C A L C O O L A T O R wiadomość
2(C) 0(A) 11(L) 2(C) 14(O) 14(O) 11(L) 0(A) 19(T) 14(O) 17(R) nr litery
+ 12(M) 22(W) 25(Z) 24(Y) 14(O) 22(W) 1(B) 23(X) 13(N) 8(I) 22(W) klucz
= 14 22 36 26 28 36 12 23 32 22 39 wiadomość+klucz
= 14(O) 22(W) 10(K) 0(A) 2(C) 10(K) 12(M) 23(X) 6(G) 22(W) 13(N)(wiadomość+klucz) mod 26
O W K A C K M X G W N szyfr
Litery ponumerowaliśmy od 0 do 25 (26 liter w alfabecie łacińskim od A do Z). Jeżeli podczas szyfrowania w wyniku dodawania wyjdzie nam liczba większa niż 25 wówczas "przekręcamy licznik" od zera tzn. 26->0 czyli A, 27->1 czyli B, 28->2 czyli C itd.
W wyniku kodowania słowa CALCOOLATOR przy pomocy klucza MWZYOWBXNIW Ewa otrzymałaby szyfr OWKACKMXGWN.
Aby odkodować szyfrogram Adam musi wykonać podobne czynności co Ewa z tym, że zamiast dodawania musi odjąć wartości.
O W K A C K M X G W N szyfrogram
14(O) 22(W) 10(K) 0(A) 2(C) 10(K) 12(M) 23(X) 6(G) 22(W) 13(N) szyfr
- 12(M) 22(W) 25(Z) 24(Y) 14(O) 22(W) 1(B) 23(X) 13(N) 8(I) 22(W) klucz
= 2 0 -15 -24 -12 -12 11 0 -7 14 -9 szyfr-klucz
2(C) 0(A) 11(L) 2(C) 14(O) 14(O) 11(L) 0(A) 19(T) 14(O) 17(R) wiadomość
C A L C O O L A T O R wiadomość
Jeżeli wynik odejmowania jest ujemny wówczas od liczby 26 odejmujemy wynik np. wynik to -7 więc 26-7=19 czyli litera T.
Więcej na: Wikipedia - Szyfr Playfair