Материал: 1

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

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

Автор

Розмір блоку

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

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) накладаються наступні умови:

  1. Функція EnCrypt має бути оборотною.

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

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

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

Усі дії, вироблювані над даними блоковим криптоалгоритмом, засновані на тому факті, що перетворюваний блок може бути представлений у вигляді цілого ненегативного числа з діапазону, відповідного його розрядності. Так, наприклад, 32-бітовий блок даних можна інтерпретувати як число з діапазону 0.4'294'967'295. Крім того, блок, розрядність якого зазвичай є "мірою двійки", можна трактувати як декілька незалежних ненегативних чисел з меншого діапазону (розглянутий вище 32-бітовий блок можна також представити у вигляді 2 незалежних чисел з діапазону 0.65535 або у вигляді 4 незалежних чисел з діапазону 0.255).

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

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

Складання

X'=X+V

Що виключає АБО

X'=X XOR V

 

Множення по модулю 2N+1

X'=(X*V) mod (2N+1)

Множення по модулю 2N

X'=(X*V) mod (2N)

Бітові зрушення

Арифметичне зрушення вліво

X'=X SHL V

Арифметичне зрушення управо

X'=X SHR V

Циклічне зрушення вліво

X'=X ROL V

Циклічне зрушення управо

X'=X ROR V

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

S - box (англ. substitute)

X'=Table[X, V]

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

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

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

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

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

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

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

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

Мережа Фейштеля

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

Класична мережа Фейштеля має наступну структуру:


Мал. 1.

Незалежні потоки інформації, породжені з початкового блоку, називаються гілками мережі. У класичній схемі їх дві. Величини Vi іменуються параметрами мережі, звичайно це функції від матеріалу ключа. Функція F називається твірною. Дія, що складається з одноразового обчислення функції, що утворює, і наступного накладення її результату на іншу гілку з обміном їх місцями, називається циклом або раундом (англ. round) мережі Фейштеля. Оптимальне число раундів K - від 8 до 32. Важливе те, що збільшення кількості раундів значно збільшує криптоскойстость будь-якого блокового шифру до криптоаналізу. Можливо, ця особливість і вплинула на таке активне поширення мережі Фейштеля - адже при виявленні, скажімо, якого-небудь слабкого місця в алгоритмі, майже завжди досить збільшити кількість раундів на 4-8, не переписуючи сам алгоритм. Часто кількість раундів не фіксується розробниками алгоритму, а лише вказуються розумні межі (обов'язково нижній, і не завжди - верхній) цього параметра.

Відразу ж виникає питання, - чи є ця схема оборотною ? Очевидно, так. Мережа Фейштеля має ту властивість, що навіть якщо як функція, що утворює, F буде використане безповоротне перетворення, то і в цьому випадку увесь ланцюжок буде відновлений. Це відбувається внаслідок того, що для зворотного перетворення мережі Фейштеля не треба обчислювати функцію F - 1.

Більше того, як неважко помітити, мережа Фейштеля симетрична. Використання операції XOR, оборотної своїм же повтором, і інверсія останнього обміну гілок роблять можливим раскодирование блоку тією ж мережею Фейштеля, але з інверсним порядком параметрів Vi. Помітимо, що для оборотності мережі Фейштеля не має значення чи являється число раундів парним або непарним числом. У більшості реалізацій схеми, в яких обидві вищеперелічені умови (операція XOR і знищення останнього обміну) збережено, пряме і зворотне перетворення виробляються однією і тією ж процедурою, якою як параметр передається вектор величин Vi або в початковому, або в інверсному порядку.

З незначними доопрацюваннями мережу Фейштеля можна зробити і абсолютно симетричною, тобто виконуючій функції шифрування і дешифрування одним і тим же набором операцій.

Захист програм від злому

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

Інструментарій хакера

Сучасний хакер має у своєму арсеналі набір різноманітних утиліт для злому.

Їх можна підрозділити на декілька категорій

  • Відладчики. Дозволяють переривати виконання програми досягши заздалегідь заданих умов, виробляти покрокове виконання програми, змінювати вміст пам'яті і регістрів і тому подібне. Найбільш популярним, зручним і потужним являється відладчик SoftICE, який при досить примітивному інтерфейсі має пристойні можливості і дуже стабільно працює.

  • Дизасемблери. Виробляють дизасемблювання програми для подальшого вивчення отриманого коду. Один з найбільш потужних і популярних - IDA. Від дизасемблера досить легко захиститися - зашифрувати або заархівувати програму. Тоді дизасемблюється тільки архіватор або кодувальник. Проте тот-же IDA має потужну вбудовану скриптовой мову, що дозволяє виробляти розшифровку програми

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

  • Засоби пасивного аналізу програми. Показують різну інформацію про програму - витягають ресурси, показують зв'язки, використовувані бібліотеки. Класичний приклад - утиліта DEPENDS.EXE з комплекту Visual Studio. Вона показує, які бібліотеки використовуються програмою і які функції імпортуються.

  • Інші утиліти. Їх велика кількість (можна знайти на диску типу "Усе для хакера", причому удосталь). Це різноманітні редактори, аналізатори ..

Найбільш популярні наступні програми моніторингу :

  • FileMon - утиліта, що дозволяє вести моніторинг усіх операцій з файлами. Має зручний фільтр, може зберігати звіт у файлі. Тому немає сенсу робити "секретні" файли де-небудь в Windows/System - їх елементарно знайти.

  • RegMon - аналог FileMon, тільки ведеться моніторинг усіх операцій з реєстром. Аналогічно файлам, безглуздо створювати в реєстрі "секретні" ключі - вони відразу впадають у вічі.

  • PortMon - моніторинг роботи з портами введення/виводу

  • TCP_VIEW - монітор з'єднань по TCP - IP

  • RegUtils - набір утиліт для контролю за реєстром - робить копії реєстру, дозволяє порівнювати копії і переглядати зміни.

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

Основи побудови захисту - крок за кроком

Источник: https://files.student-it.ru/previewfile/7000