Коммутативность XOR и mod



Итак, исследуя хэш-функции, я заметил следующее уравнение:



((129*N)^prev)%256 = ((129*N)%256)^prev



Для любого числа N, prev между 0 и 255. В принципе, вы можете перетащить операцию mod, не изменяя результат, и это работает только для числа 129. Может быть, кто-нибудь скажет мне, что такого особенного в 129?

685   3  

3 ответов:

Это легче увидеть, если вы интерпретируете это по модулю 256 как побитовое и 255, или другими словами, сохраняя только наименее значимые 8 бит.

Очевидно, что XOR не заставляет информацию от старших битов перемещаться к младшим битам (на самом деле нет никакого перемещения ни в том, ни в другом направлении), поэтому все, что происходит "там", не может иметь никакого значения для младших битов. Это могло бы иметь значение для старших битов (которые XOR может установить, а затем в зависимости от того, является ли и происходит первый или второй, эти биты соответственно сохраняются установленными или сброшенными), но по предположению, что здесь не может произойти.

Алгебраически и распределяет по XOR, поэтому

(a ^ b) & c =
& distributes over ^
(a & c) ^ (b & c)

И у нас есть это b & c = b, потому что c равно 255, а b находится между 0 и 255, поэтому

(a & c) ^ (b & c) =
by assumptions
(a & c) ^ b
Это не связано с умножением, это могло быть буквально что угодно, я только что назвал эту часть a здесь.

При работе с модульной арифметикой случается, что

(a*b) mod m = ((a mod m) * (b mod m)) mod m

Если применить это свойство к b = a

a^2 mod m = (a mod m)^2 mod m

И повторяя одно и то же n раз

a^n mod m = (a mod m)^n mod m

И поскольку это справедливо для любого значения a, мы также получаем

(a*b)^n mod m = (a*b mod m)^n mod m
Таким образом, свойство является действительным независимо от того, является ли m 256 или нет и a 129 или нет.

Однако есть нечто совершенно особенное в 129, поскольку 1, 127, 129 и 255 являются единственными остатками mod 256, такими что r * r = 1 mod 256. Отметим также, что 255 = -1 (mod 256) и 127 = -129 mod 256.

Exclusive или работает точно так же, как сложение по модулю 2.

Https://en.wikipedia.org/wiki/Exclusive_or

Comments

    Ничего не найдено.