- •Лабораторна робота № 2 Перестановочний шифр
- •Лабораторна робота №3 Криптоаналіз шифрів моноалфавітної заміни
- •Лабораторна робота №4 Організація стегоканалу в bmp-файлі
- •Лабораторна робота №5 Алгоритм шифрування cast-128
- •Конструкція блокового шифру на основі мереж Фейстеля
- •Алгоритмічний опис
- •Математичний опис
- •Функції, що використовуються в мережах Фейстеля
- •Блок-блок-s-блок (s-box)
- •Циклічний зсув
- •Додавання по модулю n
- •Множення по модулю n
- •Приклад реалізації мовою Си
- •Переваги й недоліки
- •Модифікації мережі Фейстеля
Циклічний зсув
Циклічний зсув вліво на 3 розряди 8-бітної шини
Можна показати, що циклічний зсув є частиною P-блоку.
У найпростішому випадку (зсув на 1 біт), крайній біт переміщається на інший кінець регістра або шини. Залежно від того який біт береться, правий або лівий, зсув називається вправо або вліво. Зсув на більше число біт можна розглядати, як багаторазове застосування зсуву на 1.
Циклічний зсув на m біт для n-розрядного входу (m < n) |
||
Напрямок зсуву |
Порядок проходження бітів до зсуву |
Порядок проходження битов після зсуву |
вліво |
b0,b1,b2,...,bn − 1 |
bm,bm + 1,...bn − 1,b0,b1,...,bm − 1 |
вправо |
b0,b1,b2,...,bn − 1 |
bn − m,bn − m + 1,...bn − 1,b0,b1,...,bn − m − 1 |
Додавання по модулю n
Позначення операції — (A + B) mod n — це залишок від розподілу суми A + B на n, де A й B — складають числа, що.
Можна показати, що додавання двох чисел по модулі n представляється у двійковій системі числення, як S-блок, у якого на вхід подається число A, а як система комутації S-блоку використається циклічний зсув вліво на B розрядів.
В комп'ютерній техніці й електроніці операція додавання, як правило, реалізована як додавання по модулі n = 2m, де m — ціле (звичайно m дорівнює розрядності машини). Для одержання у двійковій системі A + B mod 2m досить скласти числа, після чого відкинути розряди починаючи з m-того й старше.
Множення по модулю n
Позначення операції — (A * B) mod n — це залишок від розподілу добутку A * B на n, де A й B — перемножують числа, що.
У персональних комп'ютерах на платформі x86 при перемножуванні двох розрядн-m-розрядних чисел виходить число розрядністю 2*m. Щоб одержати залишок від розподілу на 2m потрібно відкинути m старших біт.
Приклад реалізації мовою Си
Загальний вид алгоритму шифрування, що використає мережу Фейстеля:
/* функція перетворення подблока по ключі (залежить від конкретного алгоритму)
subblock - преутворений подблок
key - ключ
значення, що повертається - перетворений блок*/
int f(int subblock, int key);
/*Шифрування відкритого тексту
left - лівий вхідний подблок
right - правий вхідний подблок
* key - масив ключів (по ключі на раунд)
rounds - кількість раундів*/
void crypt(int *left, int *right, int rounds, int *key)
{
int i, temp;
for(i = 0; i < rounds; i++)
{
temp = *right ^ f(*left, key[i]);
*right = *left;
*left = temp;
}
}
/*Розшифрування тексту
left - лівий зашифрований підблок
right - правий зашифрований підблок*/
void decrypt(int *left, int *right, int rounds, int *key)
{
int i, temp;
for(i = rounds - 1; i >= 0; i--)
{
temp = *left ^ f(*right, key[i]);
*left = *right;
*right = temp;
}
}
Переваги й недоліки
Переваги:
Простота апаратної реалізації на сучасній елементній базі
Простота програмної реалізації в силу того, що значна частина функцій підтримується на апаратному рівні в сучасних комп'ютерах (наприклад, додавання по модулю 2 додавання по модулю 2n, множення по модулю 2n, і т.д.)
Гарна вивченість алгоритмів на основі мереж Фейстеля[5]
Недоліки:
За один раунд шифрується тільки половина вхідного блоку
