RIPEMD-128
RIPEMD-128 (англ. RACE Integrity Primitives Evaluation Message Digest) — криптографічна геш-функція, розроблена Гансом Доббертіном, Антоном Боселаерсом і Бартом Пренелем у 1996 році. ІсторіяRIPEMD має кілька геш-функцій, що відносяться до сімейства MD-SHA. Першою з них була RIPEMD-0, рекомендована в 1992 році консорціумом для Оцінки примітивів цілісності RACE (англ. RACE Integrity Primitives Evaluation, RIPE) в якості поліпшеної версії алгоритму MD4[1]. Криптоаналіз, проведений Гансом Доббертіном, показав, що даний алгоритм не є безпечним в плані наявності колізій, що пізніше було підтверджено знайденими уразливостями[1]. RIPEMD-128 (спільно з 160-бітної версією, RIPEMD-160) була представлена як заміна оригінальної RIPEMD, яка теж була 128-бітною. Були розроблені й інші версії алгоритму, з більшою довжиною хешу: RIPEMD-256 і RIPEMD-320 (відповідно 256 і 320-бітові). Іншою причиною переходу до алгоритмів, що видають результат із великою кількістю біт, був стрімкий розвиток обчислювальної техніки, (згідно закону Мура). Наявні в той час алгоритми з кожним роком ставали все більш і більш уразливими до колізійних атак шляхом повного перебору. Проте, RIPEMD-128 знайшов своє застосування в деяких банківських додатках[1]. У 2004 році була стандартизована (ISO / IEC 10118-3: 2004 [Архівовано 2 лютого 2017 у Wayback Machine.]). АлгоритмДля довільного вхідного повідомлення геш-функція генерує 128-розрядне геш-значення — дайджест повідомлення. Алгоритм заснований на алгоритмі хешування MD4. Гешування MD4[1] складається з 48 операцій, що містять застосування нелінійних булевих функцій, згрупованих в 3 раунди по 16 операцій. В алгоритмі RIPEMD-128 збільшено число раундів до 4. Крім того, використовуються інші булеві функції і значення констант[1]. В алгоритмі паралельно виконуються дві лінії (потоку), які умовно поділяють на Ліву і Праву. Алгоритм складається з декількох основних кроків: 1. Додавання відсутніх бітівАлгоритм оперує з блоками даних довжиною 512 біт, вхідні повідомлення попередньо приводиться до необхідного розміру. Для початку, незалежно від початкової довжини повідомлення, до нього додається один біт, що дорівнює 1. Далі до нього додаються біти, рівні 0, до тих пір, поки довжина отриманої послідовності не стане рівною 448 біт по модулю 512. У результаті розширення, до довжини в 512 біт модифікованому повідомленням бракує рівно 64 біт. На цьому кроці до нього може бути додано від 1 до 512 біт. 2. Додавання довжини повідомленняНа наступному кроці до 448-бітного отриманого повідомлення додається довжина вихідного повідомлення (до застосування першого кроку) в 64-бітному поданні. У разі, якщо вихідна довжина повідомлення перевищує 2 64 біт, то від її бітової довжини використовується тільки молодші 64 біта. Причому, довжина вихідного повідомлення додається у вигляді двох 32-бітних слів: першим додаються молодші 32 біта, потім старші. Після цього етапу довжина модифікованого повідомлення стає рівною 512 бітам. Його також можна представити у вигляді 16 32-бітових слів. 3. Визначення функцій і константa. Порядок слів у повідомленніДля визначення порядку 32-бітних слів в повідомленні в кожному раунді використовуються різні комбінації функцій перестановок. Визначимо функцію перестановки :
А також функцію перестановки :
В кажному раунді порядок визначається наступним чином:
б. Булеві функціїУ кожному раунді для кожної лінії застосовуються певні булеві функції. Визначимо нелінійні побітові булеві функції:
У кожному раунді в залежності від лінії будуть застосовуватися:
б. Булеві функціїУ кожному раунді для кожної лінії застосовуються певні булеві функції. Визначимо нелінійні побітові булеві функції:
У кожному раунді в залежності від лінії будуть застосовуватися:
в. ЗрушенняДля обох ліній застосовуються такі зрушення ():
р КонстантиВ якості констант (), що застосовуються в алгоритмі, використовуються цілі частини наступних дійсних чисел:
4. Виконання гешуванняПісля завдання всіх вихідних функцій і констант, приведення повідомлення до необхідного розміру, можна переходити до виконання алгоритму. Виконання алгоритму відбувається двома паралельними шляхами (лініями). Обробка повідомлення відбувається словами по 16 слів у 32 біта. На кожному кроці для кожної з ліній виконується наступна операція: де позначає циклічний зсув на позицій. Швидкість роботиУ таблиці для порівняння наведені швидкості виконання MD-подібних функцій. Тестові програми були написані на мові асемблера і Сі, з використанням оптимізацій для тестової машини:[2]
Незалежне дослідження, проведене пізніше, показало досить схожі результати. У вимірі була використана Сі ++ бібліотека[3].
КрипостійкістьВ криптографії розрізняють два основних види атак на криптографічні геш-функції: атаку знаходження прообразу — спробу відшукати повідомлення із заданим значенням геш-кодування, і колізійну атаку — пошук двох різних вхідних блоків криптографічної геш-функції, які виробляють однакові значення геш-функції, тобто колізію геш-функції. Алгоритм RIPEMD-128, як і інші алгоритми сімейства RIPEMD, включаючи оригінальний перший, вважається стійким до атаки знаходження прообразу. Для RIPEMD-128 обчислювальна складність знаходження першого прообразу становить 2 128 , що збігається з максимальним для її бітової довжини значенням — пошук вимагає повного перебору[1].
Для скороченого варіанту RIPEMD-128 існують алгоритми знаходження першого праобразу, що вимагають меншої складності:[4]
Оригінальна RIPEMD не була безпечною з точки зору колізій. Про колізії стало відомо в 2004 році[5], в 2005 році вийшла відповідна стаття, присвячена криптоаналізу алгоритму[5]. Так як будь-яка криптографічна хеш-функція за визначенням вразлива до атаки «днів народження», то складність підбору не може перевищувати 2 N / 2 для N-бітної геш-функції. Однак, 128-бітна RIPEMD може бути «зламана» за час 2 18 , що набагато менше відповідного їй значення 2 64 . Повна RIPEMD-128 теоретично може бути «зламана». Колізійна атака має складність порядку 2 61.57 (проти необхідної 2 64 ). У той час як скорочений варіант схильний до більш успішних атак:
128-бітний вихід функції, яка не здавалась досить захищеною в найближчій перспективі[2], як раз і послужив приводом для переходу до RIPEMD-160. Для неї відомі лише колізійні атаки на скорочений варіант (48 з 80 раундів, 2 51 часу)[2]. ПрикладиRIPEMD128("") = "cdf26213a150dc3ecb610f18f6b38b46" RIPEMD128("a") = "86be7afa339d0fc7cfc785e72f578d33" RIPEMD128("abc") = "c14a12199c66e4ba84636b0f69144c77" Приклади, які демонструють Лавиновий ефект: RIPEMD128("aaa100") = "5b250e8d7ee4fd67f35c3d193c6648c4" RIPEMD128("aaa101") = "e607de9b0ca4fe01be84f87b83d8b5a3" Примітки
Посилання
|