Документ подписан и имеет локальную метку, а затем загружен на сервер, имеет ли он те же характеристики? - PullRequest
0 голосов
/ 04 ноября 2011

Представьте себе веб-приложение, которое позволяет выполнять цифровую подпись (с помощью личных цифровых сертификатов pkcs12, выпущенных доверенными центрами сертификации) и метку времени PDF-документов с помощью Java-апплета или Active X. Это должно происходить на компьютере пользователя, потому что закрытый ключ сертификат хранится локально.

Таким образом, как только PDF подписан и помечен как метка времени, он загружается на сервер. Имеет ли загруженный файл те же функции, что и созданный локально? Есть ли смысл говорить о «оригинальной версии файла»?

Я немного запутался в этом.

Исправление: я имею в виду цифровую подпись документа с закрытым ключом личного цифрового сертификата (должен быть pkcs7, pkcs12), чтобы гарантировать, что он действительно был подписан кем-то, а не кем-то другим.

Ответы [ 2 ]

1 голос
/ 06 ноября 2011

Если под «исходной версией файла» вы имеете в виду, что вы намереваетесь «заморозить» документ, чтобы никто никогда не мог снова внести в него изменения - это невозможно и не является целью цифровой подписи. Любой может просто «вырезать» подпись, встроенную в документ, никто не заметит.

Защита документа от последующей модификации включает в себя некоторый механизм DRM. Например, «водяные знаки», включающие стеганографию, используются для защиты фотографий, чтобы никто не мог претендовать на право собственности на фотографию, даже после ее изменения. Но технология еще не очень продвинута, большинство алгоритмов можно легко сломать.

Это подразумевает, что понятие «оригинальная версия файла» в, скажем, юридическом споре - это то, с чем вовлеченные стороны должны согласовать согласие. Нет никакого способа доказать происхождение без согласия или доверенной третьей стороны, которая засвидетельствует целостность документа, например, если у них есть независимая копия документа.

Кроме того, загрузка файла не должна изменять его содержимое. Файл будет иметь те же свойства, что и локальный, включая подпись, добавленную на стороне клиента.

Подпись будет свидетельствовать только о подлинности и целостности документа. Если для вашего приложения жизненно важно иметь возможность сказать, что полученный подписанный документ действительно является ожидаемым, то я бы посоветовал вам сделать следующее:

  • Создание PDF на сервере
  • Создать хеш документа (тот же алгоритм, который будет использоваться апплетом подписи)
  • Отправить PDF клиенту
  • Позвольте клиенту подписать его и отправить обратно
  • Сравните хеш клиента с ранее вычисленным на сервере
  • Проверить подпись

Проверка подписи обеспечит целостность и подлинность, сравнение хешей гарантирует, что подписанный документ, полученный на сервере, действительно является подписанной версией исходного документа, созданного ранее.

Что касается отметок времени с использованием локальных часов: они бесполезны, их очень легко обмануть. То, что вы на самом деле должны использовать, это RFC 3161 -совместимые криптографически защищенные метки времени, выпущенные доверенной третьей стороной. В настоящее время это единственный надежный способ включить понятие времени в подписи PDF. Например, есть встроенная поддержка для этого в Adobe Reader. Поскольку эти службы, как правило, не доступны бесплатно, имеет смысл добавить такую ​​временную метку на сервер после получения подписанного документа. Они добавляются в качестве неподписанного атрибута в подпись CMS (Adobe все еще говорит о PKCS7), поэтому она не нарушит подпись и может быть безопасно добавлена ​​после создания подписи.

1 голос
/ 04 ноября 2011

Хорошо, давайте попробуем ответить на ваш вопрос (насколько я понимаю).

У вас есть программное обеспечение, которое использует закрытый ключ (и часы) для добавления подписи в файл.

Эта подпись зависит от содержимого файла и, таким образом, гарантирует, что подписавший знал (или мог знать) содержимое файла во время его подписания.(Есть несколько способов иметь «слепые подписи», но я предполагаю, что это не тот случай.)

Загрузка подписанного файла в любом месте здесь ничего не меняет.

О метке времени:Владелец ключа может ввести любую временную метку, какую пожелает, так что это помогает, только если вы хотите доказать знание документа в какой-то момент времени против владельца ключа, а не если вы являетесь владельцем ключа и хотите доказать, что вы подписали его в какой-то момент.момент времени, а не раньше или позже.(Кроме того, вы уверены, что его часы не искажены?)

О том, имеет ли это юридическое значение, вам придется спросить своего адвоката.

  • может зависеть от юрисдикции, в которой произошла подпись, и той, в которой вы хотите, чтобы подписанный документ был действительным
  • , был ли у владельца ключа возможностьна самом деле прочитайте документ перед подписанием
  • независимо от того, имел ли владелец ключа возможность подписи или нет.

Если вы используете какой-либо апплет или элемент управления ActiveX в браузере пользователя, яне был бы полностью уверен, что последние два пункта действительно верны.

...