Чому XOR використовується в криптографії?


76

Чому в криптографічних алгоритмах використовується лише XOR, а інші логічні шлюзи, такі як OR, AND та NOR, не використовуються?


6
Що змушує вас думати, що це так?
skaffman

1
Ви намагаєтеся запитати "чому криптографічні алгоритми використовують лише XOR?" Я використовував XOR в інших місцях ...
Остін Салонен

3
Остін, він не говорить, що XOR не використовується деінде, але XOR - єдиний, який використовується як метод шифрування

1
Keccak (нині SHA-2) використовує XOR, NOT, AND і ROT.
CodesInChaos

1
@Xz_awan Це не алгоритм шифрування . Це криптографічна хеш-функція і, отже, криптографічний алгоритм. Функція стиснення SHA-2 побудована з блокового шифру. | Але я припустився помилки у наведеному вище коментарі, хотів сказати "Кеккак (нині SHA-3) ...". На відміну від Keccak, SHA-2 використовує ADD на додаток до вищезазначених операцій.
CodesInChaos

Відповіді:


70

Не зовсім вірно стверджувати, що логічна операція XOR є єдиною, яка використовується у всій криптографії, проте це єдине двостороннє шифрування, де вона використовується виключно.

Ось що пояснюється:

Уявіть, що у вас є рядок двійкових цифр, 10101 і ви XOR-рядок 10111із ним отримаєте00010

тепер ваш вихідний рядок закодований, а другий рядок стає вашим ключем, якщо ви XOR ваш ключ із кодованим рядком, ви повернете свій оригінальний рядок.

XOR дозволяє легко шифрувати та дешифрувати рядок, інші логічні операції цього не роблять.

Якщо у вас довший рядок, ви можете повторювати свій ключ до тих пір, поки 1010010011він не стане достатньо довгим, наприклад, якщо ваш рядок був тоді, ви просто напишете свій ключ двічі, і він стане 1011110111та XOR його з новим рядком

Ось посилання на вікіпедію на шифрі XOR.



"Якщо у вас довший рядок, ви можете повторювати свій ключ до тих пір, поки він не стане достатньо довгим" - Не могли б ви, детальніше сказати це? Я думаю, що просто повторити ключ для шифрування більшого тексту - це дійсно погана ідея, оскільки шаблони починають з’являтися.
Тіаго

@Tiago: звичайно, якщо це повинно бути безпечним у будь-якому реальному сенсі, повторити ключ - це жахлива ідея. Класичний спосіб безпечного спілкування з XOR - це "одноразова панель". Ви та людина, з якою спілкуєтесь, маєте однакові копії довільно довгого блокнота із випадковими бітами. Ви відправляєте стільки бітів, скільки потрібно, щоб надіслати одне повідомлення, і спаліть цю частину панелі відразу після того, щоб більше ніколи не використовуватись. Це логістично нездійсненно здебільшого, тому на практиці потрібні розумніші методи. Шифри XOR можуть бути будівельними блоками для кращих методів.
Джошуа П. Суонсон

45

Я бачу 2 причини:

1) (Основна причина) XOR не передає інформацію про оригінальний відкритий текст.

2) (Приємна причина) XOR - це допоміжна функція , тобто, якщо ви застосуєте XOR двічі, ви отримаєте назад оригінальний відкритий текст (тобто XOR(k, XOR(k, x)) = x, де xваш відкритий текст і kваш ключ). Внутрішній XOR - це шифрування, а зовнішній XOR - це дешифрування, тобто саме таку ж функцію XOR можна використовувати як для шифрування, так і для дешифрування.

Для прикладу першого пункту розглянемо таблиці правди AND, OR та XOR:

І

0 І 0 = 0

0 І 1 = 0

1 І 0 = 0

1 І 1 = 1 (Витік!)

Або

0 АБО 0 = 0 (Витік!)

0 АБО 1 = 1

1 АБО 0 = 1

1 АБО 1 = 1

XOR

0 XOR 0 = 0

0 XOR 1 = 1

1 XOR 0 = 1

1 XOR 1 = 0

Все, що знаходиться в першому стовпці, є нашим введенням (тобто звичайним текстом) . Другий колонці наш ключ і останній стовпець є результатом вашого входу «змішаний» (зашифровано) за допомогою ключа з допомогою операції конкретної (тобто, зашифрованою) .

А тепер уявіть, що зловмисник отримав доступ до якогось зашифрованого байта, скажімо: 10010111 , і він хоче отримати оригінальний байт відкритого тексту.

