40
Глава 3. Введение в криптографию
Пользователь А
Злоумышленник Е
Пользователь Б
m
m
m
m
Рис. 3.1.
Как обеспечить безопасность общения пользователей А и Б?
Пользователь А
Злоумышленник Е
Пользователь Б
m, c
:=
E
(
K
e
, m
)
c
c
c, m
:=
D
(
K
e
, c
)
Рис. 3.2.
Общая схема шифрования
пользователь А может отослать копию ключа пользователю Б по почте или
поступить другим подобным образом).
Когда пользователь А хочет отослать сообщение
m
, он вначале зашифро-
вывает его с помощью
функции шифрования. Обозначим
функцию шифрова-
ния как
E
(
K
e
, m
)
, а результат применения этой
функции назовем
шифрован-
ным текстом (ciphertext)
c
. (Исходное сообщение
m
называется
открытым
текстом (plaintext)
.) Вместо того чтобы посылать пользователю Б сообще-
ние
m
, пользователь А посылает ему шифрованный текст
c
:=
E
(
K
e
, m
)
.
Когда пользователь Б получает сообщение
c
, он может расшифровать его
с помощью
функции дешифрования
D
(
K
e
, c
)
и получить исходный откры-
тый текст
m
, который ему хотел отослать пользователь А.
Злоумышленник Е не знает ключ
K
e
, поэтому если он перехватит шифро-
ванный текст
c
, то не сможет его расшифровать. Хорошая
функция шифрова-
ния делает невозможным определение открытого текста
m
по шифрованному
тексту
c
без ключа
K
e
.
Описанная схема шифрования может применяться не только для обмена
сообщениями электронной почты (наиболее очевидная область применения),
но и для хранения данных. Хранение информации можно рассматривать как
процесс передачи сообщения не в пространстве, а во времени. В этом случае
пользователи А и Б зачастую являются одним и тем же лицом, однако сама
схема шифрования остается неизменной.
3.1. Шифрование
41
3.1.1
Принцип Кирхгофа
Для расшифровки шифрованного текста пользователю Б нужны две ве-
щи: алгоритм дешифрования
D
и ключ
K
e
. Знаменитый принцип Кирхгофа
формулируется следующим образом: надежность схемы шифрования долж-
на зависеть только от секретности ключа
K
e
и не зависеть от секретности
алгоритмов шифрования и дешифрования.
Для появления данного правила были весьма серьезные основания. Изме-
нять алгоритмы сложно. Они встраиваются в аппаратное или программное
обеспечение, которое может с трудом поддаваться обновлению. На практи-
ке один и тот же алгоритм используется довольно долгое время. Это всего
лишь суровая правда жизни. Кроме того, даже простой ключ трудно со-
хранить в секрете. Обеспечить же секретность целого алгоритма намного
сложнее (и потому намного дороже). Никто не станет разрабатывать крип-
тографическую систему только для двух пользователей. Каждый участник
системы (а таких могут быть миллионы) использует один и тот же алгоритм.
Злоумышленнику Е достаточно всего лишь получить алгоритм от одного из
них, а найти незащищенного пользователя среди миллионов не так уж труд-
но. В конце концов, можно просто украсть ноутбук с установленным на нем
алгоритмом. А помните нашу параноидальную модель? Злоумышленник Е
может оказаться одним из остальных пользователей системы или даже од-
ним из ее разработчиков.
Существует еще несколько аргументов в пользу публикации алгоритмов
шифрования. Опыт подсказывает, что достаточно сделать маленькую ошиб-
ку — и созданный криптографический алгоритм окажется совершенно ни-
кудышным. Если алгоритм не является открытым, никто не обнаружит эту
ошибку, пока на систему не нападет злоумышленник. Последний сможет ис-
пользовать найденный недостаток для взлома системы. Как консультантам,
нам не раз доводилось
анализировать секретные алгоритмы шифрования,
и
все
они были слабыми. Вот почему в наших кругах распространено здоро-
вое недоверие ко всем закрытым, конфиденциальным или другим в той или
иной мере секретным алгоритмам. Не поддавайтесь старому заблуждению:
“Если мы сохраним в секрете и алгоритм, то только увеличим безопасность”.
Это неправда. Потенциальное повышение безопасности, вызванное сохране-
нием алгоритма в секрете, невелико, а вот потенциальное снижение — огром-
но. Большинство секретных алгоритмов настолько плохи, что любые громкие
утверждения наподобие приведенного выше граничат с демонстрацией соб-
ственной некомпетентности.