@Sienore

Как сделать файловый менеджер с электронной подписью?

Добрый день.

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

Пока представляю себе это так:
  1. пользователь выбирает файл для загрузки и нажимает на кнопку «Подписать» (само подписание осуществляется на стороне пользователя и сохраняется в скрытом поле формы загрузки). После завершения формирования подписи пользователь нажимает на кнопку «Отправить» и данные передаются обработчику на сервер;
  2. обработчик сохраняет информацию о файле (оригинальное имя и его размер) и полученную электронную подпись в базе данных и загружает файл на сервер со случайным именем;
  3. при переходе на страницу с информацией о файле производится выборка из базы данных, разбор и проверка электронной подписи.


В связи с этим у меня возникли следующие вопросы:
  1. верна ли такая реализация или я что то упустил?
  2. в соответствии с технической документацией
    если требуется подписать документ произвольного формата, то требуется перекодировать его в формат base64
    как это можно сделать на PHP или JavaScript?
  3. Правильно ли создавать электронную подпись вместе с загрузкой файла или лучше вначале загрузить его на сервер, а затем передать на клиент base64 представление файла и вернуть в базу подписанные данные?
  4. в поле какого типа лучше хранить подпись в базе данных? один файл может подписывать несколько лиц и ее объем может быть значительной


P.S. Подписание файлов осуществляется при помощи Рутокен ЭЦП и Рутокен Плагин
  • Вопрос задан
  • 196 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Для начала определитесь, какую подпись будете использовать. Будут ли пары ключей выдаваться вашим сервером или вы будете использовать ЭЦП аккредитованных вами УЦ. Если подписи генерируются у вас, то будут ли оба ключа храниться на сервере или закрытый ключ будет только у пользователя.

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

Для проверки проводится точно такая же процедура генерации хэша, подпись дешифруется открытым ключом и сравнивается с только что вычисленным хэшем. Если они совпадают, то подпись действительна.

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

Войдите, чтобы написать ответ

Похожие вопросы