і |
2 4 |
2 5 ' |
2 6 |
2 7 |
2 8 |
2 9 |
3 0 |
3 І |
t > |
7 |
1 2 |
1 5 |
9 |
1 1 |
7 |
1 3 |
1 2 |
t ' |
7 |
7 |
1 2 |
7 |
6 |
1 5 |
1 3 |
1 1 |
а ! |
1 2 |
0 |
9 |
5 |
2 |
1 4 |
1 ї |
з |
|
1 4 |
1 5 |
8 |
1 2 |
4 |
9 |
1 |
2 |
|
3 2 |
3 3 |
3 4 |
3 5 |
3 6 |
3 7 |
33 |
39 |
f , |
1 1 |
1 3 |
6 |
7 |
1 4 |
9 |
1 3 |
1 5 |
і |
9 |
7 |
1 5 |
1 1 |
8 |
6 |
8 |
1 4 |
а > |
3 |
1 0 |
1 4 |
4 |
9 |
1 S |
8 |
1 |
9 |
1 S |
5 |
1 |
3 |
7 |
1 4 |
6 |
9 |
Кінець таблиці 1
f |
4 Є |
4 1 |
4 2 |
4 3 |
4 4 |
4 5 |
4 6 |
4 7 |
І і |
4 |
8 |
1 3 |
€ |
5 |
1 2 |
7 |
5 |
і |
1 2 |
1 3 |
5 |
1 4 |
1 3 |
1 3 |
7 |
5 |
а . |
2 |
7 . |
0 |
Є |
1 3 |
1 1 |
5 |
1 2 |
а |
1 1 |
8 |
1 2 |
2 |
1 0 |
0 |
4 |
1 3 |
г |
4 а |
4 9 |
5 0 |
5 1 |
5 2 |
5 3 |
5 4 |
5 & |
f; |
і і |
1 2 |
1 4 |
1 5 |
1 4 |
1 5 |
9 |
8 |
t |
1 5 |
5 |
8 |
1 1 |
1 4 |
1 4 |
6 |
1 4 |
а ; |
1 |
9 |
1 1 |
1 0 |
0 |
8 |
І 2 |
4 |
а ’■> |
8 |
6 |
4 |
1 |
3 |
1 1 |
1 5 |
0 |
|
5 6 |
5 7 |
S 8 |
5 9 |
S 0 |
6 1 |
6 2 |
6 3 |
f, |
9 |
1 4 |
6 |
6 |
8 |
6 |
6 |
1 2 |
г |
6 |
9 |
1 2 |
9 |
1 2 |
5 |
1 5 |
8 |
а » |
1 3 |
3 |
7 |
1 5 |
1 4 |
5 |
6 |
2 |
а |
5 |
1 2 |
2 |
ї 3 |
9 |
7 |
1 0 |
1 4 |
І |
б 4 |
6 5 |
6 6 |
6 7 |
б 8 |
6 9 |
7 0 |
7 1 |
f, |
9 |
1 5 |
5 |
1 1 |
6 |
8 |
1 3 І |
1 2 |
f |
8 |
5 |
1 2 |
9 |
1 2 |
5 |
1 4 |
© |
а : |
4 |
0 |
5 |
9 |
7 |
1 2 |
2 |
1 0 |
а |
1 2 |
1 5 |
t 0 |
4 |
1 |
5 |
8 |
7 |
1 |
7 2 |
7 3 |
7 4 |
7 5 |
7 6 |
7 7 |
7 8 |
7 9 |
f, |
5 |
1 2 |
1 3 |
1 4 |
І 1 |
8 |
5 |
6 |
t '/ |
8 |
1 3 |
6 |
5 |
1 5 |
1 3 |
1 1 |
1 1 |
<3 « |
1 4 |
1 |
3 |
8 |
1 1 |
6 |
1 5 |
1 3 |
а |
6 |
2 |
1 3 |
1 4 |
0 |
3 |
9 |
1 1 |
Початкові значення
Для цієї циклової функції початкове значення, IV, завжди буде таким 160-бітним рядком, представленим тут як послідовність з п’яти слів Yo, YbY2, Уз, Y4 у шістнадцятковому зображенні, де Уо подає найлівіші 32 біти з 160 бітів:
Ув = 67452301,
, = EFCDAB89,
2 = 98BADCFE,
, = 10325476,
4 = C3D2E1F0.
.2 Метод заповнювання
Рядок даних D повинен бути заповнений так, щоб він був складений з кількості бітів, кратних 512. Процедуру заповнювання здійснюють так:
D приєднують до єдиного біта ‘1’.
Результат попереднього кроку приєднують до нульових ('О’) бітів у кількості від нуля до 511 так, щоб довжина (в бітах) результівного рядка була конгруентна 448 за модулем 512. Точніше, якщо первинна довжина рядка D є LD, та г — залишок від ділення LD на 512, то кількість нулів для приєднання рівна або 447-г(якщо г<447), або 959-г(якщо г> 447). Результатом буде бітовий рядок, довжина якого на 64 біта менша за число, кратне 512 бітів.
З Ділять двійкове зображення LD, що складене з 64 бітів на два 32-бітні рядки, один з яких подає "більш значущу половину" LD, а інший "менш значущу половину". Потім приєднують резуль- тівний рядок попереднього кроку із цими двома 32-бітними рядками, причому "менш значуща половина" передує "більш значущій половині".
В описі циклової функції, що буде наведено далі, кожний 512-бітний блок даних Ц,1 < і < q, трактують як послідовність із 16 слів, Zo, Z1t ..., Zi5, де Zo відповідає найлівішим 32 бітам О(.
Примітка. При’єднання двох 32-бітних рядків LD у кроці 3 така, що ці два 32-бітних рядки використовують прямо як слова Z14 та Z16 останнього блоку; відповідно до угоди про послідовність байтів, наведена в 7.1.2, найменш значущий октет Ld— найлівіший октет, а найбільш значущий октет — найправіший октет.
.3 Опис циклової функції
Циклова функція Ф діє так. Треба зауважити, що в цьому описі використано символи И/, Хо, Х^, Х2, Х3, Х4, Хї, Х’2, Х3, Х'А для позначення одинадцяти різних слів, які містять значення, необхідні для обчислень.
Вважають, що 512-бітовий (перший) вхід до Ф розміщено в Zo, Zb..., Z15, де Zo містить 32 найлівіших з 512 бітів. Вважають також, що 160-бітовий (другий) вхід до Ф розміщено в п’яти словах Yo, YbY2, Уз. Y4.
Нехай Х0:=У0, X^:=Yb Х2:=У2, Х3:=У3та Х4:=У4
З Нехай Х^ := Уо, Xj := У1; Х2 := У2Х'3 := Y3 та Х'4 := У4.
4 Для /:=0 до 79 здійснюємо такі чотири кроки у зазначеному порядку:
W := S*(XB w д,{Х,, Х2, Х3) w Zai w С() w Х4;
Хо := Х4: X, := Х3; Х3 = S,n(X2); Х2 := X,; X, := W;
W := S^Xo w дп.{Х, Х'2, Х3) Z„, w С') w X4;
Xo := X4; X := X3; X'3 := SW(X2); X2 := X,; X W.
5 Нехай
W:= Уо,
Уо := X w X2 w X'3,
X := У2 w X3 w X4, y2 := Y3 w X4 у XOr
Уз - У4 w Xo w X.,
У4 := W& X, wX2.
6 П’ять слів Уо, Уь У2, У3, У4 зображають вихід циклової функції Ф. Після останньої ітерації циклової функції п’ять слів Уо, X, У2, У3, У4 треба перетворити в послідовність з 20 байтів, використовуючи обернену процедуру, наведену в 7.1.2, і де Уо дає перші чотири байти, УА— наступні чотири байти і т. д. Таким чином перший (найлівіший) байт буде відповідати найменш значущому байту з Уо, і 20-й (найправіший) байт буде відповідати найбільш значущому байту з ХА. 20 байтів будуть перетворені в рядок з 160 бітів, використовуючи обернення процедури, як зазначено в розділі 6, тобто перший (найлівіший) біт буде відповідати найбільш значущому біту першого (най- лівішого) байта, та 160-й (найправіший) біт буде відповідати найменш значущому біту 20-ого (най- правішого) байта.
На рисунку 1 показано кроки (а) та (Ь) пункту 4 циклової функції Ф спеціалізованої геш-функції 1 (RIPEMD-160) (решта частин, тобто кроки (с) та (d) аналогічні). В цикловій функції Ф кроки від (а)
до (d) пункту 4 виконують 80 разів (/ = 0, ..., 79).
(до циклу і)
(після циклу і)
8 СПЕЦІАЛІЗОВАНА ГЄШ-ФУНКЦІЯ 2 (RIPEMD-128)
У цьому розділі ми визначено метод заповнювання, початкові значення та циклову функцію, яку використовують у загальній моделі для геш-функцій, описаних в ISO/IEC 10118-1:2000. Якщо застосувати метод заповнювання, початкове значення та циклову функцію, визначені тут, до загальної моделі, зазначеної вище, то таким чином буде визначено спеціалізовану геш-функцію 2. Спеціалізовану геш-функцію можна застосовувати до будь-яких рядків даних D, які містять щонайбільше 264-1 бітів.
Міжнародний стандартизований ідентифікатор ISO/IEC для спеціалізованої геш-функції 2 дорівнює 32 (у шістнадцятковому зображенні).
Примітка. Спеціалізовану геш-функцію 2, визначену в цьому розділі, зазвичай називають RIPEMD-128, [3]. Цю функцію можна застосовувати тільки там, де геш-код, що містить 128 або менше бітів, є достатньо безпечним.
Параметри, функції та константи
Параметри
Для цієї геш-функції (^=512, £2=128 та LH не перевищує 128.
Узгодження порядку слідування байтів
Узгодження порядку байтів у цій геш-функції таке, як і для геш-функції, описаної у розділі 7.
Функції
Щоб полегшити програмну реалізацію, циклову функцію Ф визначають у термінах операцій над 32-бітними словами. Послідовність функцій g0, g1t .... g63 використовують у цій цикловій функції, де кожна функція gh 0 < і < 63 приймає три слова Хо, X-j та Х2 на вході та видає єдине слово на виході.
Функції ^визначають так само, як і перші 64 функції, визначені в 7.1.3.
Константи
У цій цикловій функції використовують дві послідовності слів, що визначають константи Со, С1( С63 та Cq, С{, .... Сб3. У шістнадцятковому зображенні (де найбільш значущий біт відповідає
найлівішому біту) їх визначають так:
С
(16 < І < 31), (32 < г < 47), (48 < і < 63),
( о<}< 15), (16 < / < 31), (32</<47), (48</<63).
і = 00000000, С( = 5А827999,С, = 6ED9EBA1,
C, = 8F1BBCDC,
С', = 50А28ВЕ6,
СІ = 5C4DD124,
С = 6D703EF3, с; = оооооооо,
У цій цикловій функції використовують дві послідовності з 64 значень зсуву, де кожне значення зсуву лежить між 5 та 15. Ці послідовності визначають як (f0, f1t .... f63) та (fj, tf, ..., t33), але їх визначають, відповідними послідовностями, рівними першим 64 значенням, визначеним у 7.1.4.
Нарешті, наступні дві послідовності з 64 індексів, які теж використовують у цій цикловій функції, містять значення, що лежать у межах від 0 до 15. Ці послідовності визначають як (а0, а^ ..., а63) та (а3, а^, .... а^), та їх визначають, відповідними послідовностями, рівними першим 64 значенням, визначеним у 7.1.4.