РОЗДІЛ 2
ФОРМАЛЬНИЙ ОПИС БЛОКОВО-ДИНАМІЧНОГО ШИФРУВАННЯ ДЛЯ ЕФЕКТИВНОГО ФУНКЦІОНУВАННЯ
БЛОЧНИХ АЛГОРИТМІВ
2.1. Модифікована модель динамічної зміни підключів алгоритмів реалізації
блочного шифрування
Для протидії комп'ютерним злочинам або зменшення збитку від них необхідно
грамотно обирати заходи і засоби забезпечення захисту інформації від навмисного
руйнування, крадіжки і несанкціонованого доступу. Найбільш ефективним блочним
алгоритмом шифрування є Blowfish, який оптимізований для тих задач, у яких
немає частої зміни ключів, таких, як поштовий клієнт. Blowfish, що реалізований
як мережа Фейстеля (Feistel), має 16 ітерацій. Довжина блоку дорівнює 64 бітам,
ключ може мати будь-яку довжину у межах 448 біт. Перед початком будь-якого
шифрування виконується складна фаза, і алгоритм складається з двох частин:
розширення ключа та шифрування даних. Розширення ключа перетворює ключ довжиною
щонайменше 448 біт у кілька масивів підключів загальною довжиною 4168 байт
[33].
Кожна ітерація складається з перестановки, що залежить від ключа, та
підстановки, яка залежить від ключа та даних. Використовуються операції XOR та
додавання 32-бітних слів. Blowfish використовує велику кількість підключів. Ці
ключі повинні бути обчислені заздалегідь, до початку будь-якого шифрування або
дешифрування даних. Саме шифрування відбувається достатньо швидко [67].
У даній роботі ставиться задача підвищення надійності та швидкодії при передачі
інформації по комп’ютерних мережах з використанням модифікованого
криптографічного алгоритму шифрування Blowfish та програмна реалізація цього
алгоритму у вигляді Mapi-клієнта поштового серверу (Додаток А).
Після проведення аналізу блочних алгоритмів, який здійснено в попередніх
розділах, представимо запропонований нами блоково-динамічний алгоритм в
загальному вигляді.
Метод шифрування включає перестановку, підстановку, додавання за модулем 232 та
побітний XOR.
Основна операція шифрування даним методом – це підстановка. Процедура
підстановки має наступний вигляд:
, (2.1)
де x – вхідне число;
S0-S3 – підстановочні блоки;
- зсув числа x праворуч на n розрядів;
операція додавання «+», виконується як додавання за модулем 232;
- операція додавання за модулем 2 (XOR);
Щ - операція логічного множення (AND).
Процес шифрування можна описати рекурсивною функцією, розв’язком яких будуть
числа, які отримуємо в результаті шифрування:
. (2.2)
Розв’язання проходить на відрізку від 1 до n, де n - кількість ітерацій
шифрування, яку можна збільшувати (зменшувати), посилюючи (послаблюючи)
шифрування;
– права частина даних шифрування 32 біт;
– ліва частина даних шифрування 32 біт;
– ключ шифрування для і – го циклу;
Початкові умови системи є вхідні дані шифрування:
– ліва частина початкових даних шифрування;
– права частина початкових даних шифрування.
Позначимо систему функцією E з параметрами x1, x2, тоді повне шифрування буде
описуватись як:
E(x1, x2) , (2.3)
де Rn – результат обчислення n-ої ітерації правої частини;
Ln – результат обчислення n-ої ітерації лівої частини;
Pn+1, Pn+2 – це (n + 1)-ий та (n + 2) ключі шифрування;
Lr – ліва частина результату шифрування;
Rr – права частина результату шифрування.
Для створення ключа використовується описаний метод шифрування, де в якості
ключа виступає байтова послідовність у вигляді символів, а в якості підключа
64-бітне число. Шифруються дані самого ключа, а також дані для підстановок.
Процес створення ключа включає в себе використання функції шифрування.
Оскільки вхідний ключ може бути різної довжини, то перший етап створення ключа
полягає у розгортанні вхідного ключа до 448 біт.
(2.4) де
(2.5) де , ,
З (2.4), (2.5) отримуємо (2.6)
, (2.6)
де key – вхідний ключ шифрування;
keysize – розмір ключа – кількість key-послідовностей;
P – ключ для шифрування, який складається із P1,P2,…P18 частин;
mod – залишок від цілочисельного ділення;
N – довжина ключа шифрування в 32 бітних блоках
k –кількість ітерацій логічного додавання
j – поточний знак ключа key
N = n + 2.
Причому на початку кожної ітерації результат попередньої операції OR зсувається
на 8 розрядів ліворуч.
Ця операція виконується для кожного Pi-го елемента ключа, де .
У нашому удосконаленому варіанті Blowfish додавання починається із значення
key21,
де key21 – це перша частина 64 бітного числа,
key21 – дозволяє змінити початкові ключі, що вносить додатковий захист до
шифрування.
Для покращення надійності ключа для самого ключа та для S-блоків виконується
операція шифрування, причому при шифруванні використовуються вже попередньо
зашифровані S блоки.
Шифрування ключа можна описати як рішення рекурсивної функцій для кожної пари
ключів Pi і Pi+1, де , причому початкові значення, які будуть циклічно
передаватись як початкові умови із рекурсивної функцій в рекурсивну функцію у
звичайному Blowfish приймають значення нулів, а в удосконаленому методі це
допоміжний 64 бітний ключ, який розбивається на дві 32-бітні частини:
E(key21, key22) ,
E(,) ,
E(,) ,
key21 – перша частина 64-бітного другого ключа;
key22 - друга частина 64-бітного другого ключа
P1 … PN – нові ключі після шифрування;
- n-й розв’язок рекурсивної функцій E(x1,x2).
Після шифрування ми отримаємо нові ключі P1, P2, …, PN.
Вхідні значення для шифрування S-блоків: P17, P18. Шифруючи ці значення, ми
отримуємо нові значення, які передаємо на наступний цикл шифрування. Так
шифруються всі S-блоки.
Шифрування S-блоків проходить для кожної пари послідовно.
Для першого S-блоку S0:
E(,) ,
E(,) ,
E
- Киев+380960830922