ПІДВИЩЕННЯ ЕФЕКТИВНОСТІ БЛОЧНИХ ШИФРІВ НА ОСНОВІ БЛОКОВО-ДИНАМІЧНОГО ШИФРУВАННЯ.
Блоково-динамічний алгоритм реалізації методів блочного шифрування
Актуальність проблеми захисту інформації пов’язана із зростанням можливостей обчислювальної техніки. Розвиток засобів, методів і форм автоматизації процесів обробки інформації і масове застосування персональних комп'ютерів роблять інформацію дуже уразливою. Державна інформація представляє великий інтерес для кримінальних елементів. Сьогодні у керівництва більшості державних організацій немає сумнівів щодо необхідності серйозно піклуватися про інформаційну безпеку (у збереженні державних таємниць, забезпеченні безпеки електронних документів). Застосування сучасних інформаційних технологій в державних системах розширює можливості для різних зловживань, пов’язаних з використанням обчислювальної техніки (так званих комп'ютерних злочинів). Щорічні втрати від злочинів в цій сфері складають в світі, за різними оцінками, від 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 Все права принадлежат авторам размещенных материалов.
|