Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kody_i_shifry_yuliy_Cezar_Enigma_i_Internet_2007.pdf
Скачиваний:
260
Добавлен:
29.03.2016
Размер:
2.04 Mб
Скачать

185

Шифрование программ, данных и сообщений

К началу 70-х годов большинство крупных компаний, правительственных учреждений и научно-исследовательских институтов уже использовали компьютеры; распространялись и компьютерные сети. Обычно

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

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

(1) "Проблема проверки подлинности документа". Допустим, что пользователь X получает по электронной почте письмо, которое, судя по всему, прислал ему Y. Как может X проверить, что письмо действительно послал Y, и (даже если это так), что оно не подвергнуто изменениям? То, что

вписьме есть электронный адрес Y, ничего не гарантирует, поскольку некто мог воспользоваться компьютером Y в отсутствие хозяина. Даже если Y пользуется паролем, вполне возможно, что после входа в связь он, оставив компьютер включенным, вышел на несколько минут из комнаты - такая вредная привычка провоцирует несанкционированный доступ. Это могло позволить третьему лицу, Z, воспользоваться компьютером Y в его отсутствие, чтобы послать сообщение для X. Если X - это банк, а Y - его клиент, а сообщение уполномочивает X перевести большую сумму денег со счета Y на заокеанский счет, то банк нуждается в способе проверки подлинности сообщения, иначе совершить мошенничество будет очень легко. Кроме того, возможно ли, что Y действительно послал X сообщение, а Z каким-то образом перехватил его и частично изменил ради собственной выгоды?

(2) "Проблема удостоверения подлинности подписи". Допустим, пользователь X послал пользователю Y сообщение, в котором уполномочил его на какие-либо действия. Впоследствии X отрицает, что он посылал сообщение для Y. Спорящие обращаются к третьему лицу (возможно, к судье), которому необходимо решить, посылал ли в действительности X это

186

сообщение, или нет. Существует ли способ, при котором X, подписав сообщение, не мог бы впоследствии отрицать, что оно было им послано, и наоборот, Y не мог бы утверждать, что получил сообщение иного содержания?

Таковы проблемы, поставленные практикой. С самого начала возникновения компьютерных сетей они были предметом широкомасштабных исследований и широкого обсуждения; к ним мы вернемся в следующей главе. Предлагались различные способы решения этих задач, но обязательным условием для каждого из них является существование метода, посредством которого два лица, желающие связаться друг с другом, могут сделать это с помощью общей системы шифрования, подразумевающей использование не менее одного ключа, известного только им одним. Трудность состоит в следующем: "Как им сообщить друг другу свой секретный ключ (ключи), чтобы их не узнали также и посторонние?"

Задача распределения ключей

Ситуация такова: X и Y хотят связываться друг с другом с помощью оговоренной системы шифрования. Третьему лицу, Z, известна эта их оговоренная система шифрования, он в состоянии перехватывать сообщения и желает иметь возможность читать их. X и Y могут знать, а могут и не знать о существовании Z, но они хотят быть уверены в том, что их сообщения должны быть непонятны всем, кроме них самих. Они обязаны допускать, что данная система шифрования известна как Z, так и всем окружающим. Система требует использования одного или более ключей, которые необходимо держать в секрете, и которые могут меняться время от времени (возможно, для каждого сообщения, а возможно, и реже). Каждый, кто получит доступ к ключам, и кто знает метод шифрования, сможет расшифровать их сообщения, поэтому необходимо сохранение этих ключей втайне. Каким образом X и Y могут сообщить друг другу свои ключи, не опасаясь того, что Z их перехватит и сможет воспользоваться ими?

Система ключевого обмена Диффи-Хеллмана

Изящное решение задачи ключевого обмена было предложено Диффи и Хеллманом в 1976 году (см. [12.6]). Чтобы воспользоваться этим методом, пользователям X и Y необходимо выполнить следующее:

(1)X и Y договариваются об использовании двух целых чисел (например, p и m), где p - большое простое число, а m заключено между 1 и (p-1). Значения p и m не нужно держать в секрете.

(2) Пользователь X случайно выбирает секретное число x, а

187

пользователь Y случайно выбирает секретное число y. Числа x и y лежат в диапазоне от 1 до (p-1), и ни одно их них не должно иметь общих делителей с (p-1). В частности, поскольку (p-1) четно, то ни x, ни y не могут быть четными. Ни X, ни Y не сообщают свои секретные числа ни друг другу, ни кому-либо еще.

