Если под «исходной версией файла» вы подразумеваете, что намереваетесь «заморозить» документ, чтобы никто больше не мог вносить в него изменения, то это невозможно и не является целью цифровой подписи. Любой может просто «вырезать» подпись, встроенную в документ, и никто этого не заметит.
Для защиты документа от последующих модификаций используется какой-то механизм DRM. Например, «водяные знаки» с использованием стеганографии используются для защиты фотографий, чтобы никто не мог претендовать на право собственности на фотографию даже после ее изменения. Но технология еще не очень развита, большинство алгоритмов легко взломать.
Это означает, что понятие «исходная версия файла» в, скажем, юридическом споре — это то, что вовлеченные стороны должны согласовать в согласии. Невозможно доказать происхождение без согласия или доверенной третьей стороны, которая подтвердит целостность документа, например. если у них есть независимая копия документа.
Кроме того, загрузка файла не должна менять его содержимое. Файл будет иметь те же свойства, что и локальный, включая подпись, добавленную на стороне клиента.
Подпись лишь подтверждает подлинность и целостность документа. Если для вашего приложения жизненно важно иметь возможность сказать, что полученный подписанный документ на самом деле является тем, который ожидался, то я бы посоветовал вам сделать следующее:
- Создайте PDF на сервере
- Создайте хэш документа (тот же алгоритм, который будет использоваться апплетом подписи)
- Отправить PDF клиенту
- Пусть клиент подпишет его и отправит обратно
- Сравните хэш клиента с ранее вычисленным на сервере.
- Подтвердить подпись
Проверка подписи обеспечит целостность и подлинность, а сравнение хэшей гарантирует, что подписанный документ, полученный вами на сервере, действительно является подписанной версией исходного документа, созданного ранее.
Что касается временных меток с использованием местных часов: они бесполезны, их очень легко обмануть. На самом деле вам следует использовать совместимые с RFC 3161 криптографически защищенные временные метки, третья сторона. В настоящее время это единственный надежный способ включить понятие времени в подписи PDF. Например, для этого есть встроенная поддержка в Adobe Reader. Поскольку эти услуги, как правило, не предоставляются бесплатно, имеет смысл добавить такую метку времени на сервер после получения подписанного документа. Они добавляются как неподписанный атрибут к подписи CMS (Adobe по-прежнему говорит о PKCS7), поэтому он не нарушает подпись и может быть безопасно добавлен после создания подписи.
person
emboss
schedule
06.11.2011