Формат переносимых файлов PDF (Portable Documents Format), разработанный компанией Adobe Systems, Inc., предназначен для хранения документов, представленных в электронной форме. PDF является основным форматом продуктов семейства Acrobat. Во второй версии спецификации (PDF l.l) была добавлена поддержка шифрования, но начальная редакция алгоритма защиты оказалась не очень удачной — похоже, один и тот же ключ использовался многократно при шифровании потоковым алгоритмом RC4. Точного описания особенностей реализации этого алгоритма найти не удалось, но официальная документация от Adobe гласит, что этот алгоритм не поддерживается и не рекомендуется к использованию. Для более гибкого управления процедурой вычисления ключа шифрования продукты семейства Acrobat поддерживают так называемые модули защиты (Security Handlers), которые могут быть подключены через средства расширения (plug-ins). Изначально Security Handler отвечал только за вычисление ключа шифрования документа, а все операции по шифрованию выполнял сам Acrobat. Вплоть до версии Acrobat 5.0 ключ шифрования документов по официальной информации всегда имел длину в 40 бит из-за экспортных ограничений. Однако уже в Acrobat Reader 4.0.5 появилась поддержка ключей большей длины, использовавшихся для защиты электронных книг.
Начиная с Acrobat 5.0 (и соответствующей ему спецификации PDF 1.4) были добавлены сразу две новых версии алгоритма защиты, позволяющие работать с ключами длиной до 128 бит. Одна из новых версий была документирована, а вторая формально держится в секрете по требованию департамента коммерции США (хотя ее поддержка давно реализована в продуктах сторонних компаний). Наконец, в Acrobat 6.0 (спецификация PDF 1.5) модуль защиты получил возможность не только вычислять ключ шифрования, но и выполнять само шифрование. Возможность создания собственных модулей защиты с нужной функциональностью привела к тому, что на рынке появилось несколько таких модулей, разработанных разными компаниями. Рассмотрим основные характеристики некоторых из них.
15.4.1. Password Security (Standard Security Handler) Этот модуль защиты был разработан компанией Adobe и является основным средством защиты, встроенным в Acrobat и бесплатный Acrobat Reader. При защите документов стандартным методом автор имеет возможность установить два пароля: для владельца и пользователя соответственно. Для того чтобы открыть документ и отобразить его на экране, достаточно знать любой из паролей, но некоторые операции, такие как редактирование документа, его печать или копирование фрагментов в буфер обмена, могут быть недоступны, если введен пароль пользователя. И, разумеется, настройки защиты могут быть изменены только в том случае, если документ открыт по паролю владельца. Часто на документ устанавливается только пароль владельца, а пароль поль- зователя остается пустым. При этом документ открывается без запроса пароля, но операции, запрещенные автором, оказываются недоступными. Очевидно, что если известен хотя бы один пароль или пароль пользователя просто отсутствует, то документ может быть расшифрован и сохранен со снятыми ограничениями. Это нельзя считать ошибкой реализации — это просто свойство, о котором стоит помнить.
Грубых ошибок в реализации стандартной защиты допущено не было, но несколько недочетов, относящихся к самой популярной версии алгоритма, использовавшей только 40-битовый ключ, найти можно. Так процедура проверки пароля выполняется очень быстро. Для проверки правильности пароля пользователя необходимо вычислить один раз значение хэш-функции MD5 и расшифровать 32 байта алгоритмом RC4. Проверка пароля атадельца требует повторить те же действия дважды. Все это позволяет подбирать пароли с очень высокой скоростью. Если же проводится поиск 40-битового ключа шифрования, то для проверки правильности ключа требуется лишь одно шифрование алгоритмом RCA Это позволяет на современном компьютере гарантированно найти клю примерно за одну неделю. То, как проверяется правильность ключа шифрования, позволяет значительно сократить среднее время, затрачиваемое на расшифрование одного документа за счет предварительных вычислений и сохранения вспомогательных данных на диске. Также один раз перебрав 240 ключей, можно расшифровать любое количество документов, защищенных стандартным методом. Все эти недочеты были исправлены с появлением новой версии алгоритма в Acrobat 5. Так для проверки каждого пользовательского пароля теперь требуется выполнить 51 вычисление MD5 и 20 шифрований RC4. Это снижает скорость проверки паролей в несколько десятков раз. А перебрать 2128 ключей шифрования современный уровень развития технологий не позволяет.
15.4.2. Другие модули защиты от Adobe В Acrobat Reader 4.0.5 появилась поддержка модуля Adobe PDF Merchan (Adobe. Web Buy), предназначенного для защиты электронных книг. До кументы защищались ключами длиной от 64 до 128 бит. Примерно в то же время получил распространение модуль защить EBXHANDLER, изначально реализованный в программе GlassBook Reader, разработанной компанией GlassBook, Inc. и предназначенной для покупки и просмотра защищенных электронных книг в формате PDF. Позже Adobe приобрела компанию GlassBook, их Reader оказался переименован в Adobe eBook Reader, a EBXHANDLER стал основным модулем защиты для технологии распространения электронных книг, продвигаемой Adobe (более подробная информация о защите электронных книг в формате PDF приведена в гл. 16). Еще один модуль защиты, разработанный Adobe, назывался Acrobat Self-Sign Security (Adobe.PPKLite) и представлял собой первую попытку использования схем с открытым ключом в защите PDF-документов, предпринятую в Acrobat 5. Однако эта попытка не имела большого успеха, т. к. не опиралась на существующую инфраструктуру открытых ключей. На смену Self-Sign Security пришел модуль Certificate Security (Adobe.PubSec), представленный в Acrobat 6, который уже умел работать с сертификатами, выдаваемыми основными мировыми центрами сертификации. Но оба эти решения относятся скорее к организации защищенного корпоративного документооборота, чем к обеспечению секретности, и подробно рассматриваться не будут. Хотя для обеспечения секретности они вполне пригодны.
15.4.3. SoftLock (SLCK_SoftLock) Модуль защиты SoftLock, разработанный одноименной компанией, получает 40-битовый ключ шифрования документа следующим образом. При первом открытии документа вычисляется значение, являющееся функцией от идентификатора документа и некоторых параметров конкретного компьютера (например метки тома диска С), и это значение сообщается пользователю. В ответ пользователь должен ввести 8-символьный ключ, полученный от продавца документа. На основании полученного от пользователя ключа и параметров компьютера вычисляется и проверяется ключ шифрования документа. Следовательно, при переносе на другой компьютер документ невозможно будет открыть с тем же 8-символьным ключом, т. к. параметры компьютера, а значит, и вычисленный ключ шифрования документа, будут иными. Если бы каждый из восьми символов ключа, вводимого пользователем, мог принимать одно из 95 значений ASCII-символов, доступных на стандартной английской клавиатуре, то общее число комбинаций превысило бы 252. Однако каждый символ преобразуется в одно из 16 возможных значений, а 2 символа из 8 являются контрольными и не участвуют в вычислении ключа шифрования. Таким образом, существует всего 232 различных 8-символьных ключей, и один из них является правильным. Полный перебор 232 ключей, очевидно, не отнимает много времени и позволяет быстро расшифровать любой документ с защитой SoftLock. На настоящий момент компания SoftLock уже не существует и модуль защити больше не поддерживается.
15.4.4. Newsstand Crypto (NWST_Crypto) Модуль NewsStand, разработанный в NewsStand, Inc., используется для защиты периодических изданий, распространяемых через Интернет в электронной форме. Например, всего за $ 0.65 можно приобрести свежий выпуск New York Times, находясь при этом в любой точке Земли, откуда есть доступ к Интернету. NewsStand использует 40-битовые ключи шифрования, но каждый из пяти байт ключа принимает только 16 возможных состояний — от '0' до '9' и от 'А' до 'F. Вследствие этого эффективная длина ключа оказывается равна всего 20 битам, а 220 комбинаций перебираются на современном компьютер ре за считанные секунды.
15.4.5. Panasonic Crypto (PSDS_Crypto) Этот модуль использовался для защиты сервисной технической документации к аппаратуре, производимой компанией Panasonic. Формально для получения доступа к зашифрованным документам требовался аппаратный ключ защиты, втыкаемый в LPT-порт. Но процедура получения ключа шифрования была реализована не лучшим способом. Выполнялась только проверка наличия аппаратного ключа без использования хранимой в ключе информации для расшифровки документов. Кроме того, в результате вычисления ключа шифрования в модуле защиты всегд возвращалось одно из двух возможных 40-битовых значений. То есть достаточно было проверить всего 2 ключа для того, чтобы расшифровать любой документ с такой защитой.
15.4.6. KEY-LOK Rot13 (BPTE_rot13) Этот модуль защиты также требует наличия аппаратного ключа для открытия документов, но, на самом деле, всегда используется один и тот же фиксированный 40-битовый ключ шифрования, который жестко прошит в теле модуля защиты. Весьма занимательно, что в состав SDK для Adobe Acrobat 4 входит пример модуля защиты с названием Rotl3. И в этом примере ключ шифрования также является константой. Видимо, разработчики модуля KEY-LOK Rotl2 не осмелились сильно модифицировать готовый пример, а просто вставили проверку наличия аппаратного ключа и изменили константу, используемуи в качестве ключа шифрования.
15.4.7. Normex Существует как минимум четыре модуля защиты, разработанные компаниек Normex, Ltd. Эти модули называются Normex level I (NORM_NxSecl),Normex level 2 (NORM_NxSec2), Normex level 3 (NORM_NxSec3) и Internet" demo (NORM_NxSecInDemo). Скорее всего, эти модули защиты чем-то отличаются друг от друга, но их объединяет одно очень важное свойство — для шифрования документа они используют фиксированные 40-битовые ключи. То есть достаточно один раз определить значения ключей, которые жестко прошиты в файлах, содержащих код модуля зашиты, после чего любой документ можно будет моментально расшифровать.
15.4.8. Liebherr (LEXC_Liebherr_Security) Модуль защиты, разработанный компанией LexCom Informationssysteme GmbH, также не обеспечивает никакой секретности, т. к. использует фик- сированный 40-битовый ключ шифрования для всех документов.
15.4.9. DocuRights Модуль защиты DocuRights, разработанный компанией Aries Systems Corp., построен несколько нестандартным образом. PDF-документ, с которым имеет дело пользователь, представляет собой контейнер, зашифрованный при помощи стандартного модуля защиты (Standard Security Handler, SSH) с пустым паролем, внутри которого находится другой PDF-документ, но защищенный уже с помощью DocuRights. Однако такая схема никак не увеличивает защищенность и, скорее всего, используется исключительно для более красивой подачи пользователю информации о том, что у него нет прав доступа к документу. Стойкость защиты все равно определяется тем, как DocuRights вычисляет ключ шифрования. Но здесь разработчики, видимо, решили себя не утруждать, т. к. для шифрования всегда используется постоянный 40-битовый ключ.
15.4.10. FileOpen Publisher (FOPNJLock) Этот модуль защиты разработан компанией FileOpen Systems и является составной частью ее продукта FileOpen Publisher, лицензия на который стоит $ 2500. Согласно рекламе, FileOpen Publisher предназначен для издателей, желающих иметь полный контроль над распространением произведений в элек- тронной форме. Этот продукт включает в себя инструменты для управления электронной подпиской и аутентификацией конкурирующих пользователей, позволяет создавать документы с ограниченным сроком действия и документы, привязанные к конкретным носителям, например CD-ROM. Также издатель имеет возможность ограничивать, когда и в каком объеме можно распечатывать документ. FileOpen Publisher прошел довольно длинный путь эволюции в области защиты. Вплоть до версии 2.3 для всех защищаемых документов использовался 40-битовый фиксированный ключ. В версии 2.4 появилась поддержка переменных ключей, но вся информация, необходимая для вычисления ключа, хранилась в самом документе. В версии 2.5 (самой новой на настоящий момент) была добавлена возможность ручного ввода ключа шифрования, который будет использоваться для всех документов, защищаемых в рамках текущего проекта.
Этот ключ не хранится в документе, но и он не обеспечивает нормальной защиты по нескольким причинам. Во-первых, у каждого защищенного документа должен быть свой уникальный ключ, и знание ключа к одному документу не должно позволять вычислить ключ к любому другому документу. А это требование не выполняется, т. к. у всех файлов одного проекта будет один и тот же ключ. Во-вторых, ключ шифрования должен генерироваться случайным образом, т. к. человек обычно вводит предсказуемые данные. А в-третьих, в диалоговом окне, где издателю предлагают вручную задать ключ, можно вводить только цифры. И первые пять введенных символов будут использованы в качестве ключа шифрования. То есть издатель может ввести всего 105 различных ключей, а значит, эффективная длина ключа составит менее 17 бит.
15.4.11. FileOpen WebPublisher (FOPNJoweb) Этот модуль защиты является составляющей .частью еще одного продукта компании FileOpen, носящего имя WebPublisher2 и предназначенного для распространения электронных документов и управления доступом к ним через Интернет. Первая версия WebPublisher2 в каждом документе сохраняла и ключ шифрования, необходимый для открытия документа. То есть стойкость защиты была нулевой. После выпуска обновления ключ не сохраняется внутри документа, но его длина составляет всего 40 бит, хотя WebPublisher2 был выпущен в феврале 2002 года, а пятая версия Acrobat SDK, включающая все необходимое для поддержки ключей длиной до 128 бит, появился в апреле 2001 года. Один и тот же ключ шифрования снова используется для всех документов, защищаемых в рамках одного проекта, т. е. один раз затратив вычислительные ресурсы на поиск ключа, можно будет расшифровать сразу несколько Документов. Ключ снова выбирается не случайно, а задается издателем в файле настроек как ASCII-строка. Это ограничивает множество возможных символов, использующихся в ключе. Да и вряд ли издатель будет вводить истинно случайную комбинацию. Так файлы примеров, выложенные на сайте FileOpen, были защищены ключами 'abcde1, 'bcdef, 'cdefg', 'mnopq' и 'rstuv'. Образец защищенного документа на сайте Briefsmart шифровался по ключу 'llzgl', а компания IPexpert, Inc., распространяющая свои файлы под защитой WebPublisher2, использует в ключе только десятичные цифры.
15.4.12. Другие модули защиты Кроме уже перечисленных модулей защиты, существуют и другие. Так, например, модуль Australian Standards Online (SASSINTERNETSTDS) использовался для защиты Австралийских стандартов, распространяемых в электронной форме. Этот модуль не содержал грубых ошибок в реализации защиты. Но в апреле 2001 года в Australian Standards отказались от использования шифрования при распространении документов, введя при этом защиту на основе водяных знаков. Уровень защиты, эквивалентный 40-битовому ключу, обеспечивали и модули защиты PDFLock (XESC_XELock) и Montrose. Но эти модули тоже давно не поддерживаются (по неизвестным причинам), и найти какую-либо полезную информацию о них уже практически невозможно. В составе продуктов семейства Acrobat версии 5 поставлялся модуль защиты InterTrust.DocBox, разработанный компанией InterTaist Computing. Но его, вероятно, тоже постигла печальная участь, т. к. в Acrobat 6 он уже не входит. Хотя сама компания InterTrust продолжает существовать и даже обвиняет Microsoft в том, что последняя нарушает 8 патентов, принадлежащих InterTrust.
Еще существует модуль защиты Authentica Page Recall (Page Vault), разработанный компанией Authentica, Inc., но он нацелен на корпоративный рынок — стоимость лицензии на PageRecall начинается с S 32 500. И достоверных результатов оценки стойкости защиты, обеспечиваемой PageRecall, пока нет. Таким образом, из доступных на настоящий момент модулей защиты, разработанных различными компаниями, за исключением Adobe и Authentica, нет ни одного, который бы применял 128-битовое шифрование или хотя бы использовал все ресурсы 40-битового ключа. И нет никакой надежды, что ситуация в ближайшее время изменится.
Если раньше стоимость лицензии на Reader Integration Key, позволяющей использовать модуль расширения в бесплатных версиях Acrobat Reader, составляла $ 100 и позволяла создавать любое количество модулей расширения, работающих в Reader, то с выходом Acrobat 6.0 все изменилось. Теперь за право доступа к полной версии SDK придется заплатить $ 200, a Reader Integration Key на каждый модуль расширения, предназначенный для свободного использования, обойдется в $ 2500. Но этого мало. Для создания собственного модуля защиты PDF-документов необходима специальная лицензия, которая имеет еще более высокую стоимость. Разумеется, Adobe имеет право проводить любую маркетинговую политику в отношении своих собственных продуктов, но нынешняя ситуация явно не способствует появлению недорогих и надежных решений для защиты документов в формате PDF.