Введение
Шифровальный алгоритм
В криптографии простой XOR-шифр является типом аддитивного шифра, алгоритмом шифрования, который работает по следующим принципам:
In cryptography, the simple XOR cipher is a type of additive cipher, an encryption algorithm that operates according to the principles:
A ⊕ 0 = A,
A ⊕ A = 0,
A ⊕ B = B ⊕ A,
(A ⊕ B) ⊕ C = A ⊕ (B ⊕ C),
(B ⊕ A) ⊕ A = B ⊕ 0 = B,
A A = 0,
A B = B A,
(A B) C = A (B C),
(B A) A = B 0 = B,
где ⊕ обозначает операцию исключающего ИЛИ (XOR). Эта операция иногда называется сложением по модулю 2 (или вычитанием, что эквивалентно). Используя эту логику, строку текста можно зашифровать, применяя побитовую операцию XOR к каждому символу с использованием заданного ключа. Для расшифровки достаточно повторно применить функцию XOR с тем же ключом, чтобы снять шифрование.
Использование и безопасность
Оператор XOR чрезвычайно распространен как компонент в более сложных шифрах. Сам по себе, при использовании постоянного повторяющегося ключа, простой шифр XOR может быть тривиально взломан с помощью частотного анализа. Если содержимое какого-либо сообщения можно угадать или иным образом узнать, то ключ может быть раскрыт. Его главное достоинство заключается в простоте реализации и в том, что операция XOR вычислительно недорога. Поэтому простой повторяющийся шифр XOR (то есть использующий один и тот же ключ для операции XOR над всем объемом данных) иногда применяется для сокрытия информации в случаях, когда не требуется высокой степени защиты. Шифр XOR часто используется во вредоносном программном обеспечении для усложнения обратной разработки. Если ключ случайный и его длина не меньше длины сообщения, шифр XOR значительно безопаснее, чем при повторении ключа внутри сообщения. Когда ключевой поток генерируется генератором псевдослучайных чисел, результатом является поточный шифр. При использовании действительно случайного ключа получается одноразовый шифр, который теоретически не поддается взлому. Оператор XOR в любом из этих шифров уязвим к атаке по известному открытому тексту, поскольку открытый текст XOR шифротекст = ключ. Также тривиально изменить произвольные биты в расшифрованном тексте, манипулируя шифротекстом. Это называется изменяемостью.