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

Щерба В.В. Криптографическая защита информации

.pdf
Скачиваний:
58
Добавлен:
07.01.2021
Размер:
931.06 Кб
Скачать

81

ние свертки и сравнивает его с имеющимся контрольным значением. Несовпадение говорит о том, что данные были изменены.

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

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

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

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

82

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

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

Обычно ХФ строят на основе так называемых одношаговых сжимающих функций у = F(х12) двух переменных, где хi и у – двоичные векторы длины m и n соответственно, причем n – длина свертки. Для получения значения h(M) сообщение M сначала разбивается на блоки длины m (при этом если длина сообщения не кратна m, то последний блок неким специальным образом дополняется до полного), а затем к полученным блокам m1,m2,…,mN применяют следующую последовательную процедуру вычисления свертки:

H0= ,

Hi=F(mi,Hi-1), где i=1,…,N,

h(M)=HN [9.1]

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

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

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

Бесключевые ХФ называются кодами обнаружения ошибок (modification detection code(MDC)) или manipulation detection code, message

83

integritу code (MIC). Они дают возможность с помощью дополнительных средств (например, шифрования, использования защищенного канала или цифровой подписи) гарантировать целостность данных. Эти ХФ могут применяться в системах как с доверяющими, так и не доверяющими друг другу пользователями. Рассмотрим их более подробно.

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

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

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

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

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

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

(возможен случай h(х) = h(хi), i {1,...,t}).

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

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

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

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

84

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

Fk(х,H)=Ek(х H),

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

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

H0=0,

Hi=Ek(mi Hi-1), где i=1,…,N,

h(M)=HN

[9.2]

Данный алгоритм фактически совпадает с режимом шифрования со сцеплением блоков, с той лишь разницей, что в качестве результата берется не весь шифртекст h1,h2…hN, а только его последний блок. Такой режим в ГОСТ 28147-89 называется режимом выработки имитовставки.

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

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

Пусть, например, ключ k добавляется к началу сообщения согласно формуле hk(х) = h(k, х). Если функция h построена на основе одношаговой сжимающей функции по формуле [9.1], то по известным значениям M и H = h(k,M) можно вычислять значения этой функции для любых сообщений вида (M,M’) с дописанным произвольным окончанием M’. Это объясняется итеративностью процедуры вычисления функции, в силу которой для нахождения значения H’= h(k,M,M’) не требуется знание ключа k, достаточно воспользоваться уже вычисленным «промежуточным» значением H. Поэтому такая функция не устойчива к модификации.

85

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

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

H=h(k,у,М, k),

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

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

MAA (Message Authenticator Algorithm), утвержденном стандартом ISO 8731-2.

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

К бесключевым ХФ предъявляют требования, чтобы они были однонаправленными, устойчивыми к коллизиям и устойчивыми к нахождению второго прообраза.

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

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

86

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

Пусть Ek – алгоритм блочного шифрования, n – размер блока, l – размер ключа и G – некоторое отображение, ставящее в соответствие вектору длины n вектор длины l. Рассмотрим следующие одношаговые сжимающие функции, построенные на основе алгоритма Ek:

а) F(х, H) = Eх (H) H (Дэвис – Мейер);

б) F (х, Н) = ЕG(H)(х) х (Матиас – Мейер – Осеас); в) F(х, H) = ЕG(H)(х) х Н (Миагучи – Принель).

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

F’(x,H1,H2)=π(F(х,H1),F(x,H2)),

в которой переставляет произвольные полублоки а, b, с, d по правилу ((а,b),(с,d))=(а,d,с,b). Такой подход реализован в конструкции одношаговой функции МDС-2.

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

При их использовании исходное сообщение M разбивается на блоки длиной m = 512 бит. Последний блок формируется путем дописывания к концу сообщения комбинации 10...0 до получения блока размера 448 бит, к которому затем добавляется комбинация из 64 бит, представляющая битовую длину сообщения. Затем вычисляется значение свертки согласно процедуре [9.1] с использованием одношаговой сжимающей функции, заданной формулой (х,H)=Eх(H) H, где х – блок сообщения длины m = 512 бит, Н – блок из n бит, а Ех – некоторое преобразование множества блоков. Значение начального вектора определяется в описании преобразования Ех.

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

87

ления последовательности значений Нi= (хi, Нi-1), построена на базе четырех параллельно работающих схем блочного шифрования (ГОСТ 28147-89), каждая из которых имеет 256-битовый ключ и оперирует с блоками размера 64 бита. Каждый из ключей вычисляется в соответствии с некоторой линейной функцией от блока исходного сообщения хi и значения Hi-1. Значение Нi является линейной функцией от результата шифрования, блока исходного сообщения хi и значения Нi-1. После вычисления значения НN для последовательности блоков m1,m2,..,mN, применяют еще два шага вычисления согласно формуле:

H=h(M)=F(Z mN,F(L,HN)),

где Z – сумма по модулю два всех блоков сообщения, а L – длина сообщения.

Целостность данных и аутентификация сообщений

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

ХФ Н, которая используется для аутентификации сообщений, должна обладать следующими свойствами:

1.Хэш-функция Н должна применяться к блоку данных любой длины.

2.Хэш-функция Н создает выход фиксированной длины.

3.Н (М) относительно легко (за полиномиальное время) вычисляется для любого значения М.

4.Для любого данного значения хэш-кода h вычислительно невозможно найти M такое, что Н (M) = h.

5.Для любого данного х вычислительно невозможно найти у х,

что H (у) = H (х).

6.Вычислительно невозможно найти произвольную пару (х, у) такую, что H (у) = H (х).

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

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

88

ли хэш-функция не является односторонней, противник может легко раскрыть секретное значение следующим образом. При перехвате передачи атакующий получает сообщение М и хэш-код С = Н (SAB || M). Если атакующий может инвертировать хэш-функцию, то, следовательно, он может получить SAB || M = H-1 (C). Так как атакующий теперь знает и М и SAB || M, получить SAB совсем просто.

Пятое свойство гарантирует, что невозможно найти другое сообщение, чье значение ХФ совпадало бы со значением ХФ данного сообщения. Это предотвращает подделку аутентификатора при использовании зашифрованного хэш-кода. В данном случае противник может читать сообщение и, следовательно, создать его хэш-код. Но так как противник не владеет секретным ключом, он не имеет возможности изменить сообщение так, чтобы получатель этого не обнаружил. Если данное свойство не выполняется, атакующий имеет возможность выполнить следующую последовательность действий: перехватить сообщение и его зашифрованный хэш-код, вычислить хэш-код сообщения, создать альтернативное сообщение с тем же самым хэшкодом, заменить исходное сообщение на поддельное. Поскольку хэшкоды этих сообщений совпадают, получатель не обнаружит подмены.

Хэш-функция, которая удовлетворяет первым пяти свойствам, на-

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

полняется шестое свойство, то такая функция называется сильной хэш-функцией. Шестое свойство защищает против класса атак, известных как атака «день рождения».

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

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

Аутентификация источника данных – получение подтверждения того, что рассматриваемый документ создан именно указанным источником информации. Следует подчеркнуть, что при этом не требу-

89

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

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

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

1.Для обеспечения целостности хранимых данных (М) можно до-

бавить к ним значение криптографической ХФ (М, hk (М)), зависящей от ключа, известного только владельцу информации. Такой способ автоматически решает проблему аутентификации источника данных.

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

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

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

90

ваемого сообщения: Еk(М,h(М)) или (М,Еk(h(М))). В рассматриваемом случае можно повторить те же комментарии, что и в п. 2. К этому следует добавить, что алгоритм шифрования Еk должен быть стойким к атакам на основе известного открытого текста.

5.На практике чаще, чем предыдущие, применяются схемы, использующие бесключевые ХФ в сочетании с асимметричным шифро-

ванием. Подобным образом на основе схемы (М, Еk(h(М))) строятся алгоритмы вычисления цифровой подписи. Подобные схемы позволяют решать проблему аутентификации источника как при взаимодействии доверяющих друг другу, так и не доверяющих друг другу сторон.

6.Возможно совместное использование ключевой ХФ и симметричного шифрования в соответствии с одной из следующих схем:

Ek(M,Hk2(M)),

(Ek1(M),hk2(M)), (Ek1(M),hk2(Ek1(M)))и т. д.

При таком подходе не только ключи шифрования (k1) и (k2) ХФ должны быть независимыми, но и сами алгоритмы шифрования и вычисления значения ХФ также должны иметь существенные различия. В противном случае возникают дополнительные соотношения, которые можно использовать для отбраковки ключей.

В заключение необходимо рассмотреть вопрос о дополнительных гарантиях единственности и своевременности передачи сообщений. В этом случае используется термин «аутентификация транзакции», который означает аутентификацию сообщения с подтверждением единственности и своевременности передачи данных. Данный тип аутентификации предоставляет возможность защититься от повторного использования ранее переданных сообщений. Это необходимо в тех случаях, когда подобная угроза может привести к необратимым последствиям. Примером таких задач являются электронные банковские платежи или системы автоматизированного управления различными объектами.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]