Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
35
Добавлен:
19.02.2016
Размер:
286.72 Кб
Скачать

ЛЕКЦІЯ 7 ІТЕРАТИВНІ ГЕШ-ФУНКЦІЇ ТА КОДИ MAC

Геш-функція - це перетворення бітового рядка довільної довжини у рядок (блок) фіксованої довжини (зазвичай, 160-512 битів), яке має наступні властивості.

Відновлення виходячи із співвідношення , обчислювально неможливо.

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

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

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

7.1 Крокові функції стиску та коди автентифікації повідомлень

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

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

Розглянемо типові ітеративні геш-функції, для випадку, коли розмірність аргументів крокової функції дорівнює довжині геш-коду .

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

Далі обчислюється послідовність ітерацій: , , , де - фіксований несекретний вектор (вектор ініціалізації).

У якості геш-коду приймається значення .

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

У цих випадках значення називається кодом автентифікації повідомлення. Код автентифікації зазвичай позначається абревіатурою (Message Authentication Code).

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

, , , .

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

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

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

, .

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

В стандартизованих геш-функціях, скажимо, SHA-1, ГОСТ 34.311-95, застосовуються складні крокові функції стиску. Зокрема, розмірності аргументів крокової функції не обов’язково однакові і не обов’язково співпадають з довжиною геш-коду.

Взагалі, слід зауважити, що побудова геш-функцій - дуже складна задача.

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

7.2 Алгоритм НМАС

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

У комп’ютерних системах та мережах використовується типовий алгоритм обчислення на основі довільної вбудованої геш-функції . Стандартне позначення цього алгоритму: .

Вхідні дані алгоритму – повідомлення і ключ , що розглядаються як рядки бітів.

Алгоритм обчислення можна записати у виді формули:

, де .

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

Довжина ключа також вимагає узгодження з довжиною блоку повідомлення.

Нехай кількість бітів у блоці повідомлення є кратною вісьми і - довжина геш-коду функції .

Якщо довжина ключа перевищує , то застосовується ключ .

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

З урахуванням цих випадків ключ у формулі позначено через .

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

При цьому, , .

7.3 Алгоритм SHA-1

Алгоритм SHA (Secure Hash Algorithm) є частиною стандарту SHS, що прийнятий АНБ і Національним інститутом стандартів і технологій США (NIST) в 1993г. Для версії SHA-1 довжина геш-коду становить 160 бітів.

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

Розширене повідомлення обробляється блоками по 512 бітів. При цьому, окремий блок розглядається як масив, що складається з 16 слів, кожне довжиною у 32 біти.

Кожний блок обробляється за одну ітерацію (цикл) Обчислення геш-коду здійснюється як послідовність ітерацій з однокроковою функцією стиску , , .

Блок є конкатенацією п’яти початкових зарезервованих значень змінних , довжиною у 32 біти, які в системі за основою 16 -мають наступний запис:

,, ,,.

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

Таким чином, вхідними даними циклу є блоки , довжиною 160 та 512 бітів відповідно.

Кожний цикл складається з 80 кроків. На кожному кроці цикла з номером обробляється слово , довжиною у 32 біти.

На початку кожного циклу створюються копії змінних : .

Слова, що обробляються на циклі утворюються з блока наступним чином.

1. Блок розглядається як послідовність 16 слів , , виходячи з яких, за рекурентним законом формуються інші 64 слова. Рекурентне співвідношення має вид:

, .

Тут функція означає циклічний зсув слова на розрядів вліво, а операція  - поразрядную сумму слів за модулем два.

2. Обробка вісьмидесяти слів виконується послідовно, групами по 20 слів в групі. Кожній з чотирьох груп відповідають 20 кроків циклу (один раунд):;;;.

Крім того, з кожним раундом , пов’язані константа довжиною у 32 біти та функція від трьох змінних, кожна з яких є словом тієї ж довжини. При обробці слова використовуються константа і функція, що пов’язані з відповідним раундом , .

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

, , , , , .

Тут - Допоміжна змінна, а додавання виконується за модулем.

4. Після 80 кроків обробки блоку повідомлення цикл завершується модифікацією змінних : , , , , (додавання за ).

Кінець циклу.

Для повноти, приведемо та , що застосовуються в раундах , .

, ;

, ;

, ;

, .

4

Соседние файлы в папке Материалы что дал Мухачев-1