- •Лекція 8. Хеш-функції й коди автентифікації повідомлень - мас
- •Вимоги до хеш-функцій
- •Прості хеш-функції
- •Використання ланцюжка зашифрованих блоків
- •На сучасному етапі як правило застосовуються хеш-функції md5(rfc 1321) і sha-1 Порівняння sha-1 і md5
- •Алгоритм обробки одного блоку повідомлення
- •Логіка виконання держстандарт 3411
- •Коди автентифікації повідомлень - мас Вимоги до мас
- •Мас на основі алгоритму симетричного шифрування
Прості хеш-функції
Всі хеш-функції виконуються в такий спосіб. Вхідне значення (повідомлення, файл і т.п.) розглядається як послідовність n-бітних блоків. Вхідне значення обробляється послідовно блок за блоком, і створюється m-бітне значення хеш-кода.
Одним з найпростіших прикладів хеш-функції є побітний XOR кожного блоку:
Сi
= bi1
bi2
. . .
bik
Де
Сi
- i-ий біт хеш-кода,
1
|
k - число n-бітних блоків входу. |
bij - i-ий біт в j-ом блоці. |
- операція XOR. |
У результаті виходить хеш-код довжини n, відомий як поздовжній надлишковий контроль. Це ефективно при випадкових збоях для перевірки цілісності даних.
Часто при використанні подібного поздовжнього надлишкового контролю для кожного блоку виконується однобітне циклічне зрушення після обчислення хеш-кода. Це можна описати в такий спосіб.
Установити n-бітний хеш-код у нуль.
Для кожного n-бітного блоку даних виконати наступні операції:
зрушити циклічно поточний хеш-код уліво на один біт;
виконати операцію XOR для чергового блоку й хеш-кода.
Це дасть ефект "випадковості" входу й знищить будь-яку регулярність, що є присутнім у вхідних значеннях.
Хоча другий варіант вважається більш кращим для забезпечення цілісності даних і запобігання від випадкових збоїв, він не може використовуватися для виявлення навмисних модифікацій переданих повідомлень. Знаючи повідомлення, що атакує легко може створити нове повідомлення, що має той же самий хеш-код. Для цього варто підготувати альтернативне повідомлення й потім приєднати n-бітний блок, що є хеш-кодом нового повідомлення, і блок, що є хеш-кодом старого повідомлення.
Хоча простого XOR або ротаційного XOR (RXOR) недостатньо, якщо цілісність забезпечується тільки зашифрованим хеш-кодом, а саме повідомлення не шифрується, подібна проста функція може використовуватися, коли все повідомлення й приєднаний до нього хеш-код шифруються. Але й у цьому випадку варто пам'ятати про те, що подібна хеш-функція не може простежити за тим, щоб при передачі послідовність блоків не змінилася. Це відбувається в силу того, що дана хеш-функція визначається в такий спосіб: для повідомлення, що складає з послідовності 64-бітних блоків Х1, Х2,..., ХN, визначається хеш-код З як поблочний XOR всіх блоків, що приєднується як останній блок:
С = ХN+1 = X1 X2 . . . XN
Потім все повідомлення шифрується, включаючи хеш-код, у режимі СВС для створення зашифрованих блоків Y1, Y2, ..., YN+1. По визначенню СВС маємо:
Х1 = IV DK [Y1]
Хi = Yi-1 DK [Yi]
ХN+1 = YN DK [YN+1]
Але XN+1 є хеш-кодом:
ХN+1 = X1 X2 . . . XN =
(IV DK [Y1]) (Y1 DK [Y2]) . . .
( YN-1 DK [YN])
Так як співмножники в попередній рівності можуть обчислюватися в будь-якому порядку, отже, хеш-код не буде змінений, якщо зашифровані блоки будуть переставлені.
Первісний стандарт, запропонований NIST, використовував простий XOR, що застосовувався до 64-бітних блоків повідомлення, потім все повідомлення шифрувалося, використовуючи режим СВС.
Криптоаналіз хеш-функцій
Можливі різного роду атаки, засновані на "парадоксі дня народження". Можлива наступна стратегія:
Супротивник створює 2m/2 варіантів повідомлення, кожне з яких має деякий певний зміст. Супротивник підготовляє таку ж кількість повідомлень, кожне з яких є підробленим і призначено для заміни справжнього повідомлення.
Два набори повідомлень рівняються в пошуках пари повідомлень, що мають однаковий хеш-код. Імовірність успіху відповідно до "парадокса дня народження" більше, ніж 0,5. Якщо відповідна пара не знайдена, то створюються додаткові вихідні й підроблені повідомлення доти, поки не буде знайдена пара.
Атакуючий пропонує відправникові вихідний варіант повідомлення для підпису. Цей підпис може бути потім приєднана до підробленого варіанта для передачі одержувачеві. Так як обидва варіанти мають той самий хеш-код, буде створений однаковий підпис. Супротивник буде впевнений в успіху, навіть не знаючи ключа шифрування.
Таким чином, якщо використовується 64-бітний хеш-код, то необхідна складність обчислень становить порядку 232.
На закінчення відзначимо, що довжина хеш-кода повинна бути досить великою. Довжина, рівним 64 бітам, у цей час не вважається безпечною. Переважніше, щоб довжина становила порядку 100 біт.
