Показать/Скрыть содержание

    Архивирование клиентских ключей

    Ключи подписи хранящиеся на устройстве пользователя могут быть сохранены на сервере в виде архивных копий. Архивные копии ключей подписи, сохраненные на сервере, могут быть загружены на устройство пользователя.

    Примечание

    Архивные копии могут быть созданы только для ключей, которые были созданы с флагом EXPORTABLE. Неэкспортируемые ключи подписи (например ключи созданные на ФКН) не могут быть архивированы.

    Примечание

    Все ранее создаваемые ключи подписи создавались как неэкспортируемые. Для создания экспортируемых ключей в метод крипто библиотеки createKeyEx добавлен флаг is_exportable.

    Архивированы могут быть ключи, у которых выставлен флаг IsClient:true в объекте Certificate. Дополнительно необходимо проверить является ли ключ подписи экспортируемым с помощью функции крипто библиотеки isExportable.

    Для проверки сохранена ли архивная копия ключа на сервере необходимо получить список сертификатов и проверить флаг isArchived у объекта Certificate.

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

    Для работы с архивными ключами MDAG предоставляет методы:

    • Создание архивное копии ключа
    • Получение архивной копии ключа
    • Удаление архивной копии ключа

    Для работы с архивными ключами крипто библиотека предоставляет функции:

    • importPFX - Функция импорта ключа из PFX
    • exportPFX - Функция экспорта ключа в PFX
    • isExportable - Функция проверки экспортируемости ключа

    Для создания экспортируемых ключей в функцию крипто библиотеки createKeyEx добавлен флаг is_exportable. Аналогично при импорте ключа из PFX в функции importPFX можно указать флаг is_exportable.

    Между сервером и клиентом экспортируемый ключ передается в PFX. Для защиты PFX используется пароль вырабатываемый с помощью ключа пользователя KConf и случайных данных. В качестве случайных данных берется значение nonce передаваемое в заголовке аутентификации. Соответственно при создании архивной копии и при получении архивной копии необходимо использовать одно и тоже значение nonce для вызова методов крипто библиотеки importPFX, exportPFX и вычислении заголовка аутентификации.

    Последовательность действий при создании архивной копии

    • Открытие ключевого контейнера openContainer В результате метод возвращает открытый хэндл криптопровайдера и ключа подписи hSigningProv, hSigningKey.

    • (опционално) Проверка является ли ключ экспортируемым isExportable

    • Выработка случайных данных genNonce. В результате вырабатывается 32-байта случайных данных (nonce).

    • Открытие ключа KConf importEncryptedKey В результате метод возвращает открытый хэндл ключа KConf

    • Экспорт ключа в PFX exportPFX В вызове метода необходимо указать хэндл криптопровайдера и ключа подписи hSigningProv, hSigningKey, хэндл ключа KConf и случайные данные, для выработки пароля nonce. Для определения размера буфера для записи PFX метод необходимо вызвать 2-а раза. Если первый вызов завершится с кодом 234 (ERROR_MORE_DATA), то необходимо выделить буфер указанного размера и вызвать метод повторно.

    • Отправка PFX на сервер Создание архивное копии ключа Заголовок аутентификации вычисляется штатно. Но значение поля nonce должно быть взято с шага 3.

    Последовательность действий при получении архивной копии

    • Открытие ключа KConf importEncryptedKey В результате метод возвращает открытый хэндл ключа KConf

    • Выработка случайных данных genNonce. В результате вырабатывается 32-байта случайных данных (nonce).

    • Получение PFX с сервера Получение архивной копии ключа Заголовок аутентификации вычисляется штатно. Но значение поля nonce должно быть взято с шага 2.

    • Импорт ключа из PFX importPFX В вызове метода необходимо указать хэндл ключа KConf и случайные данный полученные на шаге 2. Так же в методе передается набор данных аналогичный методу createKeyEx. Метод создает новый ключевой контейнер.

    SDK должно самостоятельно проверить, что на устройстве нет ранее созданного контейнера с данным ключом. Т.е. избежать дублирования ключевых контейнеров на одном устройстве.

    В начало © ООО "КРИПТО-ПРО", 2000–2025