| определение | a ⊕ b = 1, если a ≠ b · = 0, если a = b |
| таблица | 0⊕0=0 · 0⊕1=1 · 1⊕0=1 · 1⊕1=0 |
| свойства | коммутативен · ассоциативен · a⊕a = 0 · a⊕0 = a |
| применение | шифр Вернама · контрольные суммы · нейросети · квантовые вентили |
| трюк | swap без третьей переменной: a⊕=b; b⊕=a; a⊕=b |
| связано | mod · криптография · комплексные числа |
Оператор, который шифрует и раскрывает одним движением.
XOR симметричен: то, что зашифровал, он же и расшифрует. это делает его идеальным для криптографии.
Возьмите любое число a и ключ k. Вычислите c = a ⊕ k — зашифровано. Теперь c ⊕ k = a — расшифровано. Тот же оператор, тот же ключ. Это шифр Вернама — единственный известный шифр, теоретически абсолютно стойкий.
Клод Шэннон доказал это в 1949 году: если ключ случаен, длиннее сообщения и используется ровно один раз — шифр нераскрываем. Не «очень сложно раскрыть», а математически невозможно: при любой попытке расшифровки с другим ключом получается осмысленный текст той же длины, и нет способа отличить настоящий от подделки1.
Шифр Вернама нераскрываем — это не эмпирика, это теорема. — Шэннон, 1949
XOR устроен иначе, чем обычное сложение. Для арифметики: 1 + 1 = 2. Для XOR: 1 ⊕ 1 = 0. Переноса нет. Каждый бит независим от соседей. Это делает XOR молниеносным — один такт процессора, без сложных схем переноса. И именно поэтому XOR используется в чек-суммах, хешах, контроле чётности — везде, где нужна быстрая обратимая операция над битами.
Знаменитый трюк со свапом: поменять местами a и b без третьей переменной. `a ^= b; b ^= a; a ^= b;` — три строки, ноль дополнительной памяти2. В эпоху, когда каждый байт памяти был на вес золота, это имело значение. Сегодня — историческая красота.
В квантовых вычислениях XOR — это вентиль CNOT (controlled NOT), один из базовых квантовых вентилей. Без него не построить запутанность; без запутанности нет квантового алгоритма3. Простой логический оператор оказался фундаментом квантового компьютера.
В симметрии XOR есть особая красота: он сам себе обратный. f(f(x)) = x. Таких операторов мало.