Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проектування засобів захисту інформації в комп'...doc
Скачиваний:
19
Добавлен:
14.11.2019
Размер:
1.06 Mб
Скачать

Лабораторна робота № 3 Алгоритм симетричного блокового шифрування cast128

1 Мета роботи

Мета роботи: реалізувати програму симетричного блокового шифрування повідомлення за алгоритмом CAST128.

2 Очікуваний результат роботи

В ході роботи необхідно засвоїти основні принципи побудови алгоритмів симетричних блокових шифрів, розробити програму шифрування/дешифрування вхідного повідомлення за алгоритмом CAST128.

3. Теоретичні відомості

Характерною особливістю блокових криптоалгоритмов є той факт, що в ході своєї роботи вони проводять перетворення блоку вхідної інформації фіксованої довжини і одержують результуючий блок того ж об'єму, але недоступний для прочитання стороннім особам, що не володіють ключем. Таким чином, схему роботи блокового шифру можна описати функціями Z=EnCrypt(X,Key) і X=DeCrypt(Z,Key)

Ключ Key є параметром блокового криптоалгоритма і є деяким блоком двійкової інформації фіксованого розміру. Початковий (X) і зашифрований (Z) блоки даних також мають фіксовану розрядність, рівну між собою, але необов'язково рівну довжині ключа.

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

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

Назва алгоритму

Автор

Розмір блоку

Довжина ключа

IDEA

Xuejia Lia and James Massey

64 біта

128 біт

CAST128

64 біта

128 біт

BlowFish

Bruce Schneier

64 біта

128 - 448 біт

ГОСТ

НДІ ***

64 біта

256 біт

TwoFish

Bruce Schneier

128 біт

128 - 256 біт

MARS

Корпорація IBM

128 біт

128 - 1048 біт

Криптоалгоритм вважається ідеально стійким, якщо прочитати зашифрований блок даних можна тільки перебравши всі можливі ключі, до тих пір, поки повідомлення не виявиться осмисленим. Оскільки по теорії імовірномті шуканий ключ буде знайдений з імовірністю 1/2 після перебору половини всіх ключів, то на злом ідеально стійкого криптоалгоритма з ключем довжини N буде потрібно в середньому 2N-1 перевірка. Таким чином, в загальному випадку стійкість блокового шифру залежить тільки від довжини ключа і зростає експоненціально з її зростанням. Навіть припустивши, що перебір ключів проводиться на спеціально створеній багатопроцесорній системі, в якій завдяки діагональному паралелізму на перевірку 1 ключа йде тільки 1 такт, то на злом 128 бітового ключа сучасній техніці буде потрібно не менше 1021 року. Природно, все сказане відноситься тільки до ідеально стійких шифрів, якими, наприклад, з великою часткою упевненості є приведені в таблиці вище алгоритми.

Окрім цієї умови до ідеально стійких криптоалгоритмам висувається ще одна дуже важлива вимога, якій вони повинні обов'язково відповідати. При відомих початковому і зашифрованому значеннях блоку ключ, яким проведено це перетворення, можна дізнатися також тільки повним перебором. Ситуації, в яких сторонньому спостерігачу відома частина початкового тексту зустрічаються достатньо часто. Це можуть бути: стандартні надписи в електронних бланках; фіксовані заголовки форматів файлів; довгі слова або послідовності байт, що часто зустрічаються в тексті. У світлі цієї проблеми описана вище вимога не є чимось надмірним і також строго виконується стійкими криптоалгоритмами.

Таким чином, на функцію стійкого блокового шифру Z=EnCrypt(X,Key) накладаються наступні умови:

  • Функція EnCrypt повинна бути оборотною.

  • Не повинно існувати інших методів прочитання повідомлення X по відомому блоку Z, окрім як повним перебором ключів Key.

  • Не повинно існувати інших методів визначення яким ключем Key було проведене перетворення відомого повідомлення X в повідомлення Z, окрім як повним перебором ключів.

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

Всі перетворення над даними блоковим криптоалгоритмом засновані на тому факті, що перетворюваний блок може бути представлений у вигляді цілого додатнього числа з діапазону, відповідного його розрядності. Так, наприклад, 32-бітовий блок даних можна інтерпретувати як число з діапазону 0..4294967295. Крім того, блок, розрядність якого звичайно є "ступенем двійки", можна трактувати як декілька незалежних додатніх чисел з меншого діапазону (розглянутий вище 32-бітовий блок можна також представити у вигляді 2 незалежних чисел з діапазону 0..65535 або у вигляді 4 незалежних чисел з діапазону 0..255).

