Интернет магазин китайских планшетных компьютеров



Компьютеры - MD5 - Алгоритм MD5

13 июня 2011


Оглавление:
1. MD5
2. Алгоритм MD5
3. MD5-хеши
4. Примеры использования



Схема работы алгоритма MD5

На вход алгоритма поступает входной поток данных, хеш которого необходимо найти. Длина сообщения может быть любой. Запишем длину сообщения в L. Это число целое и неотрицательное. Кратность каким-либо числам необязательна. После поступления данных идёт процесс подготовки потока к вычислениям.

Ниже приведены 5 шагов алгоритма:

Шаг 1. Выравнивание потока

Сначала дописывают единичный бит в конец потока, затем необходимое число нулевых бит. Входные данные выравниваются так, чтобы их новый размер L' был сравним с 448 по модулю 512. Выравнивание происходит, даже если длина уже сравнима с 448.

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

В оставшиеся 64 бита дописывают 64-битное представление длины данных до выравнивания. Сначала записывают младшие 4 байта. Если длина превосходит 2 − 1, то дописывают только младшие биты. После этого длина потока станет кратной 512. Вычисления будут основываться на представлении этого потока данных в виде массива слов по 512 бит.

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

Для вычислений инициализируются 4 переменных размером по 32 бита и задаются начальные значения шестнадцатеричными числами:

А = 01 23 45 67;
В = 89 AB CD EF;
С = FE DC BA 98;
D = 76 54 32 10.

В этих переменных будут храниться результаты промежуточных вычислений. Начальное состояние ABCD называется инициализирующим вектором.

Определим ещё функции и константы, которые нам понадобятся для вычислений.

  • Потребуются 4 функции для четырёх раундов. Введём функции от трёх параметров — слов, результатом также будет слово.
1 раунд Fun F = \vee.
2 раунд Fun G = \vee.
3 раунд Fun H = X \oplus Y \oplus Z.
4 раунд Fun I = Y \oplus.
  • Определим таблицу констант T — 64-элементная таблица данных, построенная следующим образом: T = int | ), где 4294967296 = 2.
  • Выровненные данные разбиваются на блоки по 32 бита, и каждый блок проходит 4 раунда из 16 операторов. Все операторы однотипны и имеют вид:, определяемый как a = b + + X + T) < < < s), где X — блок данных. X = M, где k — номер 32-битного слова из n-го 512-битного блока сообщения, и s — циклический сдвиг влево на s бит полученого 32-битного аргумента.

Шаг 4. Вычисление в цикле

Заносим в блок данных элемент n из массива. Сохраняются значения A, B, C и D, оставшиеся после операций над предыдущими блоками.

AA = A
BB = B
CC = C
DD = D

Раунд 1

/* a = b + + X + T) <<< s). */




Раунд 2

/* a = b + + X + T) <<< s). */




Раунд 3

/* a = b + + X + T) <<< s). */




Раунд 4

/* a = b + + X + T) <<< s). */




Суммируем с результатом предыдущего цикла:

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

После окончания цикла необходимо проверить, есть ли ещё блоки для вычислений. Если да, то изменяем номер элемента массива и переходим в начало цикла.

Шаг 5. Результат вычислений

Результат вычислений находится в буфере ABCD, это и есть хеш. Если выводить побайтово начиная с младшего байта A и закончив старшим байтом D, то мы получим MD5 хеш.

Сравнение MD5 и MD4

Алгоритм MD5 происходит от MD4. В новый алгоритм добавили ещё один раунд, теперь их стало 4 вместо 3 в MD4. Добавили новую константу для того, чтобы свести к минимуму влияние входного сообщения, в каждом раунде на каждом шаге и каждый раз константа разная, она суммируется с результатом F и блоком данных. Изменилась функция G = XZ v) вместо. Результат каждого шага складывается с результатом предыдущего шага, из-за этого происходит более быстрое изменение результата. Изменился порядок работы с входными словами в раундах 2 и 3.

Различия в скорости работы представлены в таблице:

Таблица сравнения скоростей
MD5 MD4
RFC 2,614 сек 37 359 Кб/с 2,574 сек 37 940 Кб/с
OpenSSL 1,152 сек 84 771 Кб/с 0,891 сек 109 603 Кб/с

Необходимо было вычислить 10 000 хешей для сообщения длиной 10 000 байт. В качестве реализаций использовались OpenSSL и RFC 1321.



Просмотров: 4551


<<< MD4
MD6 >>>