 
        
        - •Введение
- •1.2 Пример хеш-функции.
- •Ключевые функции хеширования
- •Бесключевые функции хеширования
- •Обзор блочного шифрования.
- •Логика выполнения sha-1
- •Сравнение sha-1 и md5
- •Краткое описание алгоритма гост 28147-89
- •Алгоритм вычисления шаговой функции хэширования
- •Генерация ключей
- •Шифрующее преобразование
- •Перемешивающее преобразование
- •Различные атаки на хеш-функции.
- 
Хеш-функции. - 
Введение
 
- 
Функцией хеширования (в широком смысле)
называется функция 
 ,
удовлетворяющая минимум двум требованиям:
,
удовлетворяющая минимум двум требованиям:
1.       
Сжатие – функция 
 отображает
входное сообщение
отображает
входное сообщение произвольной
конечной длины в хеш-значение
произвольной
конечной длины в хеш-значение 
 небольшой фиксированной длины, при этом
входное сообщение будем называть
прообразом.
небольшой фиксированной длины, при этом
входное сообщение будем называть
прообразом.
2.       
Простота вычисления – для
заданной функции 
 и
сообщения
 и
сообщения 
 ,
,
 вычисляется
не выше, чем с полиномиальной сложностью.
вычисляется
не выше, чем с полиномиальной сложностью.
Хеш-функции имеют разнообразные применения при проведении статистических экспериментов, при тестировании логических устройств, при построении алгоритмов быстрого поиска и проверки целостности записей в базах. Например, для осуществления быстрого поиска нужного сообщения в большом списке сообщений различной длины удобнее сравнивать друг с другом не сами сообщения, а короткие значения их сверток, играющих одновременно роль контрольных сумм. Основным требованием к таким хеш-функциям является равномерность распределения их значений при случайном выборе значений аргументов.
Простейшим примером хэш-функций являются контрольные суммы. Это несложные, крайне быстрые и легко реализуемые аппаратные алгоритмы, используемые для защиты от непреднамеренных искажений, в том числе ошибок аппаратуры. По скорости вычисления в десятки и сотни раз быстрее, чем криптографические хеш-функции, и значительно проще в аппаратной реализации. Примером такого алгоритма является деление сообщения на 32- или 16- битные слова и их суммирование.
Платой за столь высокую скорость является отсутствие криптостойкости — лёгкая возможность подогнать сообщение под заранее известную сумму. Также обычно разрядность контрольных сумм (типичное число: 32 бита) ниже, чем криптографических хешей (типичные числа: 128, 160 и 256 бит), что означает возможность возникновения непреднамеренных коллизий.
Поэтому в криптографии используют более сложные функции.
Рассмотрим основные задачи криптографии в которых используются хэш-функции:
- 
построения систем контроля целостности данных при их передаче или хранении, 
- 
аутентификации источника данных. 
При решении первой задачи для каждого набора данных вычисляется значение хеш-функции (называемое кодом аутентификации сообщения или имитовставкой), которое передается или хранится вместе с самими данными. При получении данных пользователь вычисляет значение свертки и сравнивает его с имеющимся контрольным значением. Несовпадение говорит о том, что данные были изменены.
Хеш-функция, служащая для выработки имитовставки, должна позволять (в отличие от обычной контрольной суммы) осуществлять обнаружение не только случайных ошибок в наборах данных, возникающих при их хранении и передаче, но и сигнализировать об активных атаках злоумышленника, пытающегося осуществить навязывание ложной информации. Для того чтобы злоумышленник не смог самостоятельно вычислить контрольное значение свертки и тем самым осуществить успешную имитацию или подмену данных, хеш-функция должна зависеть от секретного, не известного злоумышленнику, параметра — ключа пользователя. Этот ключ должен быть известен передающей и проверяющей сторонам. Такие хеш-функции будем называть ключевыми.
Имитовставки, формируемые с помощью ключевых хеш-функций, не должны позволять противнику создавать поддельные (сфабрикованные) и модифицировать передаваемые сообщения.
При решении второй задачи — аутентификации источника данных — мы имеем дело с не доверяющими друг другу сторонами. В связи с этим подход, при котором обе стороны обладают одним и тем же секретным ключом, уже неприменим. В такой ситуации применяют схемы цифровой подписи, позволяющие осуществлять аутентификацию источника данных. Как правило, при этом сообщение, прежде чем быть подписано личной подписью, основанной на секретном ключе пользователя, "сжимается" с помощью хеш-функции, выполняющей функцию кода обнаружения ошибок. В данном случае хеш-функция не зависит от секретного ключа и может быть фиксирована и известна всем. Основными требованиями к ней являются гарантии невозможности подмены подписанного документа, а также подбора двух различных сообщений с одинаковым значением хеш-функции (в этом случае говорят, что такая пара сообщений образует коллизию).
Формализуя сказанное, введем следующее определение. Обозначим через X множество, элементы которого будем называть сообщениями. Обычно сообщения представляют собой последовательности символов некоторого алфавита, как правило, двоичного. Пусть Y — множество двоичных векторов фиксированной длины.
Хеш-функцией
 называется
  всякая
  функция
 
 удовлетворяющая
