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