Знаймо

Додати знання

приховати рекламу

Цей текст може містити помилки.

RIPEMD-160



План:


Введення

RIPEMD-160 (від англ. RACE Integrity Primitives Evaluation Message Digest) - хеш-функція, розроблена в Католицькому університеті Лувена Хансом Доббертіном (Hans Dobbertin), Антоном Босселарсом (Antoon Bosselaers) і Бартом Пренелом (Bart Preneel). Для довільного вхідного повідомлення функція генерує 160-розрядне хеш-значення, зване дайджестом повідомлення. RIPEMD-160 є покращеною версією RIPEMD, яка, в свою чергу, використовувала принципи MD4 і по продуктивності порівнянна з більш популярною SHA-1.

Також існують 128 -, 256 - і 320-бітові версії цього алгоритму, які, відповідно, називаються RIPEMD-128, RIPEMD-256 і RIPEMD-320. 128-бітна версія являє собою лише заміну оригінальної RIPEMD, яка також була 128-бітної і в якій були знайдені вразливості [1]. 256 - і 320-бітові версії відрізняються подвоєною довжиною дайджесту, що зменшує ймовірність колізій, але при цьому функції не є більш криптостійкості.

RIPEMD-160 була розроблена у відкритому академічному співтоваристві, на відміну від SHA-1 і SHA-2, які були створені NSA. З іншого боку, RIPEMD-160 на практиці використовується дещо рідше, ніж SHA-1.

Використання RIPEMD-160 не обмежений будь-якими патентами.


1. Реалізація RIPEMD-160

1.1. Крок 1. Додавання відсутніх бітів.

Повідомлення розширюється так, щоб його довжина в бітах за модулем 512 дорівнювала 448. Таким чином, в результаті розширення, повідомленням бракує 64 біта до довжини, кратної 512 бітам. Розширення виробляється завжди, навіть якщо повідомлення спочатку має потрібну довжину.

Розширення проводиться таким чином: один біт, що дорівнює 1, додається до повідомлення, а потім додаються біти, рівні 0, до тих пір, поки довжина повідомлення не стане рівною 448 по модулю 512. У підсумку, до повідомлення додається, як мінімум, 1 біт, і, як максимум, 512.


1.2. Крок 2. Додавання довжини повідомлення.

64-бітове представлення ~ B ~ (Довжини повідомлення перед додаванням набивальних бітів) додається до результату попереднього кроку. У малоймовірному випадку, коли ~ B ~ більше, ніж 2 ^ {64} , Використовуються тільки 64 молодших біта. Ці біти додаються у вигляді двох 32-бітних слів, і першим додається слово, що містить молодші розряди.

На цьому етапі (після додавання бітів і довжини повідомлення) ми отримуємо повідомлення довжиною кратною 512 бітам. Це еквівалентно тому, що це повідомлення має довжину, кратну 16-ти 32-бітовим словами. Кожне 32-бітне слово містить чотири 8-бітних, але слідують вони не підряд, а навпаки (наприклад, з восьми 8-бітних слів (abcdefgh) ми отримуємо два 32-бітних слова (dcba hgfe)).


1.3. Крок 3. Визначення діючих функцій і констант

I. Нелінійні побітові функції:

Виконання алгоритму хешування
  • f (j; x; y; z) = x \ otimes y \ otimes z ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ (0 \ le j \ le 15)
  • f (j; x; y; z) = (x \ wedge y) \ lor (\ neg x \ wedge z) ~ ~ ~ (16 \ le j \ le 31)
  • f (j; x; y; z) = (x \ lor \ neg y) \ otimes z ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ (32 \ le j \ le 47)
  • f (j; x; y; z) = (x \ land z) \ lor (y \ land \ neg z) ~ ~ ~ ~ (48 \ le j \ le 63)
  • f (j; x; y; z) = x \ otimes (y \ lor \ neg z) ~ ~ ~ ~ ~ ~ ~ ~ ~ (64 \ le j \ le 79)

II. Додаються шістнадцяткові константи:

  • K (j) = 00000000x ~ ~ ~ ~ ~ (0 \ le j \ le 15)
  • K (j) = 5A827999x ~ ~ ~ ~ (16 \ le j \ le 31)
  • K (j) = 6ED9EBA1x ~ ~ ~ ~ (32 \ le j \ le 47)
  • K (j) = 8F1BBCDCx ~ ~ ~ ~ ~ (48 \ le j \ le 63)
  • K (j) = A953FD4Ex ~ ~ ~ ~ (64 \ le j \ le 79)
  • K '(j) = 50A28BE6x ~ ~ ~ ~ (0 \ le j \ le 15)
  • K '(j) = 5C4DD124x ~ ~ ~ (16 \ le j \ le 31)
  • K '(j) = 6D703EF3x ~ ~ ~ ~ (32 \ le j \ le 47)
  • K '(j) = 7A6D76E9x ~ ~ ~ ~ (48 \ le j \ le 63)
  • K '(j) = 00000000x ~ ~ ~ ~ (64 \ le j \ le 79)

