Кривизна ПО требует использования реестра Windows в качестве считывателя ключевого носителя.
Требуется пояснить: секретный ключ хранится в реестре? Если да, то в реестре какой машины - ЦС или подписанта?
Секретный ключ ЦС хранится в реестре машины с ПО ЦС, секретный ключ подписанта в реестре машины подписанта.
В обоих случаях путь ветки вида:
HKLM\SOFTWARE\Crypto Pro\Settings\USERS\USER_NAME\Keys\MCSKEY_KEY_ID,
где USER_NAME - имя пользователя (в случае ЦС - USER_NAME == SecurityService), KEY_ID == ID ключа.
Еще присутсвует одна особенность реализации PKI:
При кодировании любого документа на открытом ключе адресата, параллельно осуществляется кодирование на открытом ключе специального системного пользователя (т.н. MasterKey). Таким образом получается 2 сессионных ключа для закодированного документа. Производитель такое решение преподносит как возможность перекодирования документа при утере секретных ключей отправителя и адресата.
Такой подход оправдан или имеет смысл каким-либо способом организовать backup секретных ключей пользователей на случай их утери/порчи?