
- •Свойства, назначение и основы построения хеш-функций.
- •Обобщенная схема хэш – функции
- •Пример хэширования
- •Гипотеза о существовании односторонних функций.
- •Свойства односторонних хэш-функций.
- •Длины однонаправленных хэш-функций
- •Коллизии и реверс
- •Методы построения криптографических хэш-функций
- •Назначение криптографических хэш-функций
- •Методы криптоанализа хэш-функций
- •Построение хеш-функций на основе блочных шифров.
- •Схемы, в которых длина хэш-значения равна длине блока
- •Обобщенная хэш-функция, у которой длина хэш-значения равна длине блока
- •Четыре безопасных хэш-функции, у которых длина хэш-значения равна длине блока
- •Модификация схемы Davies-Меуеr
- •Модификация схемы Davies-Meyer.
- •Тандемная (Таndеm) и одновременная (Abreast) схемы Davies-Meyer.
- •Тандемная схема Davies-Meyer.
- •Самостоятельные хэш – алгоритмы. Краткое описание наиболее распространенных алгоритмов
- •Алгоритм md2
- •Алгоритм мd3
- •Алгоритм md4
- •Алгоритм md5
- •Описание мd5
- •Отличия md5 от md4
- •Полный пример md5
- •Криптоанализ Snefru
- •Выбор хэш-функции
- •Эвристические принципы, сформулированные Ривестом
- •Основные требования к алгоритму с точки зрения пользователя
Коллизии и реверс
Однако, возможно существование такого интервала на области определения функции, в границах которого она становится инъективной (т. е. если h(‘a’)=0, то существует такая функция, g, для которой g(0)=’a’). Это означает, что только для одного элемента из множества A существует индекс x1. Функция будет инъективна и в том случае, если ни один элемент из A не отображается на интервал (x1, x2) при условии, что последний не равен нулю. В любом другом случае на каждый индекс множества X отображается более одного элемента из A. Это так называемая коллизия хэш-функции.
Реверс хэш-функции заключается в поиске всех отображаемых на данный индекс элементов. Для любого конечного множества это разрешимая задача, которая имеет наиболее простое решение на инъективных интервалах хэш-множества.
Методы построения криптографических хэш-функций
построение хэш-функции на основе существующего алгоритма шифрования (например, на основе шифров ГОСТ 28147 - 89, DES и FEAL.);
построение хэш-функции на основе известной математической задачи, как правило вычислительно трудной;
построение хэш-функции "с нуля".
Назначение криптографических хэш-функций
Многие криптографические преобразования (в частности, вычисление и проверка электронной цифровой подписи, ЭЦП) выполняются над данными фиксированного размера. Поэтому перед простановкой электронной подписи под многомегабайтным файлом обычно рассчитывают значение хэш-функции от него, а уже от этого значения считают ЭЦП. Кроме того, удобно, например, пароли в базе хранить не в открытом виде, а в хэшированном (так сделано во всех юниксах).
Функции выработки хэш–блока для подписываемого массива данных.
Подписи битовых групп + модификации схем цифровых подписей.
Описание использования при хранении паролей:
При задании пароля пользователь вводит имя пользователя и сам пароль:
Login: Вася
Password: *******
Далее пароль хешируется и полученная хеш-свертка пароля хранится вместе с логином пользователя либо в отдельном файле паролей, либо в базе данных паролей (тот же файл, но с оформлением, например, под *.DBF). Таким образом, пароль не хранится в системе в открытом виде, логин хранится в открытом виде.
Далее при аутентификации пользователя в системе выполняется процедура сверки / сличения хешей. Это означает, что для введенного логина выполняется поиск соответствия в базе данных паролей, и если такое соответствие найдено, то выполняется сверка хешей. Для введенного пароля вычисляется хеш-свертка и сравнивается с хеш-значением, хранящимся в базе данных. Аутентификация считается успешной при абсолютном совпадении хешей.
Узнать, какой именно пароль верный, зная лишь его хеш - невозможно.
Методы криптоанализа хэш-функций
Ввиду большого разнообразия способов построения хэш-функций, универсальных методов поиска коллизий не существует. Для многих функций единственная возможность нахождения эффективных алгоритмов поиска коллизий состоит в анализе соответствующих математических задач.
Для хэш-функций, у которых длина хэш-значения невелика, универсальным методом поиска коллизий является метод, основанный на так называемом "парадоксе дня рождения". Этот метод хорошо известен и был описан еще в 1979 г. Ювалом.
Пусть длина хэш-значения
равна
битам.
Атака состоит в генерации двух
псевдослучайных наборов сообщений по
сообщений
каждое. Тогда, согласно парадоксу дня
рождения, вероятность того, что в этих
наборах найдется пара сообщений, имеющих
одинаковые хэш-значения, больше
.
Метод требует большого объема памяти для хранения генерируемых наборов, а также эффективных методов сортировки.
По существу, на той же идее основаны и алгоритмы поиска коллизий для функций шифрования блочных шифраторов.
При построении хэш-функций "с нуля" применяются те же методы и конструкции, что и при разработке блочных шифраторов. Поэтому к ним применимы и все методы криптоанализа шифраторов.
Например, Бихам и Шамир в своей известной работе, посвященной дифференциальному криптоанализу, описывают в числе прочих и успешную атаку с помощью этого метода на хэш-функцию Snefru.
Помимо методов поиска коллизий, криптоанализ хэш-функций включает в себя также широкий спектр методов анализа слабостей алгоритмов хэширования. Хотя эти слабости не приводят к прямым атакам на хэш-функции, они влияют на оценку стойкости последних.
В работе Миягучи, Охты и Иваты излагаются атаки на некоторые хэш-функции, построенные с помощью блочных шифраторов. Часть этих атак осуществима только при некоторых дополнительных условиях, например, в предположении, что противник может изменять начальные значения.