Подписание документов HTML с использованием PGP или SSL через веб-формы - PullRequest
2 голосов
/ 19 января 2012

Допустим, у меня есть контракт между двумя сторонами, опубликованный в Интернете.Я хочу, чтобы обе стороны могли подписать контракт, чтобы показать, что они согласны с условиями, так же, как это было бы с почерком в реальной жизни.Я видел много соглашений TOS онлайн, где это делается только с помощью флажка, но я хочу пойти дальше и дать возможность каждой стороне утверждать, что подпись принадлежит им, а не подделке (кто-то другой проверяет флажок для них).

  • Предполагается, что страница уже обслуживается по протоколу HTTPS, а комбинации имени пользователя и пароля не подходят, какая криптографическая технология лучше всего подходит для проверки личности: PGP, SSL или что-то еще?
  • Как я могу сделать это, используя только HTML и сервер LAMP на другом конце, таким образом, чтобы процесс был максимально автоматизирован при сохранении безопасности?Образцы кода явно приветствуются, но не обязательны;Я просто пытаюсь это осмыслить: содержание контракта должно быть включено в подпись?У меня есть пользователи загружают открытые ключи или что-то?Я не специалист по криптозащите, так что вот где я заблудился.

1 Ответ

1 голос
/ 19 января 2012

SSL - это механизм защиты транспорта, он не применим.

Вы можете использовать OpenPGP или PKI (сертификаты X.509 и формат CMS). Эти технологии позволяют подписывать данные дважды или более, не делая недействительными предыдущие подписи - это делается с помощью отдельных подписей.

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

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

Однако для реального подписания на клиенте вам понадобится какой-то модуль, который будет взаимодействовать с сервером и выполнять работу. Вы не можете использовать только веб-браузер - требуется некоторый плагин для браузера. Причина в том, что «криптография» Javascript, даже если она технически разрешает доступ к ключам на стороне клиента, хранящимся в файлах или на криптографических устройствах, имеет определенные концептуальные недостатки, которые делают ее практически бесполезной. Таким образом, в конечном итоге вы используете что-то более надежное и безопасное, то есть подписанный апплет, элемент управления ActiveX или сценарий Flash.

Наша компания предоставляет различные компоненты безопасности, среди которых есть компоненты и модули для распределенной подписи (включая вышеупомянутые плагины). Эти модули предназначены для операций PKI (хотя в целом у нас также есть компоненты для операций OpenPGP, в настоящее время эти компоненты не поддерживают распределенную подпись).

И я должен отметить, что «автоматизация» здесь возможна, когда пользователь выбирает сертификат для использования и нажимает кнопку «подписать» (например). Вы не можете ничего подписать без явного действия пользователя. В некоторых случаях пользователю также необходимо будет предоставить ПИН-код / ​​пароль, который защищает закрытый ключ от неправильного использования.

...