следующим требованиям:
удовлетворяющая
следующим требованиям: 
- 
для данного  легко вычислить легко вычислить 
- 
для данного  трудно вычислить трудно вычислить такое, что такое, что 
- 
для данного  трудно вычислить трудно вычислить , , ,
	такое, что ,
	такое, что . .
Отображение 
 ,
удовлетворяющее требованиям 1) и 2),
является однонаправленным. Иногда
вместо 3) требуют выполнения более
сильного свойства.
,
удовлетворяющее требованиям 1) и 2),
является однонаправленным. Иногда
вместо 3) требуют выполнения более
сильного свойства.
 трудно вычислить пару
трудно вычислить пару 
 ,
для которой
,
для которой 
 .
.
Пара элементов множества 
 (пара сообщений), о которой идет речь в
(пара сообщений), о которой идет речь в
 называется коллизией для отображения
называется коллизией для отображения
 .
Т.к. мощность
.
Т.к. мощность 
 больше мощности
больше мощности 
 ,
то
,
то 
 допускает коллизии.
допускает коллизии.
Покажем теперь, что при выполнении
нескольких естественных предположений
условие 
 влечет выполнение условия 2).
влечет выполнение условия 2).
Лемма 1.1.1 Пусть 
 - конечные множества, и
- конечные множества, и 
 .
Задано произвольное отображение
.
Задано произвольное отображение 
 .
Пусть для любого
.
Пусть для любого 
 имеется эффективный алгоритм вычисления
имеется эффективный алгоритм вычисления
 
 такого, что
такого, что 
 (если
(если 
 существует), при этом алгоритм задает
равномерное распределение на множестве
таких
существует), при этом алгоритм задает
равномерное распределение на множестве
таких 
 при всех
при всех 
 .
Тогда имеется эффективный алгоритм
вычисления коллизии для функции
.
Тогда имеется эффективный алгоритм
вычисления коллизии для функции 
 .
.
Доказательство. Обозначим через 
 алгоритм обращения
алгоритм обращения 
 ,
о котором идет речь в формулировке
леммы. Т.е.
,
о котором идет речь в формулировке
леммы. Т.е. 
 для некоторого
 для некоторого 
 такого, что
такого, что 
 .
Сформулируем алгоритм вычисления
коллизии.
.
Сформулируем алгоритм вычисления
коллизии.
Входные данные алгоритма: хеш-функция
 ,
алгоритм
,
алгоритм 
 .
.
ыходные данные алгоритма: коллизия
для 
 .
.
Шаг 1. Выбрать случайное 
 ,
вычислить
,
вычислить 
 .
.
Шаг 2. Вычислить 
 .
.
Шаг 3. Если 
 ,
то перейти к шагу 1; в противном случае
,
то перейти к шагу 1; в противном случае
 - коллизия для
- коллизия для 
 .
Алгоритм заканчивает работу.
.
Алгоритм заканчивает работу.
	Оценим среднее число прохождений
алгоритма через шаг 1. Имеем вероятностную
схему, исходами которой являются пары
 ,
где
,
где 
 .
Обозначим через
.
Обозначим через 
 множество
множество 
 ,
для которых
,
для которых 
 .
Заметим, что число классов
.
Заметим, что число классов 
 не больше
не больше 
 .
Тогда вероятность исхода
.
Тогда вероятность исхода 
 равна
равна 
 .
Благоприятными являются исходы
.
Благоприятными являются исходы 
 ,
где
,
где 
 .
Найдем вероятность неблагоприятного
исхода. Она равна
.
Найдем вероятность неблагоприятного
исхода. Она равна
 .
.
Отсюда вероятность благоприятного
исхода не меньше 
 .
Т.о. среднее число прохождений алгоритма
через шаг 1 не превосходит 2. Т.е. этот
алгоритм эффективен. Лемма доказана.
.
Т.о. среднее число прохождений алгоритма
через шаг 1 не превосходит 2. Т.е. этот
алгоритм эффективен. Лемма доказана.
	Т.о. свойство 
 влечет 2). Очевидно, что
влечет 2). Очевидно, что 
 влечет также 3).
влечет также 3).
Лемма 1.1.2. В общем случае устойчивая к коллизиям хеш-функция не обязана быть однонаправленной.
В
 качестве
примера
несжимающей
функции
приведем
функцию
 ,
которая,
очевидно,
  является
устойчивой
к
коллизиям
и
к
нахождению
второго
прообраза,
но
не
является
однонаправленной.
,
которая,
очевидно,
  является
устойчивой
к
коллизиям
и
к
нахождению
второго
прообраза,
но
не
является
однонаправленной.
В качестве примера сжимающей хеш-функции рассмотрим функцию h, определенную условиями:
 если
битовая длина x
равна n,
	если
битовая длина x
равна n,
 если
битовая длина x
больше n.
если
битовая длина x
больше n.
где
 —
сжимающая
n-битовая
функция,
устойчивая
к
коллизиям.
Функция
h
также
является
устойчивой
к
коллизиям
и
 к
нахождению
второго
прообраза,
но,
очевидно,
не
является
однонаправленной.
—
сжимающая
n-битовая
функция,
устойчивая
к
коллизиям.
Функция
h
также
является
устойчивой
к
коллизиям
и
 к
нахождению
второго
прообраза,
но,
очевидно,
не
является
однонаправленной.
