64 бітове шифрування. Налаштування аутентифікації і шифрування wl-ззоgе. бітного WEP шифрування

Comodo Disk Encryption захищає цінну інформацію шляхом шифрування будь-якого розділу жорсткого диска в системі. Шифрування - це процес кодування даних за допомогою алгоритму, який відомий тільки програмою-шифратору, тому прочитати дані не зможе ніхто інший. Шифрування відбувається «на льоту» тому немає необхідності вимикати або перезавантажувати комп'ютер. Comodo Disk Encryption пропонує кілька варіантів доступу до зашифрованих даних, які ви можете вибрати залежно від ваших вимог. Перший варіант - це установка пароля і використання цього кожен раз, коли ви хочете отримати доступ до захищених даних. Другий метод доступу - це використання USB пристрою в якості «ключа» для сховища даних. Для доступу до даних USB пристрій повинен бути приєднано до комп'ютера. І третій варіант - використання і пароля і USB пристрої одночасно. Цей варіант найнадійніший. Для того, щоб розшифрувати дані вам потрібно буде підключити пристрій і ввести пароль.
Зберігання та захист цінних даних - це питання, яке було і буде дуже актуальним. Зміст конфіденційної інформації на стаціонарних і портативних комп'ютерах пов'язано з певним ризиком втрати цієї інформації, який постійно наростає. І тільки лише з використанням такого софта, як Disk Encryption від Comodo може вирішити цю проблему. Не нехтуйте шифруванням цінних даних - це захистить їх від інших користувачів вашого комп'ютера, а також від мережевих посягань з боку хакерів.

Ключові особливості та функції

  • Захист даних від хакерів і будь-якого іншого несанкціонованого доступу.
  • Навіть якщо ваш ноутбук буде вкрадений, зловмисники не зможуть прочитати зашифровані дані.
  • Спокійно дозволяйте іншим людям користуватися вашим комп'ютером, знаючи, що секретні дані не потраплять їм на очі.

спеціальні вимоги

32-бітове шифрування

  • Windows 7 - 32 bit / Windows Vista / Windows XP / Windows 2000 / Windows Server 2003

64-бітове шифрування

  • Windows 7 - 64 bit / Windows Vista / Windows XP / Windows Server 2003
  • 32 MB оперативної пам'яті і 6 MB вільного місця на диску

Історія

До появи Blowfish існували алгоритми були або запатентованими, або ненадійними, а деякі і зовсім трималися в секреті (наприклад, Skipjack). Алгоритм був розроблений в 1993 році Брюсом Шнайером в якості швидкої і вільної альтернативи застарілому DES і запатентованому IDEA. За заявою автора, критерії проектування Blowfish були:

  • швидкість (шифрування на 32-бітних процесорах відбувається за 26 тактів);
  • простота (за рахунок використання простих операцій, які зменшують ймовірність помилки реалізації алгоритму);
  • компактність;
  • настроюється стійкість.

опис алгоритму

параметри

  • секретний ключ K (від 32 до 448 біт)
  • 32-бітові ключі шифрування P1-P18
  • 32-бітові таблиці замін S1-S4: S1 S1 .. S1 S2 S2 .. S2 S3 S3 .. S3 S4 S4 .. S4

Функція F (x)

Алгоритм шифрування 64-бітного блоку з відомим масивом P і F (x)

Мережа Фейстеля при зашифрованими

алгоритм Blowfish

Розділений на 2 етапи:

  1. Підготовчий - формування ключів шифрування по секретному ключу.
    • Ініціалізація масивів P і S за допомогою секретного ключа K
      1. Ініціалізація P1-P18 фіксованою рядком, що складається з шістнадцяткових цифр мантиси числа пі.
      2. Проводиться операція XOR над P1 з першими 32 бітами ключа K, над P2 з другими 32-бітами і так далі.
        Якщо ключ K коротше, то він накладається циклічно.
    • Шифрування ключа і таблиць замін
      1. Алгоритм шифрування 64-бітного блоку, використовуючи початкові ключі P1-P18 і таблицю замін S1-S4, шифрує 64 бітну нульову (0x0000000000000000) рядок. Результат записується в P1, P2.
      2. P1 і P2 шифруються зміненими значеннями ключів і таблиць замін. Результат записується в P3 і P4.
      3. Шифрування триває до зміни всіх ключів P1-P18 і таблиць замін S1-S4.
  2. Шифрування тексту отриманими ключами і F (x), з попередніми розбиттям на блоки по 64 біта. Якщо неможливо розбити початковий текст точно на блоки по 64 біта, використовуються різні режими шифрування для побудови повідомлення, що складається з цілого числа блоків. Cуммарная необхідна пам'ять 4168 байт: P1-P18: 18 змінних по 32 біта; S1-S4: 4x256 змінних по 32 біта.

Дешифрування відбувається аналогічно, тільки P1-P18 застосовуються в зворотному порядку.

Вибір початкового значення P-масиву і таблиці замін

