Чем пароль на открытие отличается от пароля на права
В стандарте PDF паролей ровно два, и делают они принципиально разное. Пользовательский спрашивают при открытии: без него потоки содержимого не расшифровать. Владельческий не спрашивают вовсе — он стоит за флагами прав: печать, извлечение текста, изменение документа. Файл с одним лишь владельческим паролем открывается у всех и сразу, а запреты исполняет программа просмотра. Отсюда и разная прочность у этих двух защит.
Коротко о цифрах
- Пользовательский пароль
- шифрует содержимое, без него файл не открыть
- Владельческий пароль
- хранит флаги прав, файл открывается без него
- Флаги в нашей форме
- печать, копирование текста, изменение
- Если владельческий не задан
- генерируется случайный из 24 байт
- Одинаковые пароли
- делают ограничения снимаемыми любым читателем
Пользовательский пароль: шифрование
Из пользовательского пароля выводится ключ, которым зашифрованы потоки содержимого. Пока пароль не введён, в файле нет ни читаемого текста, ни распакованных изображений — есть структура и зашифрованные байты. Это защита, которая не зависит от доброй воли программы: расшифровать нечем, и точка.
Практическое следствие: потерянный пользовательский пароль означает потерянный документ. Второе следствие — пароль надо передавать отдельно от файла. Письмо с вложением и паролем в том же письме защищено ровно настолько, насколько защищена почта.
Владельческий пароль: флаги прав
- Печать: снятая галочка становится --print=none, поставленная — --print=full.
- Копирование: --extract=n запрещает извлечение текста, --extract=y разрешает.
- Изменение: --modify=none запрещает правку, --modify=all разрешает.
- Флаги хранятся в самом документе и защищены владельческим паролем, но проверяет их программа просмотра.
- Отсюда предел прочности: программа, которая флаги не проверяет, просто не заметит запрета.
Почему владельческий пароль не должен совпадать с пользовательским
Если оба пароля одинаковы, любой, кто смог открыть документ, автоматически знает и владельческий пароль. А значит, снимает все ограничения, которые вы выставили, — печать, копирование, изменение. Ограничения при этом нацелены ровно на тех, кто документ открыл, то есть перестают работать против своей собственной аудитории.
Поэтому в нашей форме владельческий пароль не обязателен, и когда его не задают, генерируется случайный из двадцати четырёх байт. Его никому не сообщают: он существует ради того, чтобы за флагами прав стоял секрет, которого получатель не знает.
Частые вопросы
Какой пароль ставить, если документ нельзя показывать посторонним?
Пользовательский, то есть пароль на открытие. Только он шифрует содержимое; флаги прав в этой задаче бесполезны, потому что файл с ними открывается у любого без всякого пароля.
Можно ли поставить только запрет печати, без пароля на открытие?
В нашей форме нельзя: пароль на открытие обязателен, и без него запрос отклоняется. Стандарт такую комбинацию допускает, но защищённым документ от неё не становится.
Что увидит получатель, которому я дал только пользовательский пароль?
Он откроет документ и будет работать с ним в рамках выставленных флагов: печать, копирование и изменение окажутся разрешены или запрещены так, как вы отметили галочками при защите.
Снимаются ли флаги прав вместе с шифрованием?
Да. Расшифровка убирает шифрование целиком, а таблица прав живёт внутри него, поэтому в расшифрованной копии все три разрешения возвращаются в исходное открытое состояние.