Скажімо, оператор AND був використаний для того, щоб генерувати цей зашифрований байт із вихідного байту відкритого тексту. Якщо було використано AND, то ми точно знаємо, що кожного разу, коли ми бачимо біт '1' у зашифрованому байті, тоді вхід (тобто перший стовпець, звичайний текст) ПОВИНЕН бути також '1' відповідно до таблиці істинності І. Якщо натомість зашифрований біт має значення „0“, ми не знаємо, чи введеним (тобто звичайним текстом) є значення „0“ чи „1“. Отже, ми можемо зробити висновок, що оригінальний звичайний текст: 1 _ _ 1 _ 111. Отже, 5 біт оригінального звичайного тексту просочилися (тобто можна було отримати доступ без ключа).

Застосовуючи ту саму ідею до АБО, ми бачимо, що кожного разу, коли ми знаходимо «0» у зашифрованому байті, ми знаємо, що вхід (тобто звичайний текст) також повинен бути «0». Якщо ми знайдемо "1", тоді ми не знаємо, введене значення "0" чи "1". Отже, ми можемо зробити висновок, що вхідним текстом є: _ 00 _ 0 _ _ _. Цього разу нам вдалося просочити 3 біти оригінального байту простого тексту, нічого не знаючи про ключ.

Нарешті, за допомогою XOR ми не можемо отримати жодного біта вихідного байту відкритого тексту. Кожного разу, коли ми бачимо «1» у зашифрованому байті, це «1» могло бути згенеровано з «0» або з «1». Те саме з "0" (воно може походити як з "0", так і з "1"). Отже, жоден біт не витікає з вихідного байту відкритого тексту.


34

Основна причина полягає в тому, що якщо випадкова величина з невідомим розподілом R1 XORed із випадковою величиною R2 з рівномірним розподілом, то результат є випадковою величиною з рівномірним розподілом, тому в основному ви можете легко рандомізувати зміщений вхід, що неможливо з іншими двійковими операторами.


1
Цей момент справді важливий - оскільки він діє для будь-якого розподілу бітів у повідомленні. Біти в шифротексті завжди будуть рівномірно розподілені, гарантуючи, що статистичні методи криптоаналізу, такі як частотний аналіз, не можуть бути використані для розбиття шифру.
mistertim

1
Вам потрібно, щоб R1 і R2 були незалежними, щоб результат був рівномірним (простий приклад: R1 = R2).
Rlandster

@rlandster правильно, але я ніколи не згадував, що вони залежні? вони випадкові + R1 може бути упередженим, але R2
теоретично

2
Це найкраща відповідь тут. R1 взагалі не повинен бути випадковим, і R1 міг би дорівнювати R2. Поки R2 випадковий, результат неможливо відрізнити від випадкового. Ось чому XOR - улюбленець.
Джим Флуд

27

Вихід XOR завжди залежить від обох входів. Це не стосується інших операцій, про які ви згадали.


6

Я думаю, тому що XOR є оборотним. Якщо ви хочете створити хеш, тоді ви захочете уникати XOR.


Немає жодної причини, чому хеш повинен уникати оборотних операцій. Зазвичай основна частина хеш-функції є оборотною, і лише в підсумку застосовується незворотна операція. Часто ця незворотна операція повністю складається з XOR.
CodesInChaos

6

XOR - це єдиний шлюз, який використовується безпосередньо, оскільки незалежно від того, який це один вхід, інший вхід завжди впливає на вихід.

Однак це не єдині ворота, що використовуються в криптографічних алгоритмах. Це може бути справедливо для криптографії старої школи, типу, що включає тонни бітових перетасовок та XOR і обертові буфери, але для криптографії на основі простих чисел вам потрібні всі види математики, яка не реалізована через XOR.


4

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

210 XOR 145 gives you  67  <-- Your "scrambled" result
 67 XOR 145 gives you 210  <-- ...and back to your original number

Коли ви "скремблюєте" число (або текст або будь-який зразок бітів) за допомогою XOR, у вас є основа більшої частини криптографії.


3

XOR використовує менше транзисторів ( 4 шлюзи NAND ), ніж більш складні операції (наприклад, ADD, MUL), що робить його гарним впроваджувати в апаратному забезпеченні, коли важлива кількість воріт. Крім того, XOR є власною оберненою, що робить його хорошим для нанесення ключового матеріалу (той самий код може бути використаний для шифрування та дешифрування). Приклад цього - чудова проста робота AddRoundKey AES.


2

Для симетричної криптографії єдиними реальними операціями вибору, які змішують біти з шифром і не збільшують довжину, є операції додавання з перенесенням, додавання без перенесення (XOR) та порівняння (XNOR). Будь-яка інша операція або втрачає біти, розширюється або недоступна на центральних процесорах.


