Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Хеш-функции / RFC 1320 Алгоритм хэш-функции MD4

.doc
Скачиваний:
106
Добавлен:
02.05.2014
Размер:
59.9 Кб
Скачать

Хэширование и эл подпись 2

Request for Comments: 1320 The MD4 Message-Digest Algorithm

Разработан для быстрых вычислений на 32-битных машинах. Он не требует больших таблиц замещений. Очень компактный алгоритм

Мы имеем b-битовое сообщение на входе m0 m1 ... mb-1

1. Добавление Padding Bits

Сообщение всегда расширяется чтобы его длина (в битах) составляла остаток 448 по модулю 512, даже если она уже этому равна

Расширение выполняется следующим образом добавляется единственный единич­ный бит за которым следуют нулевые биты

2. К результату предварительного шага добавляется 64 битное представление дли­ны b до расширения. В нежелательном случае если длина превышает 264 использу­ются только младшие 64 бита. Результирующее сообщение имеет длину кратную 512 битам или 16 (32-bit) словам. Обозначим его M0 ... МN-1 , где N -кратно 16.

3. Инициализация MD буфера. Для вычисления дайджеста сообщения используется 4 словный буфер из 32 битных регистров A, B, C, D. Эти регистры инициализируются следую­щими шестна­дцатиричными величинами, младший байт вначале:

4. Обработка сообщения в 16 словных блоках(то есть блок имеет длину 512 бит) 512-битные блоки подвеpгаются пpоцедуpе Damgard-Merkle [16], пpичем каждый блок уча­ствует в тpех pазных циклах.

Определим 3 функции, имеющие на входах и выходах 32-битные слова

F(X,Y,Z) = XY v not(X) Z

G(X,Y,Z) = XY v XZ v YZ

H(X,Y,Z) = X xor Y xor Z, где

"+" - сложение слов т.е. по модулю 232

X <<< s - циклический сдвиг 32-bit влево на S разрядов

not(X) - bit-wise complement of X,

X v Y побитовая операция OR над X, Y.

X  Y -побитовая операция исключающего ИЛИ,

XY операция побитового умножения (AND) над X и Y.

В функции F каждый бит Х действует как условие , если установлен берется соот­ветсвующее значение бита из Y, иначе из Z

Функция G -есть функция побитового мажорирования.

Функция H -функция побитовой операции XOR или функции четности

For i = 0 to N/16-1 do {Process each 16-word block. }

For j = 0 to 15 do {Копируем блок i в X} xj := M I*16+j

end

AA: = A BB: = B CC:= C DD:= D {Сохраняем значения A,B, C,D}

{Проход 1}

{Обозначим [abcd k s] операцию a = (a + F(b,c,d) + X[k]) <<< s }

[ABCD 0 3] [DABC 1 7] [CDAB 2 11] [BCDA 3 19]

[ABCD 4 3] [DABC 5 7] [CDAB 6 11] [BCDA 7 19]

[ABCD 8 3] [DABC 9 7] [CDAB 10 11] [BCDA 11 19]

[ABCD 12 3] [DABC 13 7] [CDAB 14 11] [BCDA 15 19]

{Проход 2}

{Обозначим [abcd k s] операцию a = (a + G(b,c,d) + X[k] + 5A827999) <<< s}

[ABCD 0 3] [DABC 4 5] [CDAB 8 9] [BCDA 12 13]

[ABCD 1 3] [DABC 5 5] [CDAB 9 9] [BCDA 13 13]

[ABCD 2 3] [DABC 6 5] [CDAB 10 9] [BCDA 14 13]

[ABCD 3 3] [DABC 7 5] [CDAB 11 9] [BCDA 15 13]

{Проход 3}

{Обозначим [abcd k s] операцию a = (a + H(b,c,d) + X[k] + 6ED9EBA1) <<< s}

[ABCD 0 3] [DABC 8 9] [CDAB 4 11] [BCDA 12 15]

[ABCD 2 3] [DABC 10 9] [CDAB 6 11] [BCDA 14 15]

[ABCD 1 3] [DABC 9 9] [CDAB 5 11] [BCDA 13 15]

[ABCD 3 3] [DABC 11 9] [CDAB 7 11] [BCDA 15 15]

A = A + AA {Cкладываем новое значение регистров с первоначальным}

B = B + BB C = C + CC D = D + DD

end

Величина 5A827999 - 32-битная константа, записанная начиная со старшей цифры. Представляет квадратный корень из 2.

6ED9EBA1 - представляет собой квадратный корень из 3

5. Вывод

Дайджест сообщения находится после окончания алгоритма в регистрах A, B, C, D. Начиная с младшего байта A, и кончая старшим байтом D.

В алгоритме MD4 довольно быстро были найдены дыpы, поэтому он был заменен алго­ритмом MD5, в котором каждый блок участвует не в трех, а в четырех различных циклах.

ПАЗИ Криптография с ОК 15.07.19 2