Хеш-функции / Алгоритм хэш-функции MD2
.doc
Хэширование и эл подпись
Request for Comments: 1319 MD2
Тpи алгоpитма сеpии MD pазpаботаны Ривестом в 1989-м, 90-м и 91-м году соответственно. Все они пpеобpазуют текст пpоизвольной длины в 128-битный хэш. Алгоритм MD предназначается для использования в ЭЦП для сжатия большого файла перед его подписью секретным ключом в криптосистеме с ОК, например
Сложность нахождения инверсии, то есть сообщения с тем же дайджестом определяется величиной 2128 , а коллизии, то есть двух сообщений с одинаковым дайджестом 264.
Предположим, что имеем на входе сообщение длиной b байт.
m0 m1 ... mb-1
Шаг 1. Добавление Padding Bytes
Сообщение расширяется (is "padded") так, чтобы его длина в байтах стала кратна 16. Расширение выполняется даже, если длина сообщения уже кратна 16. К сообщению добавляется "i" bytes (i=1..16) of value "i"
Обозначим результирующее сообщение M0 ... MN-1
Шаг 2 Добавление 16 байтной контрольной суммы (Checksum)
При ее вычислении используется 256-байтовую "random" permutation, созданную из цифр числа . Обозначим S[i] - i-тый элемент таблицы
L:= C0=… =C15:=0 { Обнуляем контрольную сумму}
For i = 0 to N/16-1 do { обрабатываем каждый 16-байтовый блок}
For j = 0 to 15 do {Обрабатываем блок i}
Cj:= S[Mi*16+j L].
L:= Cj
end
end
Получаем 16-байтовую checksum C0 ...С15 , добавляемую к сообщению.
Получим сообщение M*0…M*N'-1 с добавленной контрольной суммой, где N'=N + 16.
Шаг 3. Инициализация MD Buffer
Для вычисления дайджеста используется 48-байиный буфер X , первоначально обнуленный
Шаг 4. Обработка сообщения в 16-байтных блоках
For i = 0 to N'/16-1 do {Обработка каждого 16 байтного блока}
For j = 0 to 15 do X16+j:= Mi*16+j {Копируем блок i в X}
X32+j:= X16+j Xj
end
0 15 16 31 32 47
t:= 0.
For j = 0 to 17 do {делаем 16 проходов}
For k = 0 to 47 do {Проход j]
t, Xk:=Xk St
end
t:= (t+j) mod 256.
end
end
Шаг 5. Вывод
после окончания алгоритма из X0 ... Х15. берется дайджест сообщения
Т.е. алгоpитм MD2 пpедполагает:
* дополнение текста до длины, кpатной 128 битам;
* вычисление 16-битной контpольной суммы (стаpшие pазpяды отбpасываются);
* добавление контpольной суммы к тексту;
* повтоpное вычисление контpольной суммы.
ПАЗИ Криптография с ОК