Головна

Алгоритми, засновані на операції «виключне або» (XOR).

  1.  А.6.3.3 Нормативні значення, засновані на малій кількості випробувань
  2.  Активні операції. Інвестиційна діяльність комерційних банків.
  3.  Алгоритми, засновані на алфавітних перестановках.
  4.  арифметичні операції
  5.  Арифметичні операції в позиційних системах числення
  6.  Арифметичні операції зі знаковими числами в ЕОМ (орг. ЕОМ)

Побітова операція XOR (в Сі позначається знаком ^), як відомо, дає наступний результат:

- 0 ^ 0 = 1 ^ 1 = 0

- 0 ^ 1 = 1 ^ 0 = 1

Чудова властивість операції XOR:

,

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

Нехай є послідовність вихідних відкритих даних (текст)  , Що складається з елементарних одиниць даних (наприклад, символів) -  . І нехай є ключ  - Символ, за допомогою якого необхідно зашифрувати дані.

Алгоритм шифрування:

- Кожен символ  замінюємо на .

Алгоритм дешифрування:

- Кожен символ  замінюємо на .

Як бачимо, алгоритми шифрування і дешифрування збігаються.

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

Це буде еквівалентно застосуванню 1 операції :

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

Втім, можна розробити нескінченне безліч різних ускладнених варіацій шифрування XOR-му.

Наприклад, маючи ключ довжиною 10 символів, кожен десятий символ тексту шифруємо першим символом ключа, наступний кожен десятий символ тексту - другим символом ключа і т.д.

Покажемо даний алгоритм на прикладі. Нехай ключем є слово «ключ» і необхідно зашифрувати фразу «Мама мила раму.»:

 XOR М а м а   м ы л а   р а м у .
к л ю ч к л ю ч к л ю ч к л ю
 результат: & > ¦ ¦ К ¦ L  0x0D  0x0A Л d ¦ ¦ ^ Р

Реалізація даного алгоритму на мові Сі досить проста:

char * xorcode (const char * s, const char * key)

{

int i;

int n = strlen (s);

int m = strlen (key);

char * result = strdup (s);

for (i = 0; i

return result;

}

Ключовим моментом, в якому і відбувається шифрування, є операція:

result [i] ^ = key [i% m];

За допомогою якої вихідний  ий символ замінюється на нього ж, але «сксоренного» з  им символом ключа. Звернемо увагу на застосування операції взяття залишку від ділення при обчисленні номера символу в ключі. У нашому тестовому випадку  (Довжина ключа). Тоді операція i% 4 видаватиме результат:

0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, ...

Що власне і необхідно. Тобто за допомогою залишку від ділення ми циклічно проходимо по ключу.

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


 



 Найпростіші алгоритми шифрування |  Алгоритми, засновані на алфавітних перестановках.

 ЗАВДАННЯ НА КУРСОВУ РОБОТУ |  опис алгоритму |  приклад виконання |

© um.co.ua - учбові матеріали та реферати