Здавалка
Главная | Обратная связь

ПІДВИЩЕННЯ ЕФЕКТИВНОСТІ БЛОЧНИХ ШИФРІВ НА ОСНОВІ БЛОКОВО-ДИНАМІЧНОГО ШИФРУВАННЯ.



 

Блоково-динамічний алгоритм реалізації методів блочного шифрування

 

Актуальність проблеми захисту інформації пов’язана із зростанням можливостей обчислювальної техніки. Розвиток засобів, методів і форм автоматизації процесів обробки інформації і масове застосування персональних комп'ютерів роблять інформацію дуже уразливою.

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

Щорічні втрати від злочинів в цій сфері складають в світі, за різними оцінками, від 170 млн до 10 млрд дол. За деякими даними, в промислово розвинених країнах середній збиток від одного комп'ютерного злочину (а значну частку таких злочинів складають зловживання в фінансовій сфері) близький до 450 тис. дол., а щорічні сумарні втрати в США і Західній Європі досягають 100 млрд і 35 млрд дол., відповідно [6]. У останні десятиріччя зберігалася стійка тенденція до зросту збитків, пов’язаних з комп'ютерною злочинністю і в Україні.

Для протидії комп'ютерним злочинам або зменшення збитку від них необхідно грамотно вибирати заходи і засоби забезпечення захисту інформації від навмисного руйнування, крадіжки і несанкціонованого доступу. Тому у нашому випадку будемо використовувати блочний шифр з секретним ключем, а саме криптографічний алгоритм Blowfish, який оптимізований для тих задач, у яких немає частої зміни ключів, таких, як поштовий клієнт. Blowfish є мережею Фейстела (Feistel), у якої кількість ітерацій становить 16. Довжина блоку дорівнює 64 бітам, ключ може мати будь-яку довжину у межах 448 біт. Перед початком будь-якого шифрування виконується складна фаза, і алгоритм складається з двох частин: розширення ключа та шифрування даних. Розширення ключа перетворює ключ довжиною щонайменше 448 біт у кілька масивів підключів загальною довжиною 4168 байт [7].

В основі алгоритму покладено мережу Фейстела (Feistel) з 16 ітераціями. Кожна ітерація складається з перестановки, що залежить від ключа, та підстановки, що залежить від ключа та даних. Операціями є XOR та складання 32-бітних слів. Blowfish використовує велику кількість підключів. Ці ключі повинні бути обчислені заздалегідь, до початку будь-якого шифрування або дешифрування даних. Саме шифрування відбувається достатньо швидко.

 

Опис алгоритму

Шифрує дані на 32-бітових мікропроцесорах.

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

Використовує тільки прості операції: додавання, XOR та виборку з таблиці по 32-бітному операнду. Аналіз його схеми нескладний, що зменшує кількість помилок при реалізації алгоритму.

Довжина ключа є змінною та може досягати 448 біт.

Ключ для шифрування створюється за допомогою двох частин: перша – пароль-масив з символів; друга – час, який переводиться в комп’ютерний формат, і в результаті отримуємо два 32-бітних числа, що беруть участь у ініціалізації ключа (рис. 6.1).

 

 

Рис. 6.1. Два 32-бітних числа

 

Алгоритм оптимізований для тих задач, в яких немає частої зміни ключів, таких, як поштовий клієнт. Данні кодуються по 32 біта, і тому у 32-розрядній системі алгоритм працює дуже швидко, набагато швидше за DES. Він не придатний для використання у задачах з частою зміною ключів, наприклад, при комутації пакетів, чи для використання у якості єдино спрямованої хеш-функції [8].

Ключ є 64-бітним блочним шифром з ключем змінної довжини. Алгоритм складається з двох частин: розгортання ключа та шифрування даних. Розгортання ключа перетворює ключ довжиною до 448 біт у кілька масивів підключів, загальним обсягом 4168 байт.

Шифрування даних заключається у простій функції, що виконується послідовно 16 раз. Кожен етап складається з залежної від ключа перестановки та залежної від ключа та даних підстановки. Використовуються тільки додавання і XOR 32-бітових слів. Єдиними додатковими операціями на кожному етапі є чотири вилучення даних з індексованого масива.