Над цими числами блоковим криптоалгоритмом і проводяться за певною схемою наступні дії (зліва дані умовні позначення цих операцій на графічних схемах алгоритмів) :

Бієктивні математичні функції

Додавання

Виключне АБО

Множення за модулем 2N+1

Множення за модулем 2N

Бітові зсуви

Арифметичний зсув вліво

Арифметичний зсув вправо

Циклічний зсув вліво

Циклічний зсув вправо

Табличні підстановки

S-box (англ.substitute)

В якості параметра V для будь-якого з цих перетворень може використовуватися:

  • фіксоване число (наприклад X'=X+125)

  • число, що одержується з ключа (наприклад X'=X+F(Key))

  • число, що одержується з незалежної частини блоку (наприклад X2'=X2+F(X1))

Останній варіант використовується в схемі, названою на ім'я її творця мережею Фейстеля (Feistel).

Послідовність виконуваних над блоком операцій, комбінації перерахованих вище варіантів V та самі функції F і складають "ноу-хау" кожного конкретного блокового криптоалгоритма. Одін-два рази на рік світові дослідницькі центри публікують черговий блоковий шифр, який під атакою криптоаналітиків або набуває за декілька років статусу стійкого криптоалгоритма, або (що відбувається набагато частіше) безславно йде в історію криптографії.

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

Оскільки операція шифрування або дешифрування окремого блоку в процесі обробки пакету інформації виконується багато разів (іноді до сотень тисяч разів), а значення ключа і, отже, функцій Vi(Key) залишається незмінним, то іноді стає доцільно наперед одноразово обчислити дані значення і зберігати їх в оперативній пам'яті спільно з ключем. Оскільки ці значення залежать тільки від ключа, то вони в криптографії називаються ключовим матеріалом. Необхідно відзначити, що дана операція жодним чином не змінює ні довжину ключа, ні криптостойкость алгоритму в цілому. Тут відбувається лише оптимізація швидкості обчислень шляхом кешування (англ. caching) проміжних результатів. Описані дії зустрічаються практично в багатьох блокових криптоалгоритмах і носять назву розширення ключа (англ. key expansion)

У криптографії, CAST-128 (або CAST5) - це блоковий алгоритм симетричного шифрування на основі мережі Фейстеля, який використовується в цілому ряді продуктів криптографічного захисту, зокрема деяких версіях PGP і GPG, та, крім того, схвалений для використання Канадським урядом. Алгоритм був створений в 1996 році Карлайлом Адамсом (Carlisle Adams) і Стаффордом Таваресом (Stafford Tavares). Цей алгоритм використовує метод побудови шифрів CAST, спільний з іншим їх алгоритмом CAST-256 (алгоритм-кандидат AES).

CAST-128 складається з 12 або 16 раундів мережі Фейстеля з розміром блоку 64 біта і довжиною ключа від 40 до 128 біт (але лише з інкрементом по 8 біт). 16 раундів використовуються коли розміри ключа перевищують 80 біт. У алгоритмі використовуються 8x16 S-блоки, засновані на bent-функциях, операції XOR і модулярной арифметиці (модулярне додавання і віднімання). Є три різні типи функцій раундів, але вони схожі по структурі і розрізняються лише у виборі виконуваної операції (додавання, віднімання або XOR) в різних місцях.

Хоча CAST-128 захищений патентом Entrust, його можна використовувати у всьому світі для комерційних або некомерційних цілей безкоштовно.

Рис.1 Структура алгоритму CAST 128

Завдання для виконання роботи:

В ході роботи необхідно засвоїти основні принципи побудови алгоритмів симетричного блокового шифрування, розробити програму шифрування/дешифрування згідно алгоритму CAST-128.

Порядок виконання роботи:

  1. Провести функціональну декомпозицію та побудувати діаграму класів підсистеми шифрування/дешифрування за алгоритмом CAST-128.

  2. Реалізувати підсистемe шифрування/дешифрування засобами MS Visual Studio 2005.

  3. Побудувати графічний інтерфейс програми шифрування/дешифрування згідно алгоритму CAST-128.

  4. Підготувати та захистити звіт.

4 Література

1. В. Стоуллингс “Криптография и защита сетей – Принципы и практика”, Киев 2003

2. RFC2144 The CAST-128 Encryption Algorithm