Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие КЗИ учебное пособие.docx
Скачиваний:
131
Добавлен:
08.05.2019
Размер:
1.34 Mб
Скачать

5.1. Криптографические хэш-функции

Хэш-функции — это функции, предназначенные для "сжатия" произвольного сообщения или набора данных, записанного, как правило, в двоичном алфавите, в некоторую битовую комбинацию фиксированной длины, называемую сверткой.

В криптографии хэш-функции применяются для задач:

— построения систем контроля целостности данных при их передаче или хранении,

— аутентификации источника данных.

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

Имитовставки, формируемые с помощью ключевых хэш-функций, не должны позволять противнику создавать поддельные (сфабрикованные) сообщения (fabrication) при атаках типа имитация (impersonation) и модифицировать передаваемые сообщения (modification) при атаках типа подмена (substitution).

При решении второй задачи - аутентификации источника данных, обмен данными происходит между не доверяющими друг другу сторонами. В такой ситуации применяют схемы цифровой подписи, позволяющие осуществлять аутентификацию источника данных. Как правило, при этом сообщение, прежде чем быть подписано личной подписью, основанной на секретном ключе пользователя, "сжимается" с помощью хэш-функции, выполняющей функцию кода обнаружения ошибок. В данном случае хэш-функция не зависит от секретного ключа и может быть фиксирована и известна всем. Основными требованиями к ней являются гарантии невозможности подмены подписанного документа, а также подбора двух различных сообщений с одинаковым значением хэш-функции (в этом случае говорят, что такая пара сообщений образует коллизию).

5.1.1. Блочно-итерационные и шаговые функции

Пусть X - множество сообщений (последовательности символов некоторого алфавита, как правило, двоичного). Пусть Y — множество двоичных векторов фиксированной длины.

Хэш-функцией называется всякая функция h: X Y, легко вычислимая и такая, что для любого сообщения М значение h(M) = Н (свертка) имеет фиксированную битовую длину.

Обычно число возможных сообщений значительно превосходит число возможных значений сверток, в силу чего для каждого значения свертки имеется большое множество прообразов, то есть сообщений с заданным значением хэш-функции. При случайном и равновероятном выборе сообщений условие равномерности распределения значений хэш-функции эквивалентно наличию одинакового числа прообразов для каждого значения свертки.

Как правило, хэш-функции строят на основе так называемых одношаговых сжимающих функций у = f(xl, х2) двух переменных, где х, и у - двоичные векторы длины т и п соответственно, причем п — длина свертки. Для получения значения h(M) сообщение М сначала разбивается на блоки длины т (при этом если длина сообщения не кратна т, то последний блок неким специальным образом дополняется до полного), а затем к полученным блокам M1, М2,.., MN применяют следующую последовательную процедуру вычисления свертки:

H0 = v,

Hi = f(Мi, Hi-1), i = 1,...,N,

h(M) = HN.

Здесь v — некоторый фиксированный начальный вектор. Если функция f зависит от ключа, то этот вектор можно положить равным нулевому вектору. Если же функция f не зависит от ключа, то для исключения возможности перебора коротких сообщений (при попытках обращения хэш-функции) этот вектор можно составить из фрагментов, указывающих дату, время, номер сообщения и т. п. Такие хэш-функции называют блочно-итерационными. При таком подходе свойства хэш-функции h полностью определяются свойствами одношаговой сжимающей функции.

Особо выделяют два важных типа криптографических хэш-функций - ключевые и бесключевые. Первые применяются в системах с симметричными ключами. Ключевые хэш-функции называют кодами аутентификации сообщений (КАС) (message authentication code (MAC)). Они дают возможность без дополнительных средств гарантировать как правильность источника данных, так и целостность данных в системах с доверяющими друг другу пользователями.

Бесключевые хэш-функции называются кодами обнаружения ошибок (modification detection code (MDC) или manipulation detection code, message integrity code (MIC)). Они дают возможность с помощью дополнительных средств (например, шифрования, использования защищенного канала или цифровой подписи) гарантировать целостность данных. Эти хэш-функции могут применяться в системах как с доверяющими, так и не доверяющими друг другу пользователями.