Створення ключа:

Р-масив ініціалізується фіксованою строкою.

 

Рис. 6.2. Р-масив після ініціалізації

 

2. Чотири S-блоки ініціалізуються фіксованою строкою.

3. Виконуємо операцію XOR Р1 з непарними 32 бітами ключа, XOR Р2 з непарними другими 32 бітами ключа та старшою 32 бітною частиною часу, і так далі для усіх бітів ключа (до Р18).

4. Операцію 2 виконуємо циклічно, доки для усього Р-масиву не буде виконана операція XOR з бітами ключа.

5. Використовуючи підключі, отримані на етапах 1, 2 і 3 алгоритмом шифрування, шифрується значення з часу. P1 і Р2 замінюються цими результатами, а результат шифрування часу шифрується за допомогою алгоритму та змінених підключів.

6. Значення Р3 і Р4 замінюються значеннями, обчисленими у п.4. Р3 і Р4.

7. Під час процесу усі елементи Р-масиву і потім поступово усі чотири S-блоки замінюються виходом алгоритму, що постійно змінюється.

Підключі зберігаються для кодування чи декодування даних.

Шифрування (дешифрування) даних:

Дані повинні бути кратні 4 байтам, тому, якщо ця умова не виконується, добавляємо додаткові нульові біти до розміру, який кратний чотирьом.

Наприклад, Р-масив дорівнює 12 байт, або три 32-бітних числа.

 

 

Рис. 6.3. Вхідна інформація або три 32-бітних числа

 

У функцію шифрування передаються два 32-бітних числа, обираються спочатку перше і останнє, поступово направляючись досередини.

1,2,3,4,…20,21,22…38,39,40,41

Якщо залишається одне число, то воно кодується разом з наступним елементом масиву після нього. Так, у наведеному прикладі, 21 буде кодуватися з 41. При обраній операції ці числа будуть кодуватися першими. Це дає можливість кодувати як парну кількість подвійних слів, так і непарну.

Процес кодування двох 32-бітних чисел XL і XR складається з таких етапів:

1. Наступні операції виконуються у циклі 16 раз.

1.1. xL = xL xR – числа додаються за модулем 2

Строка коду: «X1 = X1 ^ c->P[i];»

1.2. xR = Func(xL) xR – число xR додається за модулем 2 с F(xL), де F(xL) – це функція, яка виконує наступні дії:

1.2.1 Розділяємо хL на чотири 8-бітних частини: a, b, c, d­, що здійснюється зсувом цього числа праворуч на 8 біт.

1.2.2 Функція обчислюється як ((S1,a + S2,b mod 232) S3,c) + S4,d mod 232.

Строка коду: «Xr = Func(c, X1) ^ Xr;»

1.3. Переставляємо xL та xr

Строки коду: «temp = X1; X1 = Xr; Xr = temp;»

2. Переставляємо xL та xr «temp = X1; X1 = Xr; Xr = temp;

3. xR = xR P17 – числа додаються за модулем 2 з елементом ключа P17.

Строки коду: Xr = Xr ^ c->P[N];

4. xR = xR P18 – число додається за модулем 2 з елементом ключа P18

Строки коду: X1 = X1 ^ c->P[N + 1];

Ми отримали закодоване повідомлення.

Результат в 32-бітних числах:

 

 

Рис. 6.4. Вихідна інформація або три 32-бітних числа

 

 

Рис. 6.5. Вихідна інформація у 8-бітних значеннях

.

Дешифрування виконується аналогічно шифруванню, але Р1, Р2, . . ., P18 використовуються у зворотному порядку.

Даний алгоритм був змодульований програмними засобами Мathcad.

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

 

 

Рис. 6.6. Графік залежності вхідної та вихідної інформації

 

Для слабких ключів, які генерують погані S-блоки, додавання двох додаткових 32-бітних ключів (з часу) підвищує захищеність ключа, що підвищує якість шифрування. При невідомих S-блоках ми можемо виявити використання слабкого ключа, але не можемо визначити сам ключ (S-блоки та Р-масив). Тому цей метод ефективний тільки проти варіантів із зменшеною кількістю етапів та абсолютно недієвий проти 16-етапного.

 







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.