
- •1.1. Базовая терминология. Основные алгоритмы шифрования
- •1.2. Цифровые подписи, криптографические хэш-функции и генераторы случайных чисел
- •1.3. Шифровальный алгоритм. Симметричные криптоалгоритмы
- •1.4. Криптоанализ и атаки на криптосистемы. Функции криптосистем и алгоритмы создания цепочек
- •1.5. Методы рандомизации сообщений
- •1.6. Архивация. Транспортное кодирование
- •1.7. Асимметричные криптоалгоритмы
- •2.1. Хеши
- •2.2. Области применения хэш-функций
- •2.3. Шифрование в каналах связи компьютерной сети
- •2.4. Шифрование файлов
- •2.5. Аппаратное и программное шифрование
- •3. Криптосистемы с открытым ключом
- •3.1. Предыстория и основные идеи
- •3.2. Первая система с открытым ключом - система Диффи-Хеллмана
- •3.3. Элементы теории чисел.
- •3.4. Шифр Шамира
- •3.5. Шифр Эль-Гамаля
- •3.6. Односторонняя функция с «лазейкой» и шифр rsa
- •4. Электронная, или цифровая подпись
- •4.1. Электронная подпись rsa
- •5. Современные шифры секретным ключом
- •5.1. Блоковые шифры
- •5.3. Основные режимы функционирования блоковых шифров
- •5.4. Потоковые шифры
- •5.5. Криптографические хеш-функции
- •6. Сетевая безопасность
- •6.1. Сервера
- •6.2. Рабочие станции
- •6.3. Среда передачи информации
- •6.4. Узлы коммутации сетей
- •6.5. Уровни сетевых атак согласно модели osi
- •7. Программное обеспечение и информационная безопасность
- •7.1. Операционные системы
- •7.2. Прикладные программы
- •7.3. Ошибки, приводящие к возможности атак на информацию
- •7.4. Основные положения по разработке программного обеспечения
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 лет. С другой стороны, он не может просто скопировать у и использовать его в качестве ответа в будущем, так как время пересечения границы никогда не повторяется и последующие значения у будут отличаться от первоначального.
Рассмотренный вариант решения «задачи ПВО» требует точной синхронизации часов в самолете и в локаторе. Эта проблема достаточно легко решается. Например, служба навигации постоянно передает метки времени в открытом виде (время не секретно), и все самолеты и локаторы используют эти метки для синхронизации своих часов.