Получив сообщение, Боб выполняет обратное преобразование base64 и расшифровывает IDEA-ключ своим закрытым RSA-ключом. С помощью IDEA-ключа он расшифровывает сообщение и получает P1.Z. Распаковав zip-файл, Боб отделяет зашифрованный хэш-код от открытого текста и расшифровывает его открытым ключом Алисы. Если в результате обработки открытого текста алгоритмом MD5 получается тот же самый хэш-код, это означает, что сообщение P действительно пришло от Алисы.
Следует отметить, что алгоритм RSA используется здесь только в двух местах: для зашифровки 128-разрядного MD5-хэша и 128-разрядного IDEA-ключа. Алгоритм RSA медленный, но ему нужно зашифровать всего лишь 256 бит, что совсем немного. Более того, все эти 256 бит в высшей степени случайны, поэтому злоумышленнику придется очень сильно попотеть, чтобы угадать ключ. Основное шифрование выполняется алгоритмом IDEA, который на порядок быстрее, чем RSA. Итак, система PGP обеспечивает секретность, сжатие и цифровую подпись и делает это намного эффективнее, чем схема, показанная на рис. 8.16.
Система PGP поддерживает четыре длины ключа RSA. Пользователь может самостоятельно выбирать нужную длину. Предлагаются следующие варианты длины.
1. Несерьезная (384 бит): шифр может быть взломан сегодня же организациями с большим бюджетом.
2. Коммерческая (512 бит): возможно, шифр смогут взломать организации из трех букв.
3. Военная (1024 бит): никто на Земле не сможет взломать этот шифр.
4. Межпланетная (2048 бит): никто во всей Вселенной не сможет взломать шифр.
Поскольку алгоритм RSA используется только для двух небольших вычислений, всем следует всегда применять ключи межпланетного варианта, длиной 2048 бит.
Формат классического PGP-сообщения показан на рис. 8.41. Также используются многочисленные другие форматы. Сообщение состоит из трех частей: области ключа, области подписи и области сообщения. Область ключа, помимо самого IDEA-ключа, содержит также идентификатор открытого ключа, так как пользователям разрешено иметь несколько открытых ключей.
Рис. 8.41. PGP-сообщение
Область подписи содержит заголовок, который нас сейчас не интересует. За заголовком следует временной штамп, идентификатор открытого ключа отправителя, с помощью которого получатель сможет расшифровать хэш-код, используемый в качестве подписи. Следом идет идентификатор использованных алгоритмов шифрования и хэширования (чтобы можно было пользоваться, например, MD6 или RSA2, когда они будут разработаны). Последним в области подписи располагается сам зашифрованный хэш-код.
Часть сообщения также содержит заголовок, имя файла по умолчанию, на случай, если получатель будет сохранять принятое сообщение на диске, временной штамп создания сообщения и, наконец, само сообщение.
Работе с ключами в системе PGP было уделено особое внимание, так как это ахиллесова пята всех систем защиты. У каждого пользователя локально находится две структуры данных: набор закрытых ключей и набор открытых ключей (эти наборы иногда называют связками). Связка закрытых ключей (private key ring) содержит одну или несколько личных пар ключей, состоящих из закрытого и открытого ключа. Несколько пар ключей поддерживаются, чтобы позволить пользователям периодически их менять, когда возникают опасения, что тот или иной ключ скомпрометирован. При этом для смены ключа не требуется принимать каких-либо экстренных мер по передаче нового ключа. У каждой пары ключей есть связанный с ней идентификатор, так что отправителю нужно всего лишь сообщить получателю, которым открытым ключом был зашифрован ключ сообщения. Идентификатор сообщения состоит из младших 64 разрядов открытого ключа. За отсутствие конфликтов между идентификаторами ключей отвечают сами пользователи. Закрытые ключи на диске зашифрованы специальным паролем (произвольной длины), защищающем их от кражи.
Связка открытых ключей (public key ring) содержит открытые ключи корреспондентов пользователей. Они нужны для шифрования ключей сообщений, связанных с каждым сообщением. Каждая запись набора открытых ключей содержит не только ключ, но также его 64-разрядный идентификатор и отметку, указывающую степень доверия пользователя этому ключу.
Степень доверия ключу зависит, например, от способа его получения. Предположим, что открытые ключи расположены на электронных досках объявлений (BBS). Труди может атаковать доску объявлений и подменить размещенный там открытый ключ Боба своим ключом. Когда Алиса попытается воспользоваться подмененным ключом, Труди сможет применить к Бобу атаку типа «человек посередине».
Чтобы предотвратить подобные атаки или хотя бы минимизировать их ущерб, Алисе необходимо знать, насколько она может доверять открытому ключу Боба, хранящемуся в ее наборе открытых ключей. Если Боб лично дал ей диск с ключом, она может поставить такому ключу максимальную степень доверия. Вот в этом и заключается децентрализованный, контролируемый пользователем подход к управлению открытыми ключами, отличающий PGP от централизованной схемы PKI.
Однако на практике открытые ключи часто получают, опрашивая доверенный сервер ключей. По этой причине после стандартизации X.509 система PGP стала поддерживать сертификаты наряду с традиционным для PGP механизмом связки открытых ключей. Все современные версии PGP имеют поддержку X.509.
8.8.2. S/MIME
Следующим изобретением IETF в области обеспечения конфиденциальности электронной почты стала система под названием S/MIME (Secure/MIME — защищенный MIME). Она описывается в RFC с 2632 по 2643. Она обеспечивает аутентификацию, целостность данных, секретность и проверку подлинности информации. Обладает неплохой гибкостью, поддерживает разнообразные криптографические алгоритмы.
По названию можно догадаться, что S/MIME тесно связана с MIME в том смысле, что позволяет защищать любые типы сообщений. Определено множество новых заголовков MIME, например, для цифровых подписей.
В S/MIME нет жесткой иерархии сертификатов, отсутствует единый центр управления, что составляло проблему для более ранней системы PEM (Privacy Enhanced Mail — почта повышенной секретности). Вместо этого пользователи могут работать с набором доверительных якорей. До тех пор пока сертификат может быть проверен по доверительному якорю, он считается корректным. Система S/MIME использует стандартные алгоритмы и протоколы, которые мы уже рассматривали, поэтому на этом мы закончим ее обсуждение. Более подробную информацию вы найдете в RFC.
8.9. Защита информации во Всемирой паутине
Мы только что закончили изучение двух важных областей, в которых требуется защита информации, — соединения и электронная почта. Можно сказать, что это были аперитив и суп. Теперь же мы приступаем к главному блюду: защите информации во Всемирной паутине. Именно в WWW работает большинство злоумышленников, делая свое грязное дело. В следующих разделах будут рассмотрены некоторые проблемы, относящиеся к безопасности во Всемирной паутине.
Эту тему можно разделить на три части. Первая связана с безопасным именованием объектов и ресурсов. Вторая — с установлением аутентифицированных соединений. Третья — с тем, что случается, когда веб-сайт отправляет клиенту исполняемый код. После перечисления возможных опасностей мы рассмотрим все эти вопросы.
8.9.1. Возможные опасности
Практически каждую неделю газеты публикуют статьи о проблемах безопасности во Всемирной паутине. Ситуация складывается действительно довольно мрачная. Посмотрим на некоторые примеры того, что уже имело место. Во-первых, мы помним, как домашние страницы многочисленных организаций самых разных масштабов подвергались атакам хакеров и заменялись подложными страницами. (Термин «хакер» (hacker) приобрел значение «взломщик» благодаря журналистам, которые мало что понимали в компьютерном мире, но попытались воспользоваться профессиональным жаргоном программистов. На самом же деле, изначально «хакерами» называли великих программистов. Взломщиков же мы и называем взломщиками («cracker»).) В списке сайтов, которые удалось взломать, находятся такие как Yahoo!, сайт вооруженных сил США, ЦРУ, НАСА, а также New York Times. В большинстве случаев взломщики просто заменяли оригиналы на свои странички с каким-нибудь смешным (обычно издевательским) текстом, и уже через несколько часов сайты удавалось восстановить.