Немає нічого особливого в цифрах числа пі. Даний вибір полягає в ініціалізації послідовності, не пов'язаної з алгоритмом, яка могла б бути збережена як частина алгоритму або отримана при необхідності (Пі (число)). Як вказує Шнайер: «Підійде будь-який рядок з випадкових бітів цифр числа e, RAND-таблиці, або випадкові згенеровані цифри.»

крипостійкість

  • слабкий S-box (і породжує його слабкий ключ) означає, що існує такі i, j, N \u003d (1,2,3,4): SN [i] \u003d\u003d SN [j]

Крипостійкість головним чином залежить від F (x). На це вказав Serge Vaudenay, кажучи про наявність невеликого класу слабких ключів (генеруючих слабкі S-box): ймовірність появи слабкого S-box дорівнює. Він також розглянув спрощений варіант Blowfish, з відомою функцією F (x) і слабким ключем. Для цього варіанту потрібно обраних відкритих текстів (t - число раундів, а символи означають операцію отримання цілої частини числа). Ця атака може бути використана тільки для алгоритму с. Для потрібна відкритих текстів, причому для варіанту з відомим F (x) і випадковим ключем потрібно відкритих текстів. Але дана атака не ефективна для Blowfish з 16 раундами.

John Kelsey розробив атаку, яка дозволяла зламати 3-ітераційний Blowfish. Вона спирається на факт, що операції додавання по модулю і XOR НЕ комутативні.

Неможливо заздалегідь визначити чи є ключ слабким. Проводити перевірку можна тільки після генерації ключа.

Крипостійкість можна налаштовувати за рахунок зміни кількості раундів шифрування (збільшуючи довжину масиву P) і кількості використовуваних S-box. При зменшенні використовуваних S-box зростає ймовірність появи слабких ключів, але зменшується використовувана пам'ять. Адаптуючи Blowfish на 64-бітної архітектуру, можна збільшити кількість і розмір S-box (а отже і пам'ять для масивів P і S), а також ускладнити F (x), причому для алгоритму з такою функцією F (x) неможливі вищевказані атаки.

Модифікація F (x): на вхід подається 64-бітний блок який ділиться на вісім 8-бітних блоків (X1-X8). Результат обчислюється за формулою, де
На сьогоднішній день (листопад 2008) не існує атак, які виконуються за розумний час. Успішні атаки можливі лише через помилки реалізації.

Приклад роботи алгоритму

Приклад роботи вільно розповсюджуваної версії алгоритму Blowfish.
параметри: Розмір ключа: 448 біт Розмір блоку: 64 біт Число раундів: 16 режим: ECB

застосування

  • хешування паролів
  • захист електронної пошти та файлів
    • GnuPG (безпечне зберігання і передача)
  • в лініях зв'язку: зв'язка ElGamal (не запатентований) або RSA (дія патенту закінчилося у 2000 році) і Blowfish замість IDEA
    • в маршрутизаторі Intel Express 8100 з ключем довжиною 144 біта
  • забезпечення безпеки в протоколах мережного і транспортного рівня
    • PuTTY (мережевий рівень)
    • SSH (транспортний рівень)
    • OpenVPN (створення зашифрованих каналів)

Порівняння з симетричними криптосистемами

Швидкість шифрування алгоритму багато в чому залежить від використовуваної техніки і системи команд. На різних архітектурах один алгоритм може значно випереджати за швидкістю його конкурентів, а на іншому ситуація може зрівнятися або навіть змінитися прямо в протилежну сторону. Більш того, програмна реалізація значно залежить від використовуваного компілятора. Використання ассемблерного коду може підвищити швидкість шифрування. На швидкість шифрування впливає час виконання операцій mov, add, xor, причому час виконання операцій збільшується при зверненні до оперативної пам'яті (для процесорів серії Pentium приблизно в 5 разів). Blowfish показує більш високі результати при використанні кеша для зберігання всіх подключей. У цьому випадку він випереджає алгоритми DES, IDEA. На відставання IDEA впливає операція множення по модулю. Швидкість Twofish може бути близька за значенням з Blowfish за рахунок більшого шифруемого блоку.

Хоча Blowfish по швидкості випереджає його аналоги, але при збільшенні частоти зміни ключа основний час його роботи буде йти на підготовчий етап, що в сотні разів зменшує його ефективність.

Див. також

посилання

  • Serge Vaudenay.On the weak Keys of Blowfish (англ.)
  • Dieter Schmidt.Kaweichel, an Extension of Blowfish for 64-Bit Architectures (англ.)

Наших «збочень з імпортозаміщенням» (давно це було, Євген працює над докторською дисертацією, і ми всі чекаємо, коли буде можна підписувати його статті «професором». 😉 - Прим. Ред.) Ми детально ознайомилися з алгоритмом шифрування «Коник», який визначений в ГОСТ 34.12-2015. Крім цього алгоритму, в Гості описаний ще один, з довжиною шифруемого блоку в 64 біта, який носить назву «Магма».

