Импорт и экспорт ключей
С помощью CNG можно импортировать и экспортировать симметричные ключи и асимметричные ключи. Кроме того, вы можете использовать функции экспорта и импорта ключей для перемещения ключей между компьютерами.
симметричные ключи;
Чтобы импортировать или экспортировать симметричные (или сеансовые) ключи, в которых один и тот же ключ используется для шифрования и расшифровки некоторых данных, можно использовать функции BCryptImportKey и BCryptExportKey . Как правило, сначала экспорт ключа выполняется с помощью функции BCryptExportKey перед импортом с помощью функции BCryptImportKey . Функции предназначены для включения шифрования экспортированных и импортированных ключей с помощью параметров hExportKey и hImportKey ; однако реализация этих функций корпорацией Майкрософт не поддерживает шифрование экспортированных и импортированных ключей.
асимметричные ключи;
Для импорта асимметричных (или открытых и закрытых) пар ключей, в которых один ключ используется для шифрования, а другой — для расшифровки некоторых данных, можно использовать одну из функций BCryptImportKeyPair или NCryptImportKey . Поставщик CNG должен кодировать пару ключей с использованием поддерживаемого типа ключа BLOB . BCryptExportKey можно использовать для создания большого двоичного объекта закодированного ключа. Структуры CNG описывают типы и структуры ключевых BLOB-объектов, поддерживаемые поставщиком хранилища ключей Майкрософт.
Чтобы BCryptExportKey создавал пару сохраненных ключей, большой двоичный объект входного ключа должен содержать закрытый ключ. Открытые ключи не сохраняются.
Имя ключа и политика экспорта не являются частью структуры BLOB, определенной в разделе Структуры CNG. Однако если BLOB имеет непрозрачный тип BLOB (например, образ памяти внутреннего состояния ключа), blOB может содержать имя ключа и свойства политики экспорта.
В следующей процедуре описывается, как импортировать сохраненный закрытый ключ с его свойствами.
Импорт сохраненного ключа
- Создайте сохраненный ключ с помощью функции NCryptCreatePersistedKey .
- Задайте все необходимые свойства объекта ключа с помощью функции NCryptSetProperty .
- Задайте blOB-объект импорта ключа в качестве свойства ключа, а в качестве имени свойства — тип BLOB.
- Завершите импорт сохраненного ключа с помощью функции NCryptFinalizeKey .