Электронная подпись на внешнем сервере


Уважаемые спецы! Подскажите, с чего начать.

Задача – организовать веб-вервис, который будет заверять своей электронной подписью пользовательские файлы. Предполагается использовать это для подтверждения владения определённым файлом на момент подписи.

Хотелось бы реализовать два варианта работы:
1- подписывается электронная подпись пользователя, которой уже заверен основной файл, и,
2- подписывается закачаный на сервер пользовательский файл (архив).

Я в криптографии новичёк, только на десктопе использовал pgp, пока не перешёл на truecrypt из-за невостребованности подписей... И пока не очень представляю от какой печки плясать :-)

Сервер, на котором должен крутиться сервис:
http://www.hostgator.com/shared.shtml
(план Baby или Swamp, ОС Linux, Kernel version 2.6.17.11-grsechg, Apache version 1.3.37 Unix).

Буду рад вашим советам!

Комментарии
— unknown (09/11/2007 13:23)   
читать не перечитать[link1]
— unknown (09/11/2007 13:29, исправлен 09/11/2007 13:30)   
Предполагается использовать это для подтверждения владения определённым файлом на момент подписи.

И всё?
Достаточно пользователю отправить на сервер значение хэша (из числа криптостойких) для файла, а затем пусть сервер подписывает пару [хэш:дата]. Ну и хэш перед этим тоже пусть сам пользователь и считает.
— strannic42 (09/11/2007 13:43, исправлен 09/11/2007 13:47)   
За ссылку спасибо – читаю :)

А насчёт работы с хэшем, боюсь, не всё так просто – мои пользователи не имеют ни малейшего понятия о криптографии, подавляющее большинство их даже собственной электронной подписью не обладают. Поэтому и хочется предоставить им помимо обычного тайм-стемпинга вариант файлового хранилища с автоматической подписью сервером закачанных файлов.
— unknown (09/11/2007 14:00)   
gpg --print-mds file

Пусть скачают gpg и выполнят комманду, а если не могут, напишите .bat файл :-)
— strannic42 (09/11/2007 14:03)   
:-)
а со стороны сервера это так элегантно не решить?
— SATtva (09/11/2007 14:36)   
Предполагается использовать это для подтверждения владения определённым файлом на момент подписи.

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

На самом деле, я занимаюсь реализацией того же самого для этого сайта. Разумеется, ни о каком хранении файлов речи не идёт, предполагается чистая служба меток времени с надёжным аудитом.
— unknown (09/11/2007 14:57)   
Да там всё еще элегантнее, если можно так назвать, когда пользователей заставляют закачивать файл на сервер для подписи:



Нужно только подумать над защитой безпарольного ввода на сервере
— unknown (09/11/2007 14:58)   
меет безоговорочное, слепое доверие к Вашей системе

Куда уж более слепое, если на подпись надо давать не хэши, а закачивать сами файлы.
— strannic42 (09/11/2007 15:33, исправлен 09/11/2007 15:34)   
Спасибо за параметры gpg, кажется, понемногу проясняется.

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

Насчёт доверия арбитра – это, насколько я вижу, не решается техническими средствами на базе виртуального хостинга. Так что придётся занимать позицию нескомпрометированного сервиса на основе презумции невиновности. Или есть иные решения, прозрачные для пользователей? Было бы интересно услышать о них.

На этом сайте вижу реализацию шифрования при отправке личного сообщения – где можно почитать про практическую реализацию такого механизма? Кажется, ответ на мою проблему состоит в нескольких строках кода...
— SATtva (09/11/2007 15:55)   
Насчёт доверия арбитра – это, насколько я вижу, не решается техническими средствами на базе виртуального хостинга.

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

Si (H (Si-1), Mi),
где S — цифровая подпись данных M, H — операция хэширования

В этом примере оператор сервиса не может произвольно изменить одну из старых меток времени, поскольку это повлечёт инвалидацию всех последующих. (Здесь нужно быть внимательным с семантикой и чётко определить, что именно подлежит хэшированию: каждый пользователь должен иметь возможность сделать то же самое, чтобы убедиться в честности системы.) Правда, ничто не мешает ему изменить последнюю изданную метку, не имеющую аудиторского следа, или попробовать подделать все последующие в надежде, что это останется незамеченным. Данный пример очень прост, но демонстрирует нетривиальную схему.

На этом сайте вижу реализацию шифрования при отправке личного сообщения – где можно почитать про практическую реализацию такого механизма? Кажется, ответ на мою проблему состоит в нескольких строках кода...

Здесь можно и комментарии и страницы подписывать. ;-) Почитать можно здесь[link2], только кода там всё-таки побольше...
— strannic42 (09/11/2007 17:29)   
ай спасибо за кодировочки!! Выходные обещают быть вдвойне интереснее!!
— SATtva (09/11/2007 17:46)   
Пожалуйста. Добьётесь успеха, можете пожертвование[link3] сделать. :-)
— strannic42 (09/11/2007 17:53, исправлен 09/11/2007 18:18)   
а с кредитки как?? С удовольствием поддержу, но электронными денежками не пользуюсь совсем... Сделайте консалтинг через 2СО или что-то подобное – намного проще будет выразить Вам признательность! Многие пользуются электронными карточками, игнорируя при этом электронные деньги.
— SATtva (09/11/2007 21:25)   
Paypal, к сожалению, в России не действует...
Гость (09/11/2007 21:46)   
Paypal, к сожалению, в России не действует...

Зато полно обменников.
— poptalk (18/11/2007 01:18)   
Хотелось бы увидеть такой сервис, который бы подписывал блоговые feed-ы (RSS или Atom).
— SATtva (18/11/2007 19:03, исправлен 18/11/2007 21:40)   
Зачем? (Стандарт схамы RDF[link4], кстати, существует.)
— poptalk (19/11/2007 03:00)   
Зачем? (Стандарт схамы RDF, кстати, существует.)


Полагаю, это не вопрос, зачем подписывать документы вообще. :-) Почему feed? Чтобы не отправлять каждый документ по e-mail. Процесс подписывания будет проходить автоматически, зарегистрировал свой блог и забыл.

Ссылки
[link1] http://www.adastral.ucl.ac.uk/~helger/crypto/link/timestamping/

[link2] http://www.pgpru.com/razrabotki/dvizhok/gnupg

[link3] http://www.pgpru.com/proekt/podderzhka

[link4] http://xmlns.com/wot/0.1/