Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 700218.doc
Скачиваний:
28
Добавлен:
01.05.2022
Размер:
1.36 Mб
Скачать

Хеширование данных с помощью алгоритма md5.

Цель работы: изучить методы хеширования данных в алгоритме MD5 и освоить их практическое применение.

Теоретическое введение

MD5 – это однонаправленнная хэш-функция, алгоритм для входного сообщения выдает 128-битовое хэш-значение, или краткое изложение сообщения.

MD5 (Message Digest 5) – это улучшенная версия MD4. Хотя она сложнее MD4, их схемы похожи, и результатом MD5 также является 128-битовое хэш-значение.

После некоторой первоначальной обработки MD5 обрабатывает входной текст 512-битовыми блоками, разбитыми на 16 32-битовах подблоков. Выходом алгоритма является набор из четырех 32-битовых блоков, которые объединяются в единое 128-битовое хэш-значение.

Вначале допускаем, что имеем на входе сообщение из b бит, и что мы желаем найти Message Digest этой последовательности бит. Число b является произвольным неотрицательным целым; b может быть равным нулю, оно не обязательно должно быть множителем 8, и оно может быть произвольно большим. Представим последовательность бит сообщения как:

m_0 m_1 m_2 . . . . . . m{b-1}

Следующие пять операций выполняются для подсчета Message Digest сообщения.

Присоединение заполняющих (дополнительных) битов

Сообщение расширяется так, чтобы его длина (в битах) совпадала с 448, по модулю 512. Дополнение всегда выполняется, даже если длина сообщения - уже совпадает с 448 по модулю 512. Дополнение выполняется следующим образом: одиночный "1" бит добавляется к сообщению, и далее "0" биты добавляются так что длина в битах заполняемого сообщения соответствует 448 по модулю 512. В общем случае, минимум один бит и максимум 512 бит добавляется.

9

Добавление длины

64-битное представление входной последовательности b (длина сообщения перед расширением дополнительными битами) присоединяется к результату предыдущего этапа. Маловероятно, что длина b будет больше, чем 264 поэтому и используется 64-разрядная величина для хранения длины b. Эти биты добавляются как два 32-разрядных слова, младшее заносится первым.

В этом месте окончательное сообщение (после выполнения первого и второго этапов) имеет длину, кратную 512 битам, т.е. сообщение имеет длину, которая точно кратна 16-ти словам. Последовательность М[0 . . . . N-1] является словами окончательного сообщения, где N кратно 16.

Инициализация md буфера

Буфер на 4-е слова (A, B, C, D) используется для подсчета Message Digest. Каждое из A, B, C, D является 32-битным регистром. Эти регистры инициализируются следующими шестнадцатиричными значениями, где первым следует самый младший байт:

A: 01 23 45 67

B: 89 ab cd ef

C: fe dc ba 98

D: 76 54 32 10

Разработчики из RSA Data Security, Inc. назвали их магическими константами.

Обработка сообщения в блоках по 16 слов

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

F(X, Y, Z) = (X Y) ((X) Z)

G(X, Y, Z) = (X Z) (Y (Z))

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

I(X, Y, Z) = Y (X (Z))

В каждой битовой позиции функция F действует как условный оператор: если X то Y иначе Z. Функция F могла бы определяться с использованием операции “+” вместо ””, так как выражение (X Y) ((X) Z) никогда не будет иметь 1 в одинаковых битовых позициях. Если биты X, Y и Z независимы и несмещены, то каждый бит после выполнения F(X, Y, Z) будет независим и несмещен.

Ф

10

ункции G, H и I подобны функции F, они действуют в "побитовом соответствии" для нахождения выходного значения от входных битов X, Y и Z, тем же способом, что если биты X, Y и Z независимы и несмещены, то каждый бит после выполнения вышеуказанных функций будет независим и несмещен. Обратите внимание, что функция H(X, Y, Z) является поразрядной операцией исключающего ИЛИ (т.е. функцией контроля четности входных значений).

Далее следует главный цикл обработки сообщения (рис.2). Главный цикл состоит из четырех очень похожих этапов (у MD4 было только три этапа). На каждом этапе 16 раз используются различные операции. Каждая операция представляет собой нелинейную функцию над тремя аргументами из a, b, c и d (рис. 3). Затем она добавляет этот результат к четвертой переменной, подблоку текста и константе. Далее результат циклически сдвигается вправо на переменное число битов и добавляет результат к одной из переменных a, b, c и d. Наконец результат заменяет одну из переменных a, b, c и d. Существуют четыре нелинейных функции, используемые по одной в каждой операции (для каждого этапа – другая функция).

Рис.2. Главный цикл MD5

Вывод

В результате выполнения предыдущих действий Message Digest производит на выходе числа A, B, C, D, общая длина которых 128 бит.

Задание:

И

11

спользуя алгоритм MD5, написать программу хеширования произвольного набора символов на любом языке программирования.

Рис.3. Одна операция MD5

Порядок выполнения работы:

 написать на языке программирования функцию хеширования, в которую в качестве параметров передается ключ и символ (или строка символов) исходного текста.

 написать функцию проверки целостности, в которую в качестве параметров передается ключ и символ (или строка символов) зашифрованного текста.

Оформление отчета:

В отчете следует привести краткие теоретические сведения. Кроме того, должны быть представлены: краткая блок-схема, текст программы, шифруемый набор символов, результаты выполнения программы.

Контрольные вопросы:

  1. В чем заключается суть метода шифрования MD5?

  2. Какой характерной особенностью обладает инициализация MD буфера?

  3. Из скольких этапов состоит главный цикл обработки сообщения?

12

ЛАБОРАТОРНАЯ РАБОТА №4