В криптографії, одностороння функція стиснення — це така функція, яка перетворює два вхідні аргументи фіксованої довжини, на результат фіксованої довжини.[1] Функція одностороння в тому сенсі, що важко вгадати аргументи значення функції для яких дорівнює заданій величині. Односторонні функції стиснення не пов'язані зі звичними алгоритмами стиснення даних, які натомість можуть бути оберненими точно (стиснення без втрат) або приблизно (стиснення з втратами).
Односторонні функції стиснення часто будуються з блочних шифрів. Для того, щоб перетворити будь-який звичайний блочний шифр в односторонню функцію стиснення, існують методи Девіса-Мейєра, Матіса-Мейера-Осеаса, Міагучі-Пренеля (функції стиснення одноблокової довжини), та MDC-2/Меєра-Шіллінга, MDC-4, Hirose (довжини два блоки). Ці методи докладно описані нижче. (MDC-2[en] - також назва хеш-функціх запатентованої IBM.)
Стиснення
Функція стиснення змішує два аргументи фіксованої довжини, і повертає один результат фіксованої довжини, розмір якого дорівнює розміру одного з аргументів. На це також можна дивитись як на функцію яка перетворює один великий аргумент фіксованої довжини, на коротший результат фіксованої довжини.
Наприклад, хай аргумент А має довжину в 128 біт, аргумент B теж 128 біт, і вони стискуються в один результат довжини 128 біт. Це те ж саме, якщо б один-єдиний 256-бітовий аргумент стискувався в 128-бітний результат.
Деякі функції стиснення не стискують вдвічі, а з якимось іншим коефіцієнтом. Наприклад, аргумент А може бути 256-бітовим, а аргумент B 128-бітовим, і вони можуть стискатися в 128 біт. Тобто, в цілому 384 вхідних бітів стискаються разом до 128 вихідних бітів.
Змішування виконується таким чином щоб досягти повного лавинового ефекту, коли кожен вихідний біт залежить від кожного вхідного біта.
Одностороння функція - це функція яку легко обчислити, але важко обчислити обернену до неї. Одностороння функція стиснення (яку також називають геш-функцією) повинна мати наступні властивості:
Легко обчислити: Якщо відомі аргументи, легко отримати результат.
Стійкість до прообразу: Якщо зловмисник знає лише вихідні дані, для нього буде нереально обчислити вхідні. Іншими словами, для результату функції h, неможливо обчислити m таке що hash(m)=h.
Стійкість до другого прообразу: Маючи вхідні дані m1 вихідними для яких є h, треба щоб знайти інше значення m2 на виході для якого теж було h тобто hash(m1)=hash(m2).
Стійкість до колізій[en]: Треба щоб знайти два такі різні аргументи для яких функція дає однаковий результат було важко, тобто зловмисник не повинен могти знайти пару повідомлень m1 ≠ m2 таких що hash(m1) = hash(m2). Через парадокс днів народження (див. також атака «днів народження») існує 50% ймовірність знайти колізію за час приблизно 2n/2 де n кількість біт у виході геш-функції. Таким чином атака на геш-функцію не повинна знаходити колізію за менш ніж 2n/2 спроб.
В ідеалі, під "неможливістю" в стійкості до прообразу і другого прообразу слід розуміти обчислювальну складність приблизно 2n, де n - кількість біт у виході функції. Проте, особливо для випадку стійкості до другого прообразу це досить складна проблема.[джерело?]
Типовим застосуванням односторонніх функцій стискання є їх використання в будові Меркле-Демґарда всередині криптографічних геш-функцій. Популярні геш-функції, такі наприклад як MD5, SHA-1 і SHA-2 використовують цю будову.
Геш функція повинна бути здатною перетворити повідомлення довільної довжини у результат фіксованої довжини. Цього можна досягти розбиваючи ввід на послідовність блоків однакової довжини, і опрацьовуючи їх послідовно, використовуючи односторонню функцію стискання. Функція стискання повинна бути або сконструйована спеціально для гешування, або побудована з блочного шифру.
Коли застосовується доповнення за довжиною (яке також називають MD-посилення (англ.MD-strengthening)), атаки не здатні знайти колізії швидше за час парадоксу днів народження (2n/2, де n розмір блоку в бітах) якщо використана функція f стійка до колізій.[2][3] Таким чином, Будова Меркла-Демґардаt зводить задачу знаходження правильної геш-функції, до знаходження функції стискання.
Атака знаходження другого прообразу (маючи повідомлення m1 зловмисник знаходить інше повідомлення m2 таке що hash(m1) = hash(m2)) можлива, згідно Келсі та Шнаєром[4] для 2k-блокового повідомлення за час k × 2n/2+1+2n-k+1. Складність більша за 2n/2 але нижча за 2n при довгих повідомленнях, і для коротких повідомлень наближається до 2n.
Побудова з блочних шифрів
Також, односторонні функції стискання будують з блочних шифрів.
Блочні шифри (як і односторонні функції стискання) отримують на вхід дві послідовності фіксованої довжини (ключ і відкритий текст) і повертають одну вихідну послідовність (шифротекст) яка має таку саму довжину як і вхідний відкритий текст.
Проте, сучасні блочні шифри лише частково односторонні. Тобто, маючи відкритий текст і шифротекст нереально знайти ключ що перетворює відкритий текст в шифротекст. Але маючи шифротекст і ключ, знайти відкритий текст можна просто використавши функцію дешифрування блочного шифру. Тому, щоб перетворити блочний шифр в односторонню функцію стискання потрібні деякі додаткові операції.
Деякими методами для перетворення звичайного блочного шифру в односторонню функцію стискання є методи Девіса-Меєра, Матіаса-Меєра-Осеаса, Міягучі-Пренеля (функції стискання одноблокової довжини) та MDC-2, MDC-4, Хіроші (функції стискання двоблокової довжини).
Функції стискання одноблокової довжини виводять скільки ж біт, скільки обробляється використаним блочним шифром. Відповідно, функції стискання двоблокової довжини виводять вдвічі більше біт.
Якщо блочний шифр має розмір блоку[en] наприклад 128 біт, методи одноблокової довжини створюють геш-функцію яка має розмір блоку 128 біт і дає геш розміром 128 біт. Методи стискання двоблокової довжини утворюють геші з розміром вдвічі більшим за розмір блоку блочного шифру. Таким чином 128-бітний шифр може перетворитися в 256-бітну геш-функцію.
Ці методи потім використовуються в будові Меркле — Демґарда і їх детальніше розглядають нижче.
В даній схемі блок повідомлення і попереднє значення геш-функції надходять в якості ключа й блоку відкритого тексту відповідно на вхід блочного шифру . Одержаний в результаті шифрування блок закритого тексту підсумовується (операція XOR) з результатом попередньої ітерації гешування () для отримання наступного значення геш-функції (). [5]
Якщо блоковий шифр використовує, наприклад, 256-бітний ключ, то кожен блок повідомлень () являє собою 256-бітний фрагмент повідомлення. Якщо ж блоковий шифр використовує розмір блоку в 128 біт, то вхідні й вихідні значення хеш-функції в кожному раунді становлять 128 біт.
Важливою властивістю конструкції Девіса-Мейєра є те, що навіть якщо базовий блок шифрування є повністю безпечним, можна обчислити нерухомі точки для побудови: для будь-якого можна знайти значення таке що : просто нужно установить .[6]
Безпека структури Девіса-Мейєра була вперше доведена Р.Вінтерніцом. [7]
Структура Матіса-Мейєра-Осеаса
Це версія схеми Девіса-Мейєра: блоки повідомлення застосовуються як ключі криптосистеми. Схема може бути використана, якщо блоки даних і ключ шифрування мають один і той же розмір. Наприклад, AES добре підходить для цієї мети.
У даній конструкції блок повідомлення і попереднє значення хеш-функції надходять в якості ключа й блоку відкритого тексту відповідно на вхід блочного шифру . Але вже значення піддається попередній обробці відповідно до розділу через можливі відмінності в розмірах геш-суми й розмірі ключа шифру . Ця функція реалізує відображення n-бітного значення хеш-функції в k-бітний ключ шифру . В результаті застосування операції шифрування, виходить блок закритого тексту, який підсумовується з відповідним йому блоком відкритого тексту (). [8]
↑Ivan Damgård. A design principle for hash functions. In Gilles Brassard, editor, CRYPTO, volume 435 of LNCS, pages 416–427. Springer, 1989.
↑Ralph Merkle. One way hash functions and DES. In Gilles Brassard, editor, CRYPTO, volume 435 of LNCS, pages 428–446. Springer, 1989.
↑John Kelsey and Bruce Schneier. Second preimages on n-bit hash functions for much less than 2n work. In Ronald Cramer, editor, EUROCRYPT, volume 3494 of LNCS, pages 474–490. Springer, 2005.