(3)Пользователь X вычисляет выражение kx = mx(mod p)

и посылает его пользователю Y, который возводит его в степень y, при этом получается число (kx)y.

Пользователь Y вычисляет выражение

ky = my(mod p)

и посылает его пользователю X, который возводит его в степень x, при этом получается число (ky)x.

(4) Поскольку (kx)y = (ky)x mxy(mod p), то получившееся число K = mxy(mod p) может быть использовано как пользователем X, так и пользователем Y в качестве общего ключа, хотя ни один из них не знает секретного ключа другого.

Чтобы использовать систему Диффи-Хеллмана, сначала необходимо уметь найти очень большое простое число, а это задача нетривиальная. С такой же задачей мы снова встретимся при рассмотрении системы шифрования RSA (там требуются два больших простых числа), там же можно найти ссылки на литературу, в которой описан интересный подход к решению этой задачи.

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

Пример 12.1

Пусть для системы Диффи-Хеллмана p=59, m=3, x=7 и y=11. Каковы будут значения kx, ky и K?

Решение

(1)Во-первых, заметим, что (p-1)=58=2 29, и это число не имеет общих делителей ни с x, ни с y.

(2)Пользователь X вычисляет значение 37(mod 59), а пользователь Y вычисляет значение 311(mod 59). Эти вычисления можно производить по-разному, некоторые способы эффективнее других (см. приложение М22). В нашем случае числа достаточно маленькие, и возведение в

188

степень можно произвести на карманном калькуляторе. Итак, 37=2187=37 59+4, 311=177147=59 3002+29,

поэтому kx=4, а ky=29.

(3)Значение общего ключа K получится, если вычислить либо выражение 411(mod 59), либо 297(mod 59). Оба выражения должны дать один и тот же результат; если это не так, то мы сделали ошибку. Поэтому для проверки вычислим оба значения. Теперь числа получаются довольно большие, поэтому вычислим их, приводя по модулю 59 после каждого возведения в степень:

(i) 45=1024=17 59+21 21(mod 59),

поэтому

410 441=7 59+28 28(mod 59),

и следовательно, 411 4 28=112=1 59+53 53(mod 59).

Приходим к выводу, что общий ключ K равен 53.

(ii) Производим проверку, вычисляя значение 297(mod 59). 292=841=14 59+15 15(mod 59),

поэтому

293 29 15=435=7 59+22 22(mod 59).

Возводим в квадрат: 296 484=8 59+12 12(mod 59).

Окончательно, 297 29 12=348=5 59+53 53(mod 59),

и мы получаем подтверждение, что в данном случае K=53.

Причина ограничения на отсутствие у чисел x и y общих делителей с (p-1) заключается в том, что, если например, x имеет такой общий делитель, то значение kx, а следовательно, и значение общего ключа K, может оказаться равным 1 вне зависимости от значения y, что неприемлемо с криптографической точки зрения. Например, если p=31 и m=2, то ни x, ни y не должны иметь общих делителей с числом 30. Если бы X выбрал, например, число x=5, то

kx=25=32 1(mod 31),

и следовательно, kx=1, а с ним и K=1 независимо от того, какое значение y выберет пользователь Y.

Стойкость системы Диффи-Хеллмана

Насколько система Диффи-Хеллмана стойкая? Мы предполагаем, что

189

заинтересованное третье лицо, Z, может узнать значения m, p, kx и ky, но не знает чисел x и y. Стойкость, таким образом, зависит от того, насколько сложно для него, скажем, вычислить x по значению kx(=mx(mod p)). Известно, что это крайне трудная задача (она называется задачей дискретного логарифмирования), если только простое число p не принадлежит некоторому специальному классу. В общем случае эта задача считается невыполнимой для значений p, больших 10200. Как мы увидим далее, схожая задача возникает для метода шифрования RSA.

Однако существует и альтернативный способ атаки, который Z может применить, если он в состоянии перехватывать сообщения в пути между X и Y и слегка задерживать их. Поскольку ему известны значения m и p, то он может, запомнив значения kx и ky, заменить их на свое собственное значение kz=mz, которое он посылает как абоненту X, так и абоненту Y. Ничего не подозревающие X и Y начинают использовать значение kz для шифрования, а Z получает возможность читать их сообщения. Затем он перешифровывает их, используя исходный ключ (соответственно, kx или ky), так что ни X, ни Y не догадаются о том, что их сообщения читают.

Способы предотвращения атак, подобных этой, представляют значительный интерес (см., например, [12.7]).

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

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