Основы современной криптографии


Функция хэширования MD5


Предположим, что нам дано сообщение длиной b бит, где b – произвольное неотрицательное целое число, и пусть биты сообщения записаны в следующем порядке:

m0 m1 ... m(b–1).

Для вычисления свертки сообщения выполняются следующие пять шагов.

Шаг 1. Добавление битов заполнения.

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

Расширение выполняется следующим образом: к сообщению добавляется один бит, равный 1, а оставшиеся биты заполняются нулевыми значениями. Таким образом, количество добавленных битов может лежать в диапазоне от 1 до 512 включительно.

Шаг 2. Добавление длины.

64-битное представление длины сообщения b (до добавления битов расширения) дописывается к результату предыдущего шага. В том маловероятном случае, когда длина сообщения превысит 264, используются только младшие 64 бита представления. Эти биты добавляются в виде двух 32-разрядных слов, при этом младшее слово дописывается первым. После этой операции длина сообщения в точности кратна 512 битам и, аналогично, кратна 16 (32-разрядным) словам. Обозначим M[0..N-1] слова полученного сообщения.

Шаг 3. Инициализация буфера свертки.

Буфер из четырех слов (A, B, C, D) используется для вычисления свертки сообщения. Эти регистры инициализируются следующими шестнадцатеричными значениями:

A = 01234567,

B = 89abcdef,

C = fedcba98,

D = 76543210.

Шаг 4. Обработка сообщения блоками по 16 слов.

Определим сначала 4 вспомогательные функции, аргументом и результатом каждой из которых являются 32-битовые слова.

F(X,Y,Z) = XY Ъ Ш(X) Z

G(X,Y,Z) = XZ Ъ Y Ш(Z)

H(X,Y,Z) = X Е Y Е Z

I(X,Y,Z) = Y Е (X Ъ Ш(Z)).

На этом шаге используется таблица из 64 слов T[1…64], построенная на основе функции синуса. Пусть T[i] обозначает i–й элемент таблицы, который равен целой части от 4294967296 ґabs(sin(i)), где i




Начало  Назад  Вперед



Книжный магазин