Szyfr Beaufort'a

Nazwa tego szyfru pochodzi od angielskiego admirała Francis'a Beaufort'a, żyjącego na przełomie XVIII i XIX wieku.

Zastosowanie

Szyfr Beaufort'a to prosty szyfr wieloalfabetowy używający specjalnej tabeli zwanej tabula recta, po raz pierwszy użytej w szyfrze Trithemius'a. Nie należy go mylić z odmianą szyfru Vigenère'a o nazwie Wariant Beaufort'a.

The Beaufort cipher was used in rotor-based cipher machines Hagelin M-209 in the middle of the 20th century.

Algorytm

Szyfr Beaufort'a opiera się w swoim działaniu na specjalnej tabeli, nazywanej tabula recta.

tabula recta
Tabula Recta

W trakcie szyfrowania, kolejne litery tekstu jawnego zamieniane są na inne litery wybrane na podstawie tabeli tabula recta. Obie komunikujące się strony dysponują tym samym sekretnym kluczem, którym może być jedno lub parę słów. Litery sekretnego klucza również wykorzystywane są w algorytmie pojedynczo, jedna po drugiej. Każda litera sekretnego klucza używana jest do zakodowania jednej litery wiadomości. Po wyczerpaniu się liter klucza, wraca się do pierwszej litery klucza i wykorzystuje się je od początku.

Proces szyfrowania przestawiony jest poniżej. Dla każdej litery tekstu jawnego wykonywane są następujące operacje, przy wykorzystaniu jednej litery sekretnego klucza:

  1. Znajdź aktualnie szyfrowaną literę w najwyższym poziomym wierszu.
  2. Posuwaj się wzdłuż znalezionej kolumny w dół, aż do napotkania aktualnie używanej litery klucza.
  3. Nową literą szyfrogramu jest skrajnie lewa litera (litera w pierwszej kolumnie tabeli) w znalezionym wierszu.

Deszyfrowanie szyfrogramu odbywa się za pomocą dokładnie takiego samego algorytmu. Powtórnie szyfrując szyfrogram, otrzymuje się oryginalny tekst jawny. Szyfry posiadające taką właściwość nazywa się szyframi obustonnymi (ang. reciprocal ciphers).

Siła Szyfru Beaufort'a

Szyfrogram utworzony przez szyfr Beaufort'a może być łatwo przekształcony do postaci szyfrogramu tworzonego przez szyfr Vigenère'a. Można tego dokonać zmieniając każdą literę szyfrogramu na jej odwrotną literę (czyli litera a zmieniana jest na z, litera b na y itd.). Po takiej zamianie, można analizować szyfrogram stosując wszystkie znane metody ataku na szyfr Vigenère'a.

Implementacja

Prosta funkcja szyfrująca/deszyfrująca zaimplementowana w Pythonie:

def szyfruj_lub_deszyfruj(key, input_txt):
  output_txt = []
  for pos in range(0, len(input_txt)):
    letter_row = 'A'
    letter_txt = input_txt[pos]
    while letter_txt != key[pos%len(key)]:
      letter_txt = chr((ord(letter_txt)-ord('A')+1)%26
                + ord('A'))
      letter_row = chr((ord(letter_row)-ord('A')+1)%26
                + ord('A'))
    output_txt.append(letter_row)
  return ''.join(output_txt)