III. Вибір 32-бітних слів з повідомлення

  • r (j) = j при (0 \ le j \ le 15)
  • r (16 .. 31) = 7; 4; 13; 1; 10; 6; 15; 3; 12; 0; 9; 5; 2; 14; 11; 8
  • r (32 .. 47) = 3; 10; 14; 4; 9; 15; 8; 1; 2; 7; 0; 6; 13; 11; 5; 12
  • r (48 .. 63) = 1; 9; 11; 10; 0; 8; 12; 4; 13; 3; 7; 15; 14; 5; 6; 2
  • r (64 .. 79) = 4; 0; 5; 9; 7; 12; 2; 10; 14; 1; 3; 8; 11; 6; 15; 13
  • r '(0 .. 15) = 5; 14; 7; 0; 9; 2; 11; 4; 13; 6; 15; 8; 1; 10; 3; 12
  • r '(16 .. 31) = 6; 11; 3; 7; 0; 13; 5; 10; 14; 15; 8; 12; 4; 9; 1, 2
  • r '(32 .. 47) = 15; 5; 1; 3; 7; 14; 6; 9; 11; 8; 12; 2; 10; 0; 4; 13
  • r '(48 .. 63) = 8; 6; 4; 1; 3; 11; 15; 0; 5; 12; 2; 13; 9; 7; 10; 14
  • r '(64 .. 79) = 12; 15; 10; 4; 1; 5; 8; 7; 6; 2; 13; 14; 0; 3; 9; 11

VI. Набір для бітового повороту вліво (операція rol)

  • s (0 .. 15) = 11; 14; 15; 12; 5; 8; 7; 9; 11; 13; 14; 15; 6; 7; 9; 8
  • s (16 .. 31) = 7; 6; 8; 13; 11; 9; 7; 15; 7; 12; 15; 9; 11; 7; 13; 12
  • s (32 .. 47) = 11; 13; 6; 7; 14; 9; 13; 15; 14; 8; 13; 6; 5; 12; 7; 5
  • s (48 .. 63) = 11; 12; 14; 15; 14; 15; 9; 8; 9; 14; 5; 6; 8; 6; 5; 12
  • s (64 .. 79) = 9; 15; 5; 11; 6; 8; 13; 12; 5; 12; 13; 14; 11; 8; 5; 6
  • s '(0 .. 15) = 8; 9; 9; 11; 13; 15; 15; 5; 7; 7; 8; 11; 14; 14; 12; 6
  • s '(16 .. 31) = 9; 13; 15; 7; 12; 8; 9; 11; 7; 7; 12; 7; 6; 15; 13; 11
  • s '(32 .. 47) = 9; 7; 15; 11; 8; 6; 6; 14; 12; 13; 5; 14; 13; 13; 7; 5
  • s '(48 .. 63) = 15; 5; 8; 11; 14; 14; 6; 14; 6; 9; 12; 9; 12; 5; 15; 8
  • s '(64 .. 79) = 8; 5; 12; 9; 12; 5; 14; 6; 8; 13; 6; 5; 15; 13; 11; 11

V. Вихідні значення слів дайджесту

  • h0 = 67452301x;
  • h1 = EFCDAB89x;
  • h2 = 98BADCFEx;
  • h3 = 10325476x;
  • h4 = C3D2E1F0x;

1.4. Крок 4. Виконання алгоритму хешування

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

2. RIPEMD-160 на псевдокоді

Під складанням "+" мається на увазі складання по модулю 2 32, rol s позначає циклічний зсув вліво на s позицій.

 for i: = 0 to (t - 1) {A: = h0; B: = h1; C: = h2; D: = h3; E: = h4; A ': = h0; B': = h1; C ': = h2; D': = h3; E ': = h4; for j: = 0 to 79 {T: = rol s (j) (A + f (j; B; C; D) + X i [ r (j)] + K (j)) + E; A: = E; E: = D; D: = rol 10 (C); C: = B; B: = T; T: = rol s '( j) (A '+ f (79 - j; B'; C '; D') + X i [r '(j)] + K' (j)) + E '; A': = E '; E ': = D'; D ': = rol 10 (C'); C ': = B'; B ': = T;} T: = h1 + C + D'; h1: = h2 + D + E ' ; h2: = h3 + E + A '; h3: = h4 + A + B'; h4: = h0 + B + C '; h0: = T;} 

3. Приклади хешів RIPEMD-160

Вхідна рядок складається з ASCII-символів. Вихідна рядок являє собою шістнадцяткову запис.

 RIPEMD-160 ("The quick brown fox jumps over the lazy dog") = 37f332f68db77bd9d7edd4969571ad671cf9dd3b 

Навіть маленька зміна повідомлення викликає значну зміну дайджесту. Наприклад, ми замінимо у вищенаведеному прикладі d на c:

 RIPEMD-160 ("The quick brown fox jumps over the lazy cog") = 132072df690933835eb8b6ad0b77e7b6f14acad7 

Хеш-сума нульовою рядки виглядає так:

 RIPEMD-160 ("") = 9c1185a5c5e9fc54612808977ee8f548b2258d31 



4. Продуктивність

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

Алгоритм Циклів Мбіт / сек Відносна продуктивність
MD4 241 191.2 1.00
MD5 337 136.7 0.72
RIPEMD 480 96.0 0.50
RIPEMD-128 592 77.8 0.41
SHA-1 837 55.1 0.29
RIPEMD-160 1013 45.5 0.24

Цей текст може містити помилки.

Схожі роботи | скачати

Схожі роботи:
RIPEMD-128
RIPEMD-256
RIPEMD-320
Ту-160
160 (число)
160 рік до н. е..
160-ті роки до н. е..
160 рік
160-і роки
© Усі права захищені
написати до нас