3
На загальних процесорах доступні більше інвертованих інструкцій: обертання - одне, ціле множення на непарне ціле - інше. Всі вони використовуються в деяких сучасних блок-шифрах.
Accipitridae

Я опустив обертання, оскільки це насправді не підходить для криптографії. Я ніколи не здогадався б, що непарне ціле число множини було оберненим.
Джошуа

2

Властивість XOR (a xor b) xor b = a стає в нагоді для потокових шифрів: для шифрування бітових широких даних генерується псевдовипадкова послідовність з n бітів за допомогою крипто-ключа та крипто-алгоритму.

Відправник:
Дані: 0100 1010 (0x4A)
псевдовипадкова послідовність: 1011 1001 (0xB9)
                        ------------------
зашифровані дані 1111 0011 (0xF3)
                        ------------------

Приймач:
зашифровані дані 1111 0011 (0xF3)
псевдовипадкова послідовність: 1011 1001 (0xB9) (одержувач має ключ і обчислює ту саму послідовність)
                        ------------------
                         0100 1010 (0x4A) Дані після розшифровки
                        ------------------

2

Давайте розглянемо три загальні побітові логічні оператори

Скажімо, ми можемо вибрати якесь число (назвемо його маскою) і об’єднати його з невідомим значенням

  • І стосується змушення деяких бітів до нуля (тих, які в масці встановлені рівними нулю)
  • АБО - про примушування деяких бітів до одного (тих, які встановлені до одного в масці)

XOR є більш тонким, ви не можете точно знати значення будь-якого біта результату, незалежно від вибраної маски. Але якщо ви застосуєте маску двічі, ви отримаєте початкове значення.

Іншими словами, метою І та АБО є видалення певної інформації, і це точно не те, що потрібно в криптографічних алгоритмах (симетричний або асиметричний шифр або цифровий підпис). Якщо ви втратите інформацію, ви не зможете отримати її назад (розшифрувати), або підпис буде терпіти деякі хвилинні зміни у повідомленні, тим самим перемагаючи його мету.

Все сказане стосується криптографічних алгоритмів, а не їх реалізації. Більшість реалізацій криптографічних алгоритмів також використовують багато AND, зазвичай для вилучення окремих байтів з 32 або 64 внутрішніх регістрів.

Зазвичай ви отримуєте такий код (це якийсь майже випадковий витяг aes_core.c)

rk[ 6] = rk[ 0] ^
 (Te2[(temp >> 16) & 0xff] & 0xff000000) ^
 (Te3[(temp >>  8) & 0xff] & 0x00ff0000) ^
 (Te0[(temp      ) & 0xff] & 0x0000ff00) ^
 (Te1[(temp >> 24)       ] & 0x000000ff) ^
 rcon[i];
rk[ 7] = rk[ 1] ^ rk[ 6];
rk[ 8] = rk[ 2] ^ rk[ 7];
rk[ 9] = rk[ 3] ^ rk[ 8];

8 XOR та 7 AND, якщо я правильно вважаю


1

Я думаю, що це просто тому, що для даного деякого випадкового набору двійкових чисел велика кількість операцій "АБО" буде прагнути до всіх "1", так само велика кількість операцій "І" буде прагнути до всіх нулів. Де велика кількість "XOR" виробляє випадковий вибір одиниць та нулів.

Це не означає, що AND та OR не корисні - просто XOR є більш корисним.

Поширеність OR / AND та XOR у криптографії з двох причин:

Однією з них є блискавичні інструкції.

Два з них важко змоделювати за допомогою звичайних математичних формул


1

XOR - це математичний розрахунок у криптографії. Це логічна операція. Є й інші логічні операції: AND, OR, NOT, Modulo Function тощо. XOR є найважливішим і найбільш використовуваним.

введіть тут опис зображення

Якщо це те саме, це 0.

Якщо воно інше, це 1.

Приклад:

Повідомлення: Привіт

Двійкова версія Hello: 01001000 01100101 01101100 01101100 01101111

Потік ключів: 110001101010001101011010110011010010010111

Текст шифру з використанням XOR: 10001110 11000110 00110110 10100001 01001010

Застосування: Одноразова панель / Шифр ​​Верн-ам використовує Ексклюзив або функцію, в якій приймач має однаковий потік ключів і отримує шифртекст через прихований транспортний канал. Потім приймач Xor зашифровує текст із потоком ключів, щоб розкрити відкритий текст Hello. В One Time Pad потік ключів повинен бути принаймні таким довгим, як повідомлення.

Факт: One Time Pad - це єдине справді непорушне шифрування.

Ексклюзивно Або використовується у структурі Фейстеля, яка використовується в блочному шифрі DES algo.

Примітка: Операція XOR має 50% шансів вивести 0 або 1.

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.