Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Криптографическая защита информации.doc
Скачиваний:
197
Добавлен:
04.12.2018
Размер:
1.91 Mб
Скачать

7.2. Ключевые функции хэширования

В криптографических приложениях к ключевым функци­ям хэширования предъявляются следующие основные требо­вания:

– невозможность фабрикации;

– невозможность модификации.

Первое требование означает высокую сложность подбора сообщения с правильным значением свертки. Второе – высокую сложность подбора для заданного сообщения с известным значением свертки другого сообщения с правильным значением свертки.

Иногда эти свойства объединяют в одно более сильное свойство – свойство вычислительной устойчивости. Это требование означает высокую сложность подбора для заданного множества сообщений 1,..,хt} (быть может, пустого) с известными значениями сверток еще одного сообщения х, х хi, i=1,...,t, с правильным значением свертки (возможен случай h(x) = h(хi), i{1,...,t}).

Заметим, что здесь и всюду ниже слова "высокая слож­ность" означают такую вычислительную сложность задачи, при которой ее решение с использованием вычислительной техники за реальное время невозможно.

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

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

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

В качестве примера рассмотрим широко распространенную хэш-функцию, построенную на основе одношаговой сжимающей функции вида

fk(x)=Еk(хН),

где Ek алгоритм блочного шифрования.

Для вычисления значения h(M) сообщение М представляется в виде последовательности n-битовых блоков М12,..,МN. Если при этом длина сообщения не кратна длине блока, то последний блок неким специальным образом допол­няется до полного блока. Алгоритм вычисления свертки име­ет следующий вид:

Н0 = 0, Нi = Еk (Мi Hi-1), i=1,...,N, h(M)=HN. (7.2)

Данный алгоритм фактически совпадает с режимом шиф­рования со сцеплением блоков (см. 6), с той лишь разни­цей, что в качестве результата берется не весь шифртекст Н12,..,НN, а только его последний блок. Такой режим в ГОСТе 28147-89 называется режимом выработки имитовставки.

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

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

Пусть, например, ключ k добавляется к началу сообщения согласно формуле hk(х) = h(k,x). Если функция h построена на основе одношаговой сжимающей функции по формуле (7.1), то по известным значениям М и H=h(k,M) можно вычис­лять значения этой функции для любых сообщений вида ( М, М') с дописанным произвольным окончанием М'. Это объясняется итеративностью процедуры вычисления функции, в силу которой для нахождения значения H'=h(k,M,M') не требуется знание ключа k, достаточно воспользоваться уже вычисленным "промежуточным" значением H. Поэтому такая функция не устойчива к модификации.

В случае когда ключ добавляется в конец сообщения согласно формуле H =hk (M)=h(M,k), знание коллизии для функции h, то есть пары х12, х1х2, такой, что h(х1) = h2), позволяет вычислять значения h1,k) =h2,k) для любого ключа k. Поэтому трудоемкость моди­фикации сообщения М= х1 оценивается не величиной 0(2n), а сравнима с трудоемкостью поиска коллизии, оцениваемой "величиной 0(2п/2}, так как в данном случае применима атака, основанная на парадоксе "дней рождений".

В связи с этим более предпочтительными являются способы введения ключа, при которых ключ вставляется в сооб­щение не один, а, по крайней мере, два раза. Можно указать два таких способа:

H=h(k,y,M,k),

H=h(k, y1,h(k, y2,M)),

где y, y1, у2 – дополнения ключа k до размера, кратного длине блока п. Для определенных бесключевых хэш-функций h такой подход позволяет строить эффективно вычислимые и устойчивые к атакам ключевые хэш-функции. Недостатком такого метода является слишком большая длина п свертки. Для целей проверки целостности обычно вы­бирают длину свертки п в пределах 32-64, а для аутентифи­кации необходимо условие п > 128.

В заключение отметим, что существуют ключевые хэш-функции, не использующие какую-либо основу типа блочного шифрования или вычисления бесключевой хэш-функции, а разработанные независимо с учетом эффективной реализации на современных ЭВМ. Примером служит ключевая хэш-функция, используемая в алгоритме МАА (Message Authenticator Algorithm), утвержденном стандартом ISO 8731-2.