101
1 шаг |
А → В |
id(А), EkAB (k, tА, id(B)) |
2 шаг |
В |
DkAB (k, tА, id(B)), |
где E, D – алгоритмы зашифрования и расшифрования; tА – метка времени пользователя А;
id(А), id(B) – идентификаторы пользователя А и В соответственно. Напомним, что включение в сообщение метки времени позволяет проводить контроль единственности и своевременности получения сообщения и предотвращает возможные попытки повторной передачи сообщения, а использование значения идентификатора В предот-
вращает атаки отражения.
Этот протокол может быть модифицирован таким образом, чтобы новый секретный ключ генерировался не одной стороной, а стал результатом двустороннего обмена. Пусть пользователи А и В в процессе протокола выбирают случайные числа kA и kB, тогда:
1 шаг |
А → В |
id(А), EkAB (kА, tА, id(B)) |
2 шаг |
В → А |
id(В), EkAB (kВ, tВ, id(А)) |
3 шаг |
А |
D(EkAB (kВ, tВ, id(А))); k = f(kA, kB) |
|
В |
D(EkAB (kА, tА, id(В))); k = f(kA, kB). |
Примером протокола второго вида может служить протокол А Шамира, позволяющий передать ключ без использования какой-либо общей секретной информации. В этом преобразовании применяются шифрующие алгоритмы, обладающие коммутативным свойством, а именно:
Ek1 (Ek2 (х)) = Ek2 (Ek1 (х)).
В этой ситуации пользователи А и В могут реализовать следующий протокол для передачи секретного ключа k от пользователя А к В.
1 шаг |
А → В |
EkA (k) |
2 шаг |
В → А |
EkВ (EkA (k)) |
3 шаг |
А → В |
DkA (EkВ (EkA (k))) |
4 шаг |
В |
DkВ (DkA (EkВ (EkA (k)))) |
Трехсторонние протоколы передачи ключей
Рассмотрим примеры протоколов распределения ключей между парами пользователей с участием третьей стороны Т, называемой центром. В этом качестве может выступать сервер или узел сети, которому доверяют все участники.
102 |
|
|
1 шаг |
А → Т |
A, B, rA |
2 шаг |
Т → А |
EkАТ (rA, B, k, EkBT(k, A)) |
3 шаг |
А → В |
EkBT(k, A) |
4 шаг |
В → А |
Ek (rB) |
5 шаг |
А → В |
Ek (rB-1). |
В выполнения трех первых шагов протокола пользователи А и В получают сгенерированный центром Т общий ключ k. Четвертый и пятый шаги протокола предназначены для идентификации пользователя А и подтверждения правильности получения общего ключа взаимодействующими сторонами.
Распределение ключей с использованием асимметричных криптографических систем
Уже отмечалось, что благодаря своим свойствам асимметричные криптографические системы широко применяются в процедурах распределения ключей. Действительно, для передачи секретного ключа от пользователя А к В достаточно выполнить следующий одношаго-
вый протокол: |
|
|
1 шаг |
А → В |
EB (k, t, A). |
Естественно, зашифрование передаваемого сообщения осуществляется на открытом ключе пользователя В. Временная метка t включена в сообщения для контроля своевременности его передачи и предотвращения повторного использования ключа.
Для проведения взаимной идентификации и подтверждения правильности получения значения ключа можно воспользоваться сле-
дующим протоколом: |
|
|
1 шаг |
А → В |
EB (k, A) |
2 шаг |
В → А |
EА (r) |
3 шаг |
А |
DА (r) |
4 шаг |
А → В |
Ek (r) |
5 шаг |
В |
Dk (Ek (r)). |
Проводя на 4 и 5 шаге зашифрование и расшифрование случайного числа r, стороны убеждаются в правильности приема ключа, а выполнение 2 и 3 шага подтверждает аутентичность стороны А.
При использовании схемы цифровой подписи аутентифицированный протокол может состоять из одного шага, используя одно из следующих сообщений:
|
|
103 |
1 шаг |
А → В |
EB (A, k, t, SA(А, k, t)) |
1 шаг |
А → В |
EB (A, k), SA(EB (A, k)). |
Открытое распределение ключей
Протоколы открытого распределения ключей позволяют двум абонентам выработать общий секретный ключ в процессе информационного взаимодействия на основе обмена открытыми сообщениями без какой-либо распределяемой заранее секретной информации. Особенностью таких протоколов является то, что ни один из абонентов заранее не может определить значение общего секретного ключа, так как оно зависит от содержания передаваемых в ходе обмена сообщений.
Первый алгоритм открытого распределения ключей был предложен У. Диффи и М. Хеллманом1. Для выполнения протокола взаимодействующие стороны должны договориться о значениях большого простого числа p и образующего элемента α некоторого множества
Zp={1, 2, ..., p-1}.
Множество Zp должно являться конечным полем. Для любого конечного поля существует так называемый образующий или примитивный элемент α, такой, что все ненулевые элементы поля представляются в виде его степеней. Наличие в конечном поле примитивного элемента α позволяет ввести понятие логарифма для ненулевых элементов поля. Логарифм элемента p по основанию α определяется как наименьшее неотрицательное число k, удовлетворяющее равенству p = α k. В настоящее время задача вычисления логарифма в конечном поле не имеет эффективных алгоритмов решения, по этой причине соответствующее свойство широко используется при построении стойких криптографических алгоритмов и протоколов.
Для выработки общего секретного ключа k абоненты А и В должны сгенерировать случайные числа х, 1 ≤ х ≤ р-2, и у, 1 ≤ у ≤ р-2, соответственно. Затем они должны обменяться сообщениями согласно правилу:
1 шаг |
А → В |
х |
( mod p) |
α |
|||
2 шаг |
B → A |
αу ( mod p). |
|
Искомый общий секретный ключ вычисляется по формуле:
3 шаг |
А, В |
у х |
х у |
k =(α ) mod p= (α ) mod p. |
|||
1 Алфёров А. П., Зубов А. Ю., Кузьмин А. С., Черёмушкин А. В. Основы криптографии : учебное пособие. М. : «Гелиос АРВ», 2002. С. 388.
104
Недостатком этого протокола является возможность атаки типа «противник в середине», а именно: предположим, что противник осуществляет контроль канала связи, способен осуществлять подмену передаваемых абонентами сообщений. Тогда, выбрав числа х* и у* и
подменив сообщения αх (mod p) и αу (mod p) на αх* (mod p) и αу* (mod p)
соответственно, он может инициировать формирование ключей: k =(αх)у* mod p
и
k =(αу)х* mod p
для связи с пользователями А и В соответственно. В результате противник получает возможность полностью контролировать обмен сообщениями между абонентами. При этом легальные пользователи не могут обнаружить подмену.
Рассмотрим протокол, устраняющий этот недостаток. Он называется STS (station-to-station) и предполагает применение цифровой подписи.
1 шаг |
А → В |
х |
( mod p) |
|
α |
|
|||
2 шаг |
B → A |
αу ( mod p), |
|
|
3 шаг |
|
|
у х |
х у |
|
k =(α ) mod p= (α ) mod p |
|||
4 шаг |
В → А |
Ek (SB (αу, αх)) |
|
|
5 шаг |
А → В |
Ek (SА ( αх, αу,)). |
|
|
Здесь SА и SB – цифровые подписи пользователей А и В соответственно; k – искомый общий секретный ключ. Шифрование значений подписей введено для того, чтобы обеспечить взаимное подтверждение правильности вычисления секретного ключа.
Предварительное распределение ключей
Большинство криптографических систем требует проведения процедуры распределения секретных ключей. Как уже отмечалось, для распределения ключей стороны могут обмениваться ключами при личной встрече, либо поручить доставку ключей специально назначенному доверенному курьеру, либо использовать для передачи выделенный защищенный канал связи. В зависимости от назначения криптографической системы иногда оказывается удобным распределять не сами секретные ключи, а некоторые вспомогательные ключевые материалы, на основании которых каждый пользователь системы смог бы самостоятельно вычислить необходимый ключ, используя установленную заранее процедуру.
105
Если число абонентов сети засекреченной связи невелико, задача распределения ключей не является сложной. Для больших же сетей распределение ключей становится серьезной проблемой. Для сети, в которой работают n абонентов, необходимо заранее сформировать n(n-1)/2 ключей. Кроме того, каждому пользователю необходимо передать ключи для связи с остальными n-1 абонентами, которые пользователь обязан постоянно хранить. Например, для сети всего лишь со 100 абонентами необходимо сгенерировать и хранить около 5 000 ключей, причем каждый пользователь должен хранить у себя 99 ключей независимо от наличия или отсутствия контактов с определенными абонентами.
Для уменьшения объема распределяемой и хранимой ключевой информации применяют различные схемы предварительного распределения ключей в сети связи. Их суть заключается в том, что реально вначале производится распределение не самих ключей, а некоторых вспомогательных ключевых материалов, имеющих существенно меньшие объемы. На основании этих материалов каждый пользователь сети может самостоятельно вычислить по определенному алгоритму необходимый для сеанса связи секретный ключ.
В качестве примера со значительными упрощениями рассмотрим схему Блома распределения ключей между п абонентами, в которой процедура определения ключа заключается в вычислении значения специального многочлена.
Исходно выбирается множество элементов1 r, размещенных в матрице размерностью nхm, 1 ≤ m < n. Каждый столбец матрицы ri приписывается i-ому абоненту сети, i=1, n. Эти элементы не являются секретными и могут храниться на общедоступном сервере сети.
Далее выбирается многочлен степени 2m: f(х,у) = ∑∑aijхi,j ,
где i, j = 0, m-1;
aij = aji, для i ≠ j.
В матричном виде коэффициенты многочлена могут быть записаны в виде:
а00 |
а01 |
а02 |
… |
а0m-1 |
а10 |
а11 |
а12 |
… |
а1m-1 |
║Ω║ = … |
… |
… |
… |
… |
а10 |
а11 |
а12 |
… |
а1m-1 |
аm-10 аm-11 аm-12 … а m-1m-1
1 Элементы множества должны являться ненулевыми элементами конечного поля F.