Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Раздел 3.doc
Скачиваний:
11
Добавлен:
07.11.2018
Размер:
744.96 Кб
Скачать

3. Криптосистемы с открытым ключом

3.1. Предыстория и основные идеи

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

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

Вторая задача возникла с появлением радиолокаторов и системы ПВО. При пересечении самолетом границы радиолокатор спрашивает пароль. Если пароль верный, то самолет «свой», в противном случае — «чужой». Здесь возникает такая проблема: так как пароль должен передаваться по открытому каналу (воздушной среде), то противник может прослушивать все переговоры и узнавать правильный пароль. Затем «чужой» самолет в случае запроса повторит перехваченный ранее «правильный» пароль в качестве ответа локатору и будет пропущен.

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

Сегодня все эти проблемы решаются с использованием криптографических методов. Решение всех этих задач основано на важном понятии односторонней функции (one-way function).

Определение 3.1. Пусть дана функция

y=f(х), (3.1)

определенная на конечном множестве X (), для которой существует обратная функция

x=f -1(y). (3.2)

Функция называется односторонней, если вычисление по формуле (3.1) - простая задача, требующая немного времени, а вычисление по (3.2) - задача сложная, требующая привлечения массы вычислительных ресурсов, например, 106-1010 лет работы мощного суперкомпьютера.

В качестве примера односторонней функции рассмотрим следующую:

у = ах mod p, (3.3)

где р - некоторое простое число (т.е. такое, которое делится без остатка только на себя и на единицу), ах— целое число из множества {1, 2,...,р-1}. Обратная функция обозначается

х = loga у mod p (3.4)

и называется дискретным логарифмом.

Для того чтобы обеспечить трудность вычисления по (3.4) при использовании лучших современных компьютеров, в настоящее время используются числа размером более 512 бит. На практике часто применяются и другие односторонние функции, например, так называемые хеш-функции, оперирующие с существенно более короткими числами порядка 60-120 бит.

Сначала мы покажем, что вычисление по (3.3) может быть выполнено достаточно быстро. Начнем с примера вычисления числа a16 mod p. Мы можем записать

a16mod p= mod p,

т.е.значение данной функции вычисляется всего за 4 операции умножения вместо 15 при «наивном» варианте а·а·...·а. На этом основан общий алгоритм.

Для описания алгоритма введем величину t = [log2 x] - целую часть log2 x (далее все логарифмы будут двоичные, поэтому в дальнейшем мы не будем указывать основание 2). Вычисляем числа ряда

а, а2, а4, а8, ..., (mod p). (3.5)

В ряду (3.5) каждое число получается путем умножения предыдущего числа самого на себя по модулю р. Запишем показатель степени х в двоичной системе счисления:

.

Тогда число у = ах mod p может быть вычислено как

(3.6)

(все вычисления проводятся по модулю р).

Утверждение 3.1 (о сложности вычислений (3.3)). Количество операций умножения при вычислении (3.3) по описанному методу не превосходит 2 log х.

Доказательство. Для вычисления чисел ряда (3.5) требуется t умножений, для вычисления у по (3.6) не более, чем t умножений. Из условия t = [log x], учитывая, что [log x] log x, делаем вывод о справедливости доказываемого утверждения.

Важно отметить, что столь же эффективные алгоритмы вычисления обратной функции (3.4) неизвестны.

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

Начнем с хранения паролей в памяти компьютера. Решение задачи основано на том, что пароли вообще не хранятся. Точнее, при регистрации в сети пользователь набирает свое имя и пароль; пусть, например, его имя - «фрукт», а пароль - «абрикос». Компьютер рассматривает слово «абрикос» как двоичную запись числа х и вычисляет (3.3), где а и р — два несекретные числа, возможно даже, всем известные. После этого в памяти компьютера заводится пара (имя, у), где у вычислено по (3.3) при х = пароль. При всех дальнейших входах этого пользователя после ввода пары («фрукт», «абрикос»), компьютер вычисляет по (3.3) новое значение унов с х = «абрикос» и сравнивает с хранящимся в памяти ранее вычисленным значением у. Если yнов совпадает с хранящимся в памяти у, соответствующим данному имени, то это законный пользователь. В противном случае это противник.

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

Рассмотрим решение второй задачи (ПВО и самолет). Можно использовать следующий метод. Каждому «своему» самолету присваивается секретное имя, известное системе ПВО и летчику, точнее, бортовому компьютеру. Пусть, например, одному из самолетов присвоено секретное имя СОКОЛ, и этот самолет приближается к границе 01 февраля 2005 года в 12 час. 45 мин. Тогда перед приближением к границе бортовой компьютер самолета формирует слово

СОКОЛ

05

02

01

12

45

имя

год

месяц

день

часы

минуты

Другими словами, компьютер на самолете и станция ПВО прибавляют к секретному слову сведения о текущем времени и, рассматривая полученное слово как число х, вычисляют у = ах mod р, где а и р не секретны. Затем самолет сообщает число у станции ПВО. Станция сравнивает вычисленное ею число у с полученным от самолета. Если вычисленное и полученное значения совпали, то самолет признается как «свой».

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

Рассмотренный вариант решения «задачи ПВО» требует точной синхронизации часов в самолете и в локаторе. Эта проблема достаточно легко решается. Например, служба навигации постоянно передает метки времени в открытом виде (время не секретно), и все самолеты и локаторы используют эти метки для синхронизации своих часов.