Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Алфёров А.П., Зубов А.Ю., Кузьмин А.С., Черемушкин А.В. Основы криптографии

.pdf
Скачиваний:
4126
Добавлен:
28.03.2016
Размер:
7.75 Mб
Скачать

Хэш-функции

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

Иногда эти свойства объединяют в одно более сильное свойство — свойство вычислительной устойчивости. Это требование означает высокую сложность подбора для задан­ ного множества сообщений {х19..,х,} (быть может, пустого) с

известными значениями сверток еще одного сообщения х, х Ф X;, / = 1,...,/, с правильным значением свертки (возмо­ жен случай И(х) = И(х1), / € (1,..., /}).

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

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

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

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

351

I лава 13

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

/ к(х,Н) = Ек( х Ф Н ) ,

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

Для вычисления значения И(М) сообщение М представ­ ляется в виде последовательности ^-битовых блоков М\,М2>-'№ы • Если при этом длина сообщения не кратна длине блока, то последний блок неким специальным образом допол­ няется до полного блока. Алгоритм вычисления свертки име­ ет следующий вид:

н 0=0,

Я, = Е к(М,®Н,_1), 1 = 1,..., Я ,

(2)

к ( М ) = Н ы.

 

Данный алгоритм фактически совпадает с режимом шиф­ рования со сцеплением блоков (см. гл. 8), с той лишь разни­ цей, что в качестве результата берется не весь шифртекст

Н Х^Н2,..,НМ, а только его последний блок. Такой режим в

ГОСТе 28147-89 называется режимом выработки имитов­ ставки.

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

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

352

Хэш-функции

Пусть, например, ключ к добавляется к началу сообщения согласно формуле кк{х) = к(к,х) . Если функция И построена на основе одношаговой сжимающей функции по формуле ( 1 ), то по известным значениям М и Н = к{к,М) можно вычис­ лять значения этой функции для любых сообщений вида {ММ') с дописанным произвольным окончанием М \ Это объ­ ясняется итеративностью процедуры вычисления функции, в силу которой для нахождения значения Н ' = к { к М * М ' ) не требуется знание ключа к, достаточно воспользоваться уже вычисленным “промежуточным” значением Н. Поэтому такая функция не устойчива к модификации.

В случае когда ключ добавляется в конец сообщения со­

гласно формуле

Н = кк( М) = к ( М , к ) ,

знание коллизии для

функции

А, то

есть пары х 19х 2,

х 1 * х 29

такой,

что

к( хх) = к(х2),

позволяет вычислять

значения

к(х], к) =

= к(х2 9к)

для любого ключа к. Поэтому трудоемкость моди­

фикации сообщения М = X] оценивается не величиной

2 "),

а сравнима с трудоемкостью поиска коллизии, оцениваемой величиной о (2 л/2), так как в данном случае применима атака, основанная на парадоксе “дней рождений”.

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

Н= к(к, у, М,к),

Н= И(к,у1,И(к,у2, М ) ) ,

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

353

/ лава 13

такого метода является слишком большая длина п свертки. Дело в том, что для целей проверки целостности обычно вы­ бирают длину свертки п в пределах 32-Н54, а для аутентифи­ кации необходимо условие п > 128.

В заключение отметим, что существуют ключевые хэшфункции, не использующие какую-либо основу типа блочного шифрования или вычисления бесключевой хэш-функции, а разработанные независимо с учетом эффективной реализации на современных ЭВМ. Примером служит ключевая хэшфункция, используемая в алгоритме МАА (Мезза^е Ашкеп- Нса1ог А1%огИкт\ утвержденном стандартом 180 8731-2.

§ 13.3. Бесключевые функции хэширования

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

1 ) однонаправленность,

2)устойчивость к коллизиям,

3)устойчивость к нахождению второго прообраза,

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

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

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

Для построения примера хэш-функции, удовлетворяющей свойству 1 ), рассмотрим функцию, заданную формулой

354

Хэш-функции

8к(х) = Ек(х)®х 9 где Ек — алгоритм блочного шифрования. Такая функция является однонаправленной по обоим аргу­ ментам. Поэтому на ее основе можно построить хэш-функцию по правилу ( 1), определив одношаговую сжимающую функ­ цию одной из следующих формул:

/ ( х , Н ) = Ен ( х ) @ х

ИЛИ

/( . Х, Н ) = Ех( Н ) ® Н .

Первая из этих функций лежит в основе российского стандарта хэш-функции, а вторая — в основе американского стандарта 8НА.

Справедливо следующее

Утверждение 1. Если функция хэширования к построена на основе одношаговой сжимающей функции/ по правшу ( 1), то из устойчивости к коллизиям функции/ следует устойчи­ вость к коллизиям функции А.

Действительно, если у функции А имеется коллизия, то на некотором шаге / должна существовать коллизия у функции / (при определении коллизий функцию / ( х ]9х 2) следует рас­ сматривать как функцию от одного переменного, полученного конкатенацией переменных х х, х2 в один входной вектор).

Укажем взаимозависимость между свойствами 1) и 2).

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

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

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

В качестве примера несжимающей функции приведем функцию А(х) = х , которая, очевидно, является устойчивой

355

I лава 13

к коллизиям и к нахождению второго прообраза, но не явля­ ется однонаправленной.

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

к(х) = (1, х ) , если битовая длина х равна п,

к(х) = (0,# (х )), если битовая длина х больше п,

где #(х) — сжимающая и-битовая функция, устойчивая к кол­ лизиям. Функция к также является устойчивой к коллизиям и к нахождению второго прообраза, но, очевидно, не является однонаправленной.

Утверждение 4. Пусть к : X -> У хэш-функция и | X | > 2 1У |. Тогда если существует эффективный алгоритм

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

Д оказательство. Будем случайно и равновероятно вы­ бирать сообщение х, вычислять у = к (х ) , х' = к~х(у) и срав­ нивать х с х ' . Покажем, что данный алгоритм имеет вероят­ ность успеха р > 1 / 2 . Под успехом мы понимаем построение

х ' , отличного от х.

Пусть X = Х хи ... и Х т — разбиение X на классы, со­

стоящие из сообщений с одинаковыми значениями хэшфункции. Ясно, что т < \У\. Легко заметить, что выполняют­ ся следующие соотношения:

Р

^ V

V

~ ^

\х \

I —Л=

|у|2-»

2^

 

|

V

 

/ = 1

 

 

/ !

 

I I / = 1

 

=

\Х\-т

\Х\-\Г\

1

 

,

^

-

 

>

2

 

 

 

 

1*1

 

 

 

 

Утверждение доказано. 356

Хэш-функции

Заметим, что трудоемкость подбора прообраза для одно­ направленной функции или трудоемкость поиска второго

прообраза оцениваются величиной о (2"). В то же время тру­

доемкость поиска коллизии оценивается величиной

так как в данной ситуации применима атака, основанная на парадоксе “дней рождений”.

Рассмотрим конкретные примеры хэш-функций, постро­ енных на основе некоторых алгоритмов преобразования бло­ ков.

Пусть Ек — алгоритм блочного шифрования, п — размер блока, / — размер ключа и О — некоторое отображение, ста­ вящее в соответствие вектору длины п вектор длины /. Рас­ смотрим следующие одношаговые сжимающие функции, по­ строенные на основе алгоритма

а) /(*> Щ = Ех(Н ) ® Н (Дэвис — Мейер);

б) / ( х , Н ) = Е0(Н)( х х (Матиас — Мейер — Осеас);

в) / ( * , Н ) = Ев(Н)(х) Ф х Ф Н (Миагучи — Принель).

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

/Ч *,Я РЯ2) = * (/(* ,Я ,),/(х ,Я 2)),

в которой жпереставляет произвольные полублоки а, Ь, с, с/ по правилу л((а,Ь),(с,с1)) = (#, с1,с,Ь) . Такой подход, ис­

357

I лава 13

пользующий схему (б), реализован в конструкции одношаго­ вой функции МОС-2.

Другие примеры бесключевых хэш-функций дают из­ вестные алгоритмы МБ-4, МО-5 и 8НА. Они оперируют с блоками длины я, совпадающей с длиной результирующего значения свертки, причем п = 128 для алгоритма МБ-4 и п = = 160 для МО-5 и 8НА. Указанные алгоритмы спроектированы специально с учетом эффективной реализации на 32разрядных ЭВМ.

При их использовании исходное сообщение М разбивает­ ся на блоки длиной т - 512 бит. Последний блок формирует­ ся путем дописывания к концу сообщения комбинации 10...0 до получения блока размера 448 бит, к которому затем добав­ ляется комбинация из 64 бит, представляющая битовую длину сообщения. Затем вычисляется значение свертки согласно процедуре ( 1) с использованием одношаговой сжимающей функции, заданной формулой / ( х , Н ) = Ех(Н)@Н, где х

блок сообщения длины т = 512 бит, Я — блок из п бит, а Ех— некоторое преобразование множества блоков. Значение на­ чального вектора определяется в описании преобразования Ех.

В стандарте хэш-функции ГОСТ Р 34.11-94 приняты зна­ чения п = т = 512. Одношаговая сжимающая функция /(х ,Я ), используемая для вычисления последовательности

значений Я, = / (х,, Я /Ч), построена на базе четырех парал­

лельно работающих схем блочного шифрования (ГОСТ 28147-89), каждая из которых имеет 256-битовый ключ и опе­ рирует с блоками размера 64 бита. Каждый из ключей вычис­ ляется в соответствии с некоторой линейной функцией от блока исходного сообщения х1 и значения Нг.\. Значение Я, является линейной функцией от результата шифрования, бло­ ка исходного сообщения х, и значения Н1Л. После вычисления значения Ни для последовательности блоков М ]9М 2,..9М м

применяют еще два шага вычисления согласно формуле

я = к(М) = /(2 е м „,/(I, н И)),

358

хэш-функции

где 2 — сумма по модулю два всех блоков сообщения, а Ь — длина сообщения.

§13.4. Целостность данных

иаутентификация сообщений

Термин “аутентификация” означает установление под­ линности. Он может относиться ко всем аспектам взаимодей­ ствия: сеансу связи, сторонам, передаваемым сообщениям и т. д. Применительно к самой информации аутентификация означает проверку того, что данные, передаваемые по каналу связи, являются подлинными по своему источнику и содер­ жанию, по времени создания, времени пересылки и т. д.

Рассмотрим эти свойства более подробно.

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

Аутентификация источника данных — получение под­ тверждения того, что рассматриваемый документ был создан именно указанным соответствующим образом источником информации. Подчеркнем, что при этом не требуется провер­ ка времени создания и единственности документа, важно только то, что он был создан в некоторый (обычно неопреде­ ленный) момент времени в прошлом. Нарушение “единствен­ ности документа” подразумевает его повторную передачу или повторное использование. Если источник сообщений фикси­ рован, то вместо термина “аутентификация источника дан­ ных” используют термин “аутентификация сообщений”.

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

359

Глава 13

будем считать по определению, что аутентификация источни­ ка данных включает проверку целостности данных.

Рассмотрим примеры.

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

только владельцу информации. Такой способ автоматиче­ ски решает проблему аутентификации источника данных.

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

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

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

ния: Е к(М ,к(М У) или ( М ,Е к{Н {М ))). В рассматри­

ваемом случае можно повторить те же комментарии, что и в п. 2. К этому следует добавить, что алгоритм шифрова­

360