Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Эл-ты_криптологии-лек.doc
Скачиваний:
24
Добавлен:
24.11.2019
Размер:
757.76 Кб
Скачать

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

3.1. Основные положения

Укажем вначале три практические задачи, которые приводят к целесообразности применения криптосистем с так называемым открытым ключом:

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

  • опознавание самолетов по признаку "свой–чужой". Здесь проблема возникает в связи с тем, что пароль должен предаваться по открытому каналу, следовательно, может перехватить пароль;

  • удаленный доступ в компьютерных сетях (например, доступ клиента к сеансу работы в банке по паролю). Здесь проблема аналогична предыдущей.

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

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

y = f(x), (3.1)

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

x = f 1(y). (3.2)

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

Простейший пример односторонней функции:

y = ax mod p, (3.3)

где р – простое число, а х – целое число из множества {1,..., p1}.

Соответствующая обратная функция имеет вид:

x = logay mod p. (3.4)

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

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

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

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

a16 mod p = mod p,

То есть значения этой функции вычисляется всего за 4 операции умножения, а не за 15, как при использовании "наивного" варианта: аа...а.

Опишем общий алгоритм. Введем величину t = [log2x]. Рассчитываем числа ряда

a, a2, a4, a8, ... , a2t (mod p) (3.5)

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

x = (xt xt1 ... x1 x0 )2 .

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

y = mod p (3.6)

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

В общем случае справедливо следующее утверждение:

количество операций умножения при вычислении по (3.3) не превосходит 2log2x. Соответственно, если использовать значения показателя х из диапазона 1,..., p1, то количество операций умножения не превосходит 2log2р.

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

Таблица 3.1

Количество десятичных знаков в записи числа р

Количество операций умножения при вычислении (3.3)  2log2р

Количество операций умножения при вычислении (3.4) 

12

80

2106

60

400

21030

90

600

21045

Таким образом, если используется суперкомпьютер, который умножает два 90-значных числа за 1014 сек. (что недостижимо для современных компьютеров), то, например, для последнего варианта из табл. 3.1 получим:

Твыч. (3.3) = 6001014 = 61012 сек.;

Твыч. (3.4) = 10451014 = 1031 сек.  1022 лет.

Самые быстрые из известных в настоящее время методов вычисления дискретных логарифмов имеют порядок временной сложности:

Т < c1 .

(Это один из вариантов алгоритма исчисления порядка, называемый Number Field Sieve). Соответственно они порождают более жесткие требования к параметрам односторонней функции вида (3.3) – как уже отмечалось обычно полагается, что модуль р должен иметь размер не менее 1024 бит (по данным на 2003 год).

Рассмотрим, теперь на конкретных примерах идею применения односторонних функций.

Пример 1. Обеспечение доступа к данным компьютера по паролю.

Решение это задачи основано на том, что непосредственно пароли вообще не хранятся. При регистрации на компьютере пользователь набирает свое имя, например, "фрукт" и пароль, например, "абрикос". Компьютер преобразует слово "абрикос" в двоичное представление и считает его значением переменной x. Далее вычисляется значение переменной y по формуле (3.3). После этого в памяти компьютера постоянно хранится пара ("имя", y). В дальнейшем, всякий раз, когда этот пользователь входит в компьютер, он набирает пару ("фрукт", "абрикос"), компьютер по паролю из этой пары вычисляет значение переменной y и сравнивает полученное значение с хранящимся в памяти. Если совпадение есть, то пользователь допускается к работе.

Если противник попытается вычислить значение пароля x по хранящемуся в компьютере значению y, то он не сможет это сделать из-за непомерных затрат времени.

Пример 2. Опознавание самолетов средствами противовоздушной обороны (ПВО) по признаку "свой–чужой" (по-видимому, эта задача была первой, когда на практике использовались односторонние функции).

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

СОКОЛ 04 11 16 12 45

Рассматривая полученное слово как значение переменной x, бортовой компьютер вычисляет y по формуле (3.3), в которой числа a и p не секретны (!). Затем самолет сообщает значение y станции ПВО. Станция сравнивает полученное значение с аналогичным значением, вычисляемым ею по тому же алгоритму и по тем же исходным данным и при совпадении опознает самолет как "свой". (Станция ПВО вынуждена рассчитывать значение y для всех секретных имен типа СОКОЛ).

Рассмотренный вариант опознавания требует точной синхронизации часов самолета и станции ПВО. Один из вариантов решения – открытая передача меток времени службой навигации. Он уязвим к некоторым возможным действиям противника. Более защищенным является вариант, когда вместо меток времени по дополнительному открытому каналу передачи данных от станции ПВО к самолету передается случайно сгенерированное число, которое и используется вместо даты при формировании значения переменной x.