Цей алгоритм є точною копією алгоритму блочного шифрування з старого ГОСТ 28147-89, за одним винятком. У новому ГОСТ 34.12-2015 визначена і задана таблиця перестановок для нелінійного биективное перетворення, яка в старому ГОСТ 28147-89 була відсутня, і завдання її елементів повністю віддавалася в руки людей, що реалізують даний алгоритм. Теоретично, якщо визначити елементи таблиці перестановок самостійно і зберегти таблицю в таємниці, це дозволить підвищити стійкість алгоритму шифрування (за рахунок цього фактично збільшується довжина ключа), однак, як бачимо, розробники ГОСТ 34.12-2015 вирішили позбавити самостійності користувачів стандарту.

Як вже було сказано, довжина шифруемого блоку в алгоритмі «Магма» - 64 біта. Довжина ключа шифрування - 256 біт.

WARNING

При читанні ГОСТу врахуй, що у всіх 8-байтових масивах тестових послідовностей нульовий байт знаходиться в кінці масиву, а сьомий, відповідно, на початку (якщо ти уважно читав статті про «Стрибог» і «Коник», то ця особливість наших криптостандарта тобі повинна бути знайома).

трохи теорії

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


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



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

Ітераційні ключі виходять з вихідного 256-бітного ключа. Вихідний ключ ділиться на вісім 32-бітових подключей, і далі вони використовуються в наступному порядку: три рази з першого по восьмий і один раз з восьмого по перший.



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


Отже, після короткого і невеликого занурення в теорію починаємо кодіть ...

Базові функції стандарту

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

// Розмір блоку 4 байта (або 32 біта) #define BLOCK_SIZE 4 ... // Визначаємо тип vect як 4-байтовий масив typedef uint8_t vect;

Додавання двох довічних векторів по модулю 2

Кожен байт першого вектора КСОР з відповідним байтом другого вектора, і результат пишеться в третій (вихідний) вектор:

Static void GOST_Magma_Add (const uint8_t * a, const uint8_t * b, uint8_t * c) (int i; for (i \u003d 0; i< BLOCK_SIZE; i++) c[i] = a[i]^b[i]; }

Додавання двох довічних векторів по модулю 32

Ця функція аналогічна функції під назвою «складання в кільці відрахувань по модулю 2 певною мірою n» з алгоритму «Стрибог», за винятком того, що n в нашому випадку дорівнюватиме 32, а не 512, як у стандарті «Стрибог». Два вихідних 4-байтових вектора представляються як два 32-бітних числа, далі вони складаються, переповнення, якщо воно з'являється, відкидається:

Static void GOST_Magma_Add_32 (const uint8_t * a, const uint8_t * b, uint8_t * c) (int i; unsigned int internal \u003d 0; for (i \u003d 3; i\u003e \u003d 0; i--) (internal \u003d a [i] + b [i] + (internal \u003e\u003e 8); c [i] \u003d internal & 0xff;))

Нелінійне биективное перетворення (перетворення T)

На відміну від алгоритмів «Стрибог» і «Коник» (до речі, там це перетворення називається S-перетворенням) таблиця перестановок тут використовується інша:

Static unsigned char Pi \u003d ((1,7,14,13,0,5,8,3,4,15,10,6,9,12,11,2), (8,14,2,5,6 , 9,1,12,15,4,11,0,13,10,3,7), (5,13,15,6,9,2,12,10,11,7,8,1,4 , 3,14,0), (7,15,5,10,8,1,6,13,0,9,3,14,11,4,2,12), (12,8,2,1 , 13,4,15,6,7,0,10,5,3,14,9,11), (11,3,5,8,2,15,10,13,14,1,7,4 , 12,9,6,0), (6,8,2,3,9,10,5,12,1,14,4,7,11,13,0,15), (12,4,6 , 2,10,5,11,9,14,8,13,7,0,3,15,1));

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

Код самої функції перетворення T виходить такий:

Static void GOST_Magma_T (const uint8_t * in_data, uint8_t * out_data) (uint8_t first_part_byte, sec_part_byte; int i; for (i \u003d 0; i< 4; i++) { // Извлекаем первую 4-битную часть байта first_part_byte = (in_data[i] & 0xf0) >\u003e 4; // Витягуємо другу 4-бітну частина байта sec_part_byte \u003d (in_data [i] & 0x0f); // Виконуємо заміну відповідно до таблиці підстановок first_part_byte \u003d Pi; sec_part_byte \u003d Pi; // «Склеюємо» обидві 4-бітові частини назад в байт out_data [i] \u003d (first_part_byte<< 4) | sec_part_byte; } }

Продовження доступно тільки учасникам

Варіант 1. Приєднайся до товариства «сайт», щоб читати всі матеріали на сайті

Членство в співтоваристві протягом зазначеного терміну відкриє тобі доступ до ВСІХ матеріалами «Хакера», збільшить особисту накопичувальну знижку і дозволить накопичувати професійний рейтинг Xakep Score!