словарь шифрования, описывающий алгоритм и атрибуты шифра
Поле с именем "/Filter (имя фильтра)" специфицирует имя дескриптора безопасности, определяющего алгоритм шифрования. По умолчанию это "/Standard", однако, при наличии плагинов поддерживаются и другие фильтры, из которых в первую очередь хотелось бы отметить Rot13 от New Paradigm Resource Group (www.nprg.com), со стоимостью в $3000 за копию, что мыщъху явно не по карману, то есть не по хвосту, под которым у него как известна находится дырка, тем более что все ключи легко обнаруживаются тривиальным контекстным поиском в теле плагина; FileOpen-фильтр, разработанный FileOpen Systems (www.fileopen.com), требующей за лицензию $2500 и позиционируемый как "complete, secure e-publishing solution" (законченное, безопасное решение для электронных публикаций), но в действительности все не так. FileOpen Publisher версии 2.3 шифровал *все* документы одним-единственным ключом, не представляющим для хакеров никакого секрета и хранящимся прямо в плагине, начиная с версии 2.4 FileOpen Publisher используют сменные ключи, однако, сам зашифрованный документ содержит все необходимую информацию для мгновенного восстановления секретного ключа, короче очередная лажа; фильтр SoftLock от компании SoftLock Services, Inc. (www.softlock.com) идет немного дальше, используя для генерации ключа (SoftlockID Number) идентификатор тома жесткого диска. Пароль, введенный пользователем, должен соответствовать секретному идентификатору SoftlockID открываемого pdf-документа, то есть говоря другими словами, на чужой машине свой файл не прочтешь. Издатели ликуют, а хакеры между тем ломают книги только так! При эффективной длине пароля в 24 бита, даже на догигагерцовых компьютерах он вскрывается методом тупого перебора менее чем за сутки, а при использовании оптимизированных алгоритмов находится практически мгновенно. Так что, особого смысла во всех нестандартных фильтрах нет. Во всяком случае, пока… Впрочем, в подавляющем большинстве случаев используется фильтр типа "Standard", а все остальные встречаются крайне редко.
Поле "/V" описывает алгоритм, используемый фильтром для шифрования. Один и тот же фильтр может использовать множество различных алгоритмов и это поле позволяет выбрать тот или другой. Стандартный фильтр использует следующие значения:
q 0 — алгоритм недокументирован и более не поддерживается;
q 1 —открытый алгоритм шифрования с длиной ключа 40 бит, базовый для всех PDF;
q 2 — тот же самый алгоритм, но с длиной ключа свыше 40 бит, используется в PDF1.4+;
q 3 — усиленный недокументированный алгоритм с длинной ключа от 40 до 128 бит, используется в PDF 1.4+ (не документированность вызвана требованием американского департамента коммерции);
Поле "/R" указывает ревизию (подверсию) алгоритма шифрования. В частности, версия 1 (/V 1) поддерживала только ревизию номер 2 и 3.
Поле "/Length" задет размер ключа шифрования в битах (обязательно представляющий собой степень 8), в данном случае он равен 40, т.е. используется 40 битное шифрование по базовому алгоритму. Естественно, что все эти поля носят сугубо информативный характер и менять их не следует. От того, что мы сократим длину ключа с 40 бит до, ну скажем, 1, легче расшифровывать документ не будет.
Поле "/O" представляет собой 32-байтовую строку, генерируемую на основе O- и U-паролей. Это не сам пароль, а только его хэш, используемый для проверки правильности пароля владельца.
Поле "/U" представляет собой другую 32-байтовую строку, генерируемую на основе U-пароля и используемую для проверки правильности пароля пользователя
Поле "/P" это 32-битный флаг, отвечающий за политику доступа к документу, то есть за раздачу разрешений и запретов. То что нам надо!!! Каждый бит, последовательно пронумерованный от 1 до 32 (наименее значимый бит лежит по меньшему адресу, т.е. все как в x86), будучи сброшенным в ноль, запрещает то или иное деяние (подробности в таблице 2).
А что если попробовать установить все биты в единицу, получив максимум полномочий и сняв все запреты? Увы! Ничего не получится! В Adobe сидят далеко не идиоты и поле /P попадает под пяту хэш-суммы, алгоритм генерации которой через несколько абзацев будет рассмотрен с высоты птичьего полета, а пока посмотрим какие ограничения наложены на наш документ.
P-флаг содержит значение -60 (минус 60), которое в HEX-представлении равно FFC4h. Если перевести это число в двоичную форму мы получим 1111111111000100 или около того. И что же эта сакральная грамота значит? Попробуем расшифровать. Два правых бита равны нулю, как им и положено быть. Третий бит разрешает печать и печать действительно разрешена, а вот все остальные операции (включая копирование текста в буфер обмена) строго-настрого запрещены…
бит |
значение |
1-2 |
зарезервированы и должны быть равны 0 |
3 |
печать (начиная с ревизии 3 см бит 12) |
4 |
модификация документа (см. так же биты 6, 9 и 11) |
5 |
выделение/копирование |
6 |
вставка или модификация аннотаций |
7-8 |
зарезервированы, должны быть установлены в 1 |
9 |
заполнение интерактивных полей (этот бит перекрывает бит 6) |
10 |
извлечение текста и графики доступной людям-инвалидам |
11 |
сборка страниц документа и создание закладок |
12 |
печать документа в ухудшенном качестве |
13-32 |
зарезервированы, должны быть равны нулю |