после операции XOR найдите C (и обратимость XOR) - PullRequest
0 голосов
/ 28 мая 2010

Предположим:

unsigned char A = 10;
unsigned char B = 11;
unsigned char C = 12;


unsigned char Diff1 = A ^ B;
unsigned char Diff2 = B ^ C;

//find any of A or B or C using Diff1 and Diff2

Вопрос: изначально было 3 значения, для которых мы нашли 2 различия. Есть ли какой-нибудь способ, которым мы можем найти любой из A или B или C, используя 2 различия Diff1 и Diff2?

Я знаю, что XOR необратим, если вы не знаете ключ, но с учетом того, что беззнаковое __int8 составляет 0 ... 255 максимум 256 различных значений.

оставайся здоровым.

1 Ответ

7 голосов
/ 28 мая 2010

У вас недостаточно информации, чтобы найти A, B или C, если вы просто знаете значения Diff1 и Diff2.

Имеется 256 ** 3 различных возможных входа и только 256 ** 2 возможных выхода, поэтому для каждого выхода есть 256 различных возможных входов, которые могли бы дать этот выход - где A, B и C могут принимать любое значение. Но как только вы знаете один из них, вы можете вычислить два других.

Фактически вы дважды используете шифрование XOR на открытом тексте (B) с двумя отдельными неизвестными ключами (A и C). Шифрование XOR, по-видимому, невозможно изменить - в выводе нет никакой полезной информации (при условии, что ключ выбран случайным образом и никогда не используется повторно).

Вы можете найти A XOR C хотя:

Diff1 ^ Diff2
...