Компьютерные сети. 6-е изд. - Эндрю Таненбаум
Шрифт:
Интервал:
Закладка:
В системе PGP намеренно используются уже существующие криптографические алгоритмы, а не изобретаются новые. Все они прошли тщательную проверку ведущими криптоаналитиками мира и избежали влияния каких-либо государственных организаций, пытающихся снизить их эффективность. Последнее свойство имеет большое значение для всех, кто не склонен доверять правительству.
Система PGP обеспечивает сжатие текста, конфиденциальность и создание цифровых подписей, а также предоставляет широкие возможности управления ключами. При этом, как ни странно, в ней отсутствует функционал электронной почты. PGP напоминает препроцессор, который преобразует открытый текст в подписанный зашифрованный текст в формате base64. Разумеется, результат можно выслать по электронной почте. Некоторые реализации PGP на последнем шаге обращаются к пользовательскому агенту для отправки сообщения.
Чтобы понять, как работает система PGP, рассмотрим пример на илл. 8.45. Алиса хочет передать Бобу подписанное сообщение P открытым текстом в безопасном режиме. Система PGP поддерживает различные схемы шифрования (включая RSA и шифрование на основе эллиптических кривых), но в данном случае мы предположим, что у Алисы и Боба есть закрытый (DX) и открытый (EX) RSA-ключи. Также мы допустим, что им известны открытые ключи друг друга. Управление ключами в системе PGP мы рассмотрим чуть позже.
Илл. 8.45. Использование системы PGP для передачи сообщения
Прежде всего Алиса запускает на компьютере программу PGP. PGP хеширует сообщение Алисы P с помощью алгоритма SHA-2, а затем шифрует полученный хеш ее закрытым RSA-ключом DA. Получив это сообщение, Боб может расшифровать хеш открытым ключом Алисы и убедиться в его правильности. Даже если в этот момент кто-то другой (например, Труди) узнает хеш и расшифрует его общеизвестным открытым ключом Алисы, мощность алгоритма SHA-2 гарантирует невозможность создания другого сообщения с тем же хешем путем вычислений.
Зашифрованный хеш-код и оригинальное сообщение объединяются в единое сообщение P1, которое затем сжимается с помощью программы ZIP, использующей алгоритм Лемпеля — Зива (Ziv and Lempel, 1977). Назовем результат этого этапа P1.Z.
Далее PGP предлагает Алисе ввести случайную текстовую строку. При формировании 256-разрядного AES-ключа сообщения KM учитывается как содержание, так и скорость ввода. (В литературе по PGP этот ключ называют сеансовым, что является неправильным употреблением термина, так как никакого сеанса здесь нет.) Затем P1.Z шифруется алгоритмом AES с помощью ключа KM, который, в свою очередь, шифруется открытым ключом Боба EB. Два этих компонента объединяются и преобразуются в кодировку base64, о которой мы говорили в главе 7 при обсуждении стандартов MIME. Полученное в результате сообщение содержит только буквы, цифры и символы +, / и =. Таким образом, его можно поместить в тело письма стандарта RFC 822 с расчетом на то, что оно прибудет к адресату без изменений.
Приняв сообщение, Боб выполняет обратное преобразование base64 и расшифровывает AES-ключ своим закрытым RSA-ключом. Затем с помощью AES-ключа он декодирует сообщение и получает P1.Z. Распаковав zip-файл, Боб отделяет зашифрованный хеш-код от открытого текста и расшифровывает его открытым ключом Алисы. Если в результате обработки открытого текста алгоритмом SHA-2 получается тот же самый хеш-код, это означает, что сообщение P действительно пришло от Алисы.
Надо отметить, что RSA используется здесь только в двух моментах: для зашифровки 256-разрядного SHA-2-хеша и 256-разрядного AES-ключа. Алгоритм RSA медленный, но в данном случае он должен зашифровать совсем немного данных. Более того, все эти 512 бит в высшей степени случайны, поэтому Труди придется очень сильно попотеть, чтобы угадать ключ. Основное шифрование выполняется алгоритмом AES — он на порядок быстрее RSA. Итак, PGP обеспечивает конфиденциальность, сжатие и цифровую подпись и делает это куда эффективнее, чем схема на илл. 8.22.
Система PGP поддерживает RSA-ключи разной длины. Подходящую длину можно выбрать самостоятельно. Скажем, если вы обычный пользователь, вам должно хватить ключа длиной 1024 бита. Чтобы защититься от современных спецслужб, лучше выбрать ключ минимум на 2048 бит. Ну а если вы боитесь, что ваши электронные письма прочитают инопланетяне, на 100 000 лет опережающие нас в технологиях, то вы всегда можете использовать ключи длиной 4096 бит. С другой стороны, учитывая, что RSA применяется только для шифрования небольшого количества битов, вероятно, стоит всегда выбирать «межпланетный» вариант.
Формат классического PGP-сообщения показан на илл. 8.46. Помимо него используются и многие другие форматы. Сообщение состоит из трех частей: области IDEA-ключа, области подписи и области сообщения. Первая часть, помимо самого ключа, содержит идентификатор (ID) открытого ключа, так как пользователям разрешено иметь несколько открытых ключей.
Илл. 8.46. PGP-сообщение
Область подписи содержит заголовок, который нас в данный момент не интересует. За ним следует временная метка и идентификатор открытого ключа отправителя, с помощью которого получатель сможет расшифровать хеш-код, используемый в качестве подписи. Следом идет идентификатор задействованных алгоритмов шифрования и хеширования (чтобы можно было пользоваться SHA-4 или RSA2, когда они появятся). Последним в области подписи располагается сам зашифрованный хеш-код.
Область сообщения также содержит заголовок, имя файла по умолчанию (на случай, если получатель сохранит файл на диске), время создания сообщения и, наконец, само сообщение.
Работе с ключами в системе PGP было уделено особое внимание, так как это ахиллесова пята всех систем защиты. Управление ключами осуществляется следующим образом. Локально у каждого пользователя есть две структуры данных: набор закрытых ключей и набор открытых ключей (иногда их называют «связками»). Набор закрытых ключей (private key ring) содержит одну или несколько индивидуальных пар ключей (закрытый/открытый). Несколько пар ключей нужны для того, чтобы пользователи могли их менять (периодически или при опасении, что тот или иной ключ скомпрометирован). Для этого не нужно аннулировать готовые к передаче или уже отправленные сообщения. У каждой пары ключей есть свой идентификатор, так что отправитель может сказать получателю, какой открытый ключ был использован для шифрования. Идентификатор сообщения состоит из 64 младших битов открытого ключа. За отсутствие конфликтов в идентификаторах открытых ключей отвечают сами пользователи. Закрытые ключи на диске зашифрованы специальным паролем произвольной длины, защищающим их от скрытых атак.
Набор открытых ключей (public key ring) содержит открытые ключи собеседников пользователя. Они нужны для шифрования ключей сообщений (последние привязаны к каждому сообщению). Все записи набора открытых ключей включают не только ключ, но и его 64-разрядный