
- •Свойства, назначение и основы построения хеш-функций.
- •Обобщенная схема хэш – функции
- •Пример хэширования
- •Гипотеза о существовании односторонних функций.
- •Свойства односторонних хэш-функций.
- •Длины однонаправленных хэш-функций
- •Коллизии и реверс
- •Методы построения криптографических хэш-функций
- •Назначение криптографических хэш-функций
- •Методы криптоанализа хэш-функций
- •Построение хеш-функций на основе блочных шифров.
- •Схемы, в которых длина хэш-значения равна длине блока
- •Обобщенная хэш-функция, у которой длина хэш-значения равна длине блока
- •Четыре безопасных хэш-функции, у которых длина хэш-значения равна длине блока
- •Модификация схемы Davies-Меуеr
- •Модификация схемы Davies-Meyer.
- •Тандемная (Таndеm) и одновременная (Abreast) схемы Davies-Meyer.
- •Тандемная схема Davies-Meyer.
- •Самостоятельные хэш – алгоритмы. Краткое описание наиболее распространенных алгоритмов
- •Алгоритм md2
- •Алгоритм мd3
- •Алгоритм md4
- •Алгоритм md5
- •Описание мd5
- •Отличия md5 от md4
- •Полный пример md5
- •Криптоанализ Snefru
- •Выбор хэш-функции
- •Эвристические принципы, сформулированные Ривестом
- •Основные требования к алгоритму с точки зрения пользователя
Алгоритм md5
MD5 является доработанной версией алгоритма MD4. Аналогично MD4, в алгоритме MD5 размер хэш-кода равен 128 битам.
После ряда начальных действий MD5 разбивает текст на блоки длиной 512 битов, которые, в свою очередь, делятся на 16 подблоков по 32 бита. Выходом алгоритма являются 4 блока по 32 бита, конкатенация которых образует 128-битовый хэш-код.
Сначала текст дополняется таким образом, чтобы длина получаемого текста, выраженная в битах, стала на 64 меньше числа, кратного 512. Дополнение осуществляется приписыванием к концу сообщения единицы и затем необходимого числа нулей (в бинарном представлении). Затем к тексту приписывается 64-битовое представление длины исходного сообщения. Таким образом получается текст, длина которого кратна 512 битам.
Описание мd5
После некоторой первоначальной обработки МD5 обрабатывает входной текст 512-битовыми блоками, разбитыми на 16 32-битовых подблоков. Выходом алгоритма является набор из четырех 32-битовых блоков, которые объединяются в единое 128-битовое хэш-значение.
Во первых, сообщение дополняется так, чтобы его длина была на 64 бита короче числа, кратного 512. Этим дополнением является 1, за которой вплоть до конца сообщения следует столько нулей, сколько нужно. Затем, к результату добавляется 64-битовое представление длины сообщения (истинной, до дополнения). Эти два действия служат для того, чтобы длина сообщения была кратна 512 битам (что требуется для оставшейся части алгоритма), и чтобы гарантировать, что разные сообщения не будут выглядеть одинаково после дополнения . Инициализируются четыре переменных:
А = 0x01234567
В = Оx89abcdef
С = Оxfedcba98
D = 0x76543210
Они называются переменными сцепления.
Теперь перейдем к основному циклу алгоритма. Этот цикл продолжается, пока не исчерпаются 512-битовые блоки сообщения.
Четыре переменных копируются в другие переменные: А в а, В в b, С в с и D в d.
Главный цикл состоит из четырех очень похожих этапов (у МD4 было только три этапа). На каждом этапе 16 раз используются различные операции. Каждая операция представляет собой нелинейную функцию над тремя из а, b, с и d. Затем она добавляет этот результат к четвертой переменной, подблоку текста и константе. Далее результат циклически сдвигается вправо на переменное число битов и добавляет результат к одной из переменных а, b, с и d. Наконец результат заменяет одну из переменных а, b, с и d. См. 13-й и 12-й. Существуют четыре нелинейных функции, используемые по одной в каждой операции (для каждого этапа - другая функция).
Каждый основной цикл состоит
из 4 раундов (в MD4 было всего 3 раунда).
В свою очередь, каждый раунд состоит из
16 операторов. Все операторы однотипны
и имеют вид:
.
Здесь:
,
,
и
суть
,
,
и
в
зависимости от номера раунда и номера
оператора в раунде (в оригинале эта
подстановка записана в явном виде).
обозначает
-тый
подблок обрабатываемого блока. В каждом
раунде порядок обработки очередным
оператором подблоков определяется
задаваемой в явном виде подстановкой
на множестве всех подблоков (их, также
как и операторов, 16).
обозначают
зафиксированные случайные константы,
зависящие от номера раунда и номера
оператора в раунде (Ривест положил для
-того
(
)
оператора в
-том
(
)
раунде константу равной целой части от
.
обозначает
левый циклический сдвиг аргумента на
битов.
Величины сдвигов также зависят от номера
раунда и номера оператора в раунде.
--
некоторая функция (фиксированная для
каждого раунда), действующая покоординатно
на биты своих трех аргументов.
Рис . Основной цикл алгоритма MD5.
Рис. Одна операция МD5
На первом этапе действует
функция
.
На втором этапе действует
функция
.
На третьем этапе действует
функция
.
На четвертом этапе действует
функция
.
После всего этого а, b, с и d добавляются к А, В, С и D, соответственно, и алгоритм продолжается для следующего блока данных. Окончательным результатом служит объединение А, В, С и D.