ου γαρ εστιν κρυπτον ο ου φανερον γενησεται ουδε αποκρυφον ο ου γνωσθησεται και εις φανερον ελθη
Wersja PL ENG Version

Prosty szyfr XOR

  • Ogólny opis
  • Algorytm
  • Implementacja
Prosty szyfr XOR był popularny we wczesnych czasach komputerów, w systemach operacyjnych MS-DOS i Macintosh.
Wieloalfabetowy szyfr podstawieniowy
Pomimo niedużej siły zapewnianego bezpieczeństwa, proste szyfrowanie XOR było wykorzystywane w wielu komercyjnych aplikacjach ze względu na dużą szybkość działania i prostotę zaimplementowania.

Prosty szyfr XOR jest odmianą szyfru Vigenère'a. Różni się od niej tym, że zamiast manipulować na literach i znakach, zmienia bity i bajty elektronicznej wiadomości przechowywanej w pamięci komputera.

Zamiast dodawać do siebie dwie litery alfabetu, jak w oryginalnej wersji szyfru Vigenère'a, w szyfrze XOR algorytm sumuje kolejne bajty tekstu jawnego i sekretnego klucza o dowolnej długości za pomocą działania XOR. Po wykorzystaniu ostatniego bajtu klucza, przechodzi się z powrotem do pierwszego bajtu (analogicznie jak w klasycznej wersji).

W celu odszyfrowania postępuje się w taki sam sposób, czyli dodaje się kolejne bajty klucza do kolejnych bajtów szyfrogramu za pomocą operacji XOR.

Szyfrowanie i deszyfrowanie można przedstawić za pomocą następujących wzorów:
    M XOR K = C
    C XOR K = M

Siła prostego szyfru XOR

Prosty szyfrowanie XOR jest względnie łatwe do złamania. Jego zabezpieczenia nie są lepsze niż klasycznych szyfrów wieloalfabetowych. Przy użyciu komputera, odkrycie tekstu jawnego zajmuje stosunkowo niewiele czasu.

Pierwszym etapem łamania szyfru XOR jest zwykle wyznaczenie długości sekretnego klucza. Można tego dokonać wyliczając indeks koincydencji dla szyfrogramu.

Po wyznaczeniu długości klucza, należy zapisać ten sam szyfrogram w dwóch linijkach, jedna pod drugą, z tym, że bajty w dolnym wierszu są przesunięte względem bajtów w górnym wierszu o długość klucza. Następnie, po zsumowaniu XOR obu tekstów (dodając do siebie bajty znajdujące się w tych samych kolumnach) uzyskuje się ciąg bajtów, z którego wyeliminowano bajty sekretnego klucza.

Dzięki nadmiarowości informacji, zawartych w językach zapisanych w postaci binarnej za pomocą bajtów, można odszyfrować tekst jawny przy użyciu standardowych ataków polegających na analizie częstotliwości.

Aplikacja szyfrująca wskazany plik tekstowy za pomocą prostego sumowania XOR:

#include <stdio.h>

int main (int argc, char *argv[])
{
  FILE *fi, *fo;
  char *cp;
  int c;

  if ((cp = argv[1]) && *cp!='\0') {
    if ((fi = fopen(argv[2], "rb")) != NULL) {
      if ((fo = fopen(argv[3], "wb")) != NULL) {
        while ((c = getc(fi)) != EOF) {
          if (!*cp) cp = argv[1];
          c ^= *(cp++);
          putc(c,fo);
        }
        fclose(fo);
      }
      fclose(fi);
    }
  }
  return 0;
}

Użycie:
    nazwa_programu klucz plik_do_zaszyfrowania plik_wynikowy