Szyfr XOR – rodzaj szyfru symetrycznego wykorzystującego operację alternatywy rozłącznej (XOR, ) do szyfrowania danych. Należy do najprostszych szyfrów strumieniowych i stanowi podstawę wielu bardziej zaawansowanych algorytmów kryptograficznych.
Dla wiadomości , klucza oraz szyfrogramu szyfrowanie definiuje się wzorem: ,
natomiast odszyfrowanie: .
Wynika to z własności operacji XOR: , , .
Jeżeli klucz jest losowy i ma długość wiadomości, szyfr XOR staje się jednorazowym szyfrem Vernama, który jest teoretycznie niemożliwy do złamania.
Przykład Napis „Hello world!”:
01001000 01100101 01101100 01101100 01101111 00100000 01110111 01101111 01110010 01101100 01100100 00100001
Klucz „WIKI” (powtarzany):
01010111 01001001 01001011 01001001 01010111 01001001 01001011 01001001 01010111 01001001 01001011 01001001
Szyfrogram (XOR):
00011111 00101100 00100111 00100101 00111000 01101001 00111100 00100110 00100101 00100101 00101111 01101000
Ponowne wykonanie operacji XOR tym samym kluczem („WIKI”) przywraca wiadomość pierwotną „Hello world!”.
Implementacja Przykład implementacji w języku Python:
def xor(text: str, shift: str, string: bool = False): text = text.encode() shift = shift.encode() length = len(shift) result = [ j ^ shift[i % length] for i, j in enumerate(text) ] return ''.join(map(chr, result)) if string else result
Powyższa implementacja wykorzystuje cykliczne powtarzanie klucza: ,
gdzie oznacza długość klucza.
Bezpieczeństwo Jeżeli klucz jest krótszy od wiadomości i zostaje wielokrotnie powtórzony, szyfr XOR może zostać złamany metodą analizy częstości.
Szczególnie niebezpieczna jest sytuacja, gdy część tekstu jawnego jest znana. Wówczas: ,
co pozwala bezpośrednio odzyskać fragment klucza.
Pomimo niewielkiego bezpieczeństwa prosty szyfr XOR jest często wykorzystywany: w obfuskacji danych, w prostych programach złośliwych, w szyfrach strumieniowych, jako element bardziej złożonych algorytmów kryptograficznych. Przypisy
Kategoria:Szyfry Kategoria:Szyfry strumieniowe