Хэш-функции
Первое требование означает высокую сложность подбора сообщения с правильным значением свертки. Второе — высо кую сложность подбора для заданного сообщения с извест ным значением свертки другого сообщения с правильным значением свертки.
Иногда эти свойства объединяют в одно более сильное свойство — свойство вычислительной устойчивости. Это требование означает высокую сложность подбора для задан ного множества сообщений {х19..,х,} (быть может, пустого) с
известными значениями сверток еще одного сообщения х, х Ф X;, / = 1,...,/, с правильным значением свертки (возмо жен случай И(х) = И(х1), / € (1,..., /}).
Заметим, что здесь и всюду ниже слова “высокая слож ность” означают такую вычислительную сложность задачи, при которой ее решение с использованием вычислительной техники за реальное время невозможно.
Ключевые функции применяются в ситуациях, когда сто роны доверяют друг другу и могут иметь общий секретный ключ. Обычно в этих условиях не требуется, чтобы система обеспечивала защиту в случае отказа получателя от факта по лучения сообщения или его подмены. Поэтому от ключевых хэш-функций не требуется устойчивости к коллизиям.
Обычные атаки на ключевые хэш-функции заключаются в имитации, то есть в передаче сфабрикованных сообщений в пустом канале, а также в подмене передаваемых сообщений с целью навязывания приемной стороне ложных сообщений.
Заметим, что из свойства вычислительной устойчивости вытекает невозможность определения ключа, используемого хэш-функцией, так как знание ключа дает возможность вы числять значение свертки для любого набора данных. В то же время обратное утверждение неверно, так как подбор значе ния функции хэширования возможен в некоторых случаях без предварительного определения ключа.
I лава 13
В качестве примера рассмотрим широко распространен ную хэш-функцию, построенную на основе одношаговой сжимающей функции вида
/ к(х,Н) = Ек( х Ф Н ) ,
где Ек — алгоритм блочного шифрования.
Для вычисления значения И(М) сообщение М представ ляется в виде последовательности ^-битовых блоков М\,М2>-'№ы • Если при этом длина сообщения не кратна длине блока, то последний блок неким специальным образом допол няется до полного блока. Алгоритм вычисления свертки име ет следующий вид:
н 0=0,
Я, = Е к(М,®Н,_1), 1 = 1,..., Я , |
(2) |
к ( М ) = Н ы. |
|
Данный алгоритм фактически совпадает с режимом шиф рования со сцеплением блоков (см. гл. 8), с той лишь разни цей, что в качестве результата берется не весь шифртекст
Н Х^Н2,..,НМ, а только его последний блок. Такой режим в
ГОСТе 28147-89 называется режимом выработки имитов ставки.
Еще одной основой для построения ключевых хэшфункций могут служить бесключевые хэш-функции. При этом для вычисления значения свертки ключ приписывается к ис ходному сообщению.
Заметим, что если ключ просто дописывать в начало или в конец исходного сообщения, то это может приводить к по тенциальным слабостям, позволяющим в некоторых случаях осуществлять модификацию сообщений.
Хэш-функции
Пусть, например, ключ к добавляется к началу сообщения согласно формуле кк{х) = к(к,х) . Если функция И построена на основе одношаговой сжимающей функции по формуле ( 1 ), то по известным значениям М и Н = к{к,М) можно вычис лять значения этой функции для любых сообщений вида {ММ') с дописанным произвольным окончанием М \ Это объ ясняется итеративностью процедуры вычисления функции, в силу которой для нахождения значения Н ' = к { к М * М ' ) не требуется знание ключа к, достаточно воспользоваться уже вычисленным “промежуточным” значением Н. Поэтому такая функция не устойчива к модификации.
В случае когда ключ добавляется в конец сообщения со
гласно формуле |
Н = кк( М) = к ( М , к ) , |
знание коллизии для |
функции |
А, то |
есть пары х 19х 2, |
х 1 * х 29 |
такой, |
что |
к( хх) = к(х2), |
позволяет вычислять |
значения |
к(х], к) = |
= к(х2 9к) |
для любого ключа к. Поэтому трудоемкость моди |
фикации сообщения М = X] оценивается не величиной |
2 "), |
а сравнима с трудоемкостью поиска коллизии, оцениваемой величиной о (2 л/2), так как в данном случае применима атака, основанная на парадоксе “дней рождений”.
В связи с этим более предпочтительными являются спо собы введения ключа, при которых ключ вставляется в сооб щение не один, а, по крайней мере, два раза. В [Меп97] ука зываются два таких способа:
Н= к(к, у, М,к),
Н= И(к,у1,И(к,у2, М ) ) ,
где у, у\ и у2 — дополнения ключа к до размера, кратного длине блока п. Для определенных бесключевых хэш-функций к такой подход позволяет строить эффективно вычислимые и устойчивые к атакам ключевые хэш-функции. Недостатком
/ лава 13
такого метода является слишком большая длина п свертки. Дело в том, что для целей проверки целостности обычно вы бирают длину свертки п в пределах 32-Н54, а для аутентифи кации необходимо условие п > 128.
В заключение отметим, что существуют ключевые хэшфункции, не использующие какую-либо основу типа блочного шифрования или вычисления бесключевой хэш-функции, а разработанные независимо с учетом эффективной реализации на современных ЭВМ. Примером служит ключевая хэшфункция, используемая в алгоритме МАА (Мезза^е Ашкеп- Нса1ог А1%огИкт\ утвержденном стандартом 180 8731-2.
§ 13.3. Бесключевые функции хэширования
Обычно требуется, чтобы бесключевые хэш-функции об ладали следующими свойствами:
1 ) однонаправленность,
2)устойчивость к коллизиям,
3)устойчивость к нахождению второго прообраза,
означающими соответственно высокую сложность нахожде ния сообщения с заданным значением свертки; пары сообще ний с одинаковыми значениями свертки; второго сообщения с тем же значением свертки для заданного сообщения с извест ным значением свертки.
Например, хэш-функция СЯС-32, представляющая собой контрольную сумму, является линейным отображением и по этому не удовлетворяет ни одному из этих трех свойств.
Использование в качестве бесключевой хэш-функции рассмотренной выше функции (2), построенной на основе ал горитма блочного шифрования в режиме выработки имитов ставки, также нецелесообразно, так как обратимость блочного шифрования позволяет подбирать входное сообщение для любого значения свертки при фиксированном и общеизвест ном ключе.
Для построения примера хэш-функции, удовлетворяющей свойству 1 ), рассмотрим функцию, заданную формулой
Хэш-функции
8к(х) = Ек(х)®х 9 где Ек — алгоритм блочного шифрования. Такая функция является однонаправленной по обоим аргу ментам. Поэтому на ее основе можно построить хэш-функцию по правилу ( 1), определив одношаговую сжимающую функ цию одной из следующих формул:
/ ( х , Н ) = Ен ( х ) @ х
ИЛИ
/( . Х, Н ) = Ех( Н ) ® Н .
Первая из этих функций лежит в основе российского стандарта хэш-функции, а вторая — в основе американского стандарта 8НА.
Справедливо следующее
Утверждение 1. Если функция хэширования к построена на основе одношаговой сжимающей функции/ по правшу ( 1), то из устойчивости к коллизиям функции/ следует устойчи вость к коллизиям функции А.
Действительно, если у функции А имеется коллизия, то на некотором шаге / должна существовать коллизия у функции / (при определении коллизий функцию / ( х ]9х 2) следует рас сматривать как функцию от одного переменного, полученного конкатенацией переменных х х, х2 в один входной вектор).
Укажем взаимозависимость между свойствами 1) и 2).
Утверждение 2. Если хэш-функция устойчива к коллизи ям, то она устойчива к нахождению второго прообраза.
Действительно, если для заданной пары сообщениесвертка можно подобрать второй прообраз, то полученная па ра сообщений будет составлять коллизию.
Утверждение 3. Устойчивая к коллизиям хэш-функция не обязана быть однонаправленной.
В качестве примера несжимающей функции приведем функцию А(х) = х , которая, очевидно, является устойчивой
I лава 13
к коллизиям и к нахождению второго прообраза, но не явля ется однонаправленной.
В качестве примера сжимающей хэш-функции рассмот рим функцию А, определенную условиями
к(х) = (1, х ) , если битовая длина х равна п,
к(х) = (0,# (х )), если битовая длина х больше п,
где #(х) — сжимающая и-битовая функция, устойчивая к кол лизиям. Функция к также является устойчивой к коллизиям и к нахождению второго прообраза, но, очевидно, не является однонаправленной.
Утверждение 4. Пусть к : X -> У — хэш-функция и | X | > 2 1У |. Тогда если существует эффективный алгоритм
обращения функции к, то существует вероятностный алго ритм нахождения коллизии функции к с вероятностью успе ха, большей 1/2.
Д оказательство. Будем случайно и равновероятно вы бирать сообщение х, вычислять у = к (х ) , х' = к~х(у) и срав нивать х с х ' . Покажем, что данный алгоритм имеет вероят ность успеха р > 1 / 2 . Под успехом мы понимаем построение
х ' , отличного от х.
Пусть X = Х хи ... и Х т — разбиение X на классы, со
стоящие из сообщений с одинаковыми значениями хэшфункции. Ясно, что т < \У\. Легко заметить, что выполняют ся следующие соотношения:
Р |
^ V |
V |
\х |
~ ^ |
\х \ |
I —Л= |
|у|2-» |
2^ |
|
| |
V |
|
/ = 1 |
|
|
1л |
/ ! |
|
I I / = 1 |
|
= |
\Х\-т |
\Х\-\Г\ |
1 |
• |
|
, |
^ |
- |
|
> |
2 |
|
|
|
|
1*1 |
|
|
|
|
Утверждение доказано. 356
Хэш-функции
Заметим, что трудоемкость подбора прообраза для одно направленной функции или трудоемкость поиска второго
прообраза оцениваются величиной о (2"). В то же время тру
доемкость поиска коллизии оценивается величиной
так как в данной ситуации применима атака, основанная на парадоксе “дней рождений”.
Рассмотрим конкретные примеры хэш-функций, постро енных на основе некоторых алгоритмов преобразования бло ков.
Пусть Ек — алгоритм блочного шифрования, п — размер блока, / — размер ключа и О — некоторое отображение, ста вящее в соответствие вектору длины п вектор длины /. Рас смотрим следующие одношаговые сжимающие функции, по строенные на основе алгоритма
а) /(*> Щ = Ех(Н ) ® Н (Дэвис — Мейер);
б) / ( х , Н ) = Е0(Н)( х )® х (Матиас — Мейер — Осеас);
в) / ( * , Н ) = Ев(Н)(х) Ф х Ф Н (Миагучи — Принель).
Значением любой из хэш-функций, построенных по пра вилу ( 1 ) из приведенных одношаговых сжимающих функций, является вектор длины п, равной размеру блока. В случае если эта величина оказывается недостаточной, ее можно увели чить, заменив одношаговую функцию/ на функцию/! с удво енной размерностью значений. Это можно сделать, например, путем двукратного применения функции / с последующим перемешиванием полублоков согласно формуле:
/Ч *,Я РЯ2) = * (/(* ,Я ,),/(х ,Я 2)),
в которой жпереставляет произвольные полублоки а, Ь, с, с/ по правилу л((а,Ь),(с,с1)) = (#, с1,с,Ь) . Такой подход, ис
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, н И)),
хэш-функции
где 2 — сумма по модулю два всех блоков сообщения, а Ь — длина сообщения.
§13.4. Целостность данных
иаутентификация сообщений
Термин “аутентификация” означает установление под линности. Он может относиться ко всем аспектам взаимодей ствия: сеансу связи, сторонам, передаваемым сообщениям и т. д. Применительно к самой информации аутентификация означает проверку того, что данные, передаваемые по каналу связи, являются подлинными по своему источнику и содер жанию, по времени создания, времени пересылки и т. д.
Рассмотрим эти свойства более подробно.
Целостность данных — свойство, позволяющее убедить ся в том, что данные не изменялись неавторизованным спосо бом с тех пор, как они были созданы, переданы или сохране ны авторизованным источником. Под изменениями обычно понимают пропуски, вставки, замены и перестановки фраг ментов сообщения.
Аутентификация источника данных — получение под тверждения того, что рассматриваемый документ был создан именно указанным соответствующим образом источником информации. Подчеркнем, что при этом не требуется провер ка времени создания и единственности документа, важно только то, что он был создан в некоторый (обычно неопреде ленный) момент времени в прошлом. Нарушение “единствен ности документа” подразумевает его повторную передачу или повторное использование. Если источник сообщений фикси рован, то вместо термина “аутентификация источника дан ных” используют термин “аутентификация сообщений”.
Целостность данных и аутентификация источника данных тесно связаны друг с другом. Действительно, если данные подверглись модификации, то у них автоматически изменился источник. Если же не установлен источник, то без ссылки на него нельзя разрешить проблему целостности. В связи с этим
359
Глава 13
будем считать по определению, что аутентификация источни ка данных включает проверку целостности данных.
Рассмотрим примеры.
1.Для обеспечения целостности хранимых данных (М) мож но добавить к ним значение криптографической хэшфункции (М , к к( М )), зависящей от ключа, известного
только владельцу информации. Такой способ автоматиче ски решает проблему аутентификации источника данных.
2.Для обеспечения целостности передаваемого сообщения можно так же, как и в п. 1 , использовать хэш-функцию, зависящую от секретного ключа, известного отправителю и получателю. Аутентификация источника гарантируется тем, что секретный ключ известен только двум сторонам. При этом, однако, исключается возможность разрешения споров, связанных с отказом от авторства. Поэтому аутен тификация источника с помощью ключевой хэш-функции возможна только при взаимодействии доверяющих друг другу сторон.
3.При аутентификации источника можно использовать симметричное шифрование, добавляя предварительно к исходному сообщению некоторый секретный, известный только отправителю и получателю, идентификатор. Такой способ, однако, не гарантирует целостности получаемых данных. Дело в том, что шифрование может допускать возможность модификации данных при передаче. Кроме того, для его реализации требуется секретный канал для обмена подобными идентификаторами.
4.Аутентификация источника возможна также при совмест ном использовании бесключевой хэш-функции и симмет ричного шифрования. Для этого достаточно воспользо ваться одной из следующих форм передаваемого сообще
ния: Е к(М ,к(М У) или ( М ,Е к{Н {М ))). В рассматри
ваемом случае можно повторить те же комментарии, что и в п. 2. К этому следует добавить, что алгоритм шифрова