Операция XOR (exclusive OR) – это логическая и побитовая операция, которая принимает два аргумента и возвращает результат. В программировании и криптографии она чаще всего обозначается символом ^.
В отличие от обычного «ИЛИ», исключающее «ИЛИ» возвращает истину (1) только тогда, когда один из битов равен 1, но не оба одновременно.
Таблица истинности операции XOR:
- Если A = 0 и B = 0, то Результат (A ^ B) = 0
- Если A = 1 и B = 0, то Результат (A ^ B) = 1
- Если A = 0 и B = 1, то Результат (A ^ B) = 1
- Если A = 1 и B = 1, то Результат (A ^ B) = 0
Поскольку компьютеры хранят любые данные (текст, картинки, ключи) в виде байт и битов, операция ^ применяется к соответствующим друг другу битам параллельно.
Самая удивительная и красивая особенность XOR заключается в том, что эта операция является одновременно и алгоритмом шифрования, и алгоритмом расшифрования. XOR всегда может расшифровать сам себя!
Давайте проверим это на числах. Представим, что мы хотим зашифровать наше секретное число 3 (в двоичной системе 011), а в качестве ключа возьмем число 7 (111).
- Шифрование:
3 ^ 7 = 4(в двоичной системе011 ^ 111 = 100). Наш зашифрованный текст – 4. - Расшифрование: Применим тот же ключ к результату:
4 ^ 7 = 3(в двоичной системе100 ^ 111 = 011). Мы вернулись к исходному числу!
Любые данные в мире, пропущенные через XOR с одним и тем же ключом дважды, возвращаются в исходное состояние: (A ^ B) ^ B = A.
Бит за битом – вот как в действительности шифруются данные в вашем браузере, в дисковых хранилищах и безопасных мессенджерах вроде Signal или WhatsApp. Нет никакого перемешивания букв, есть только XOR-инг.
Но тут возникает главная сложность: где взять бесконечный поток случайных данных для ключа?
- Если использовать один короткий ключ циклически, в зашифрованном тексте появятся паттерны (закономерности), и шифр легко взломают.
- Использовать ключ длиной со все сообщение (Шифр Вермана) – слишком неудобно, такие объемы данных тяжело передавать.
Поэтому современные симметричные алгоритмы (такие как AES или ChaCha20) – это, по сути, сложные математические генераторы детерминированного случайного потока данных. Они берут маленький секретный ключ, разворачивают его в огромную «случайную» последовательность битов и затем делают XOR с вашим текстом.
Ниже представлен простой код на языке Python, демонстрирующий, как работает побитовое шифрование текста операцией XOR: