Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция NCryptImportKey импортирует api шифрования: ключ следующего поколения (CNG) из большого двоичного объекта памяти.
Синтаксис
SECURITY_STATUS NCryptImportKey(
[in] NCRYPT_PROV_HANDLE hProvider,
[in, optional] NCRYPT_KEY_HANDLE hImportKey,
[in] LPCWSTR pszBlobType,
[in, optional] NCryptBufferDesc *pParameterList,
[out] NCRYPT_KEY_HANDLE *phKey,
[in] PBYTE pbData,
[in] DWORD cbData,
[in] DWORD dwFlags
);
Параметры
[in] hProvider
Дескриптор поставщика хранилища ключей.
[in, optional] hImportKey
Дескриптор криптографического ключа , с помощью которого были зашифрованы данные ключа в импортированном BLOB-объекте . Это должен быть дескриптор того же ключа, который был передан в параметре hExportKey функции NCryptExportKey . Если этот параметр имеет значение NULL, предполагается, что ключ BLOB не шифруется.
[in] pszBlobType
Строка Юникода, завершающая значение NULL, содержащая идентификатор, указывающий формат ключа BLOB. Эти форматы относятся к конкретному поставщику хранилища ключей. Форматы BLOB, поддерживаемые поставщиками Майкрософт, см. в примечаниях.
[in, optional] pParameterList
Адрес структуры NCryptBufferDesc , указывающий на массив буферов, содержащих сведения о параметрах ключа.
[out] phKey
Адрес переменной NCRYPT_KEY_HANDLE , которая получает дескриптор ключа. Завершив использование этого дескриптора, отпустите его, передав его в функцию NCryptFreeObject .
[in] pbData
Адрес буфера, содержащего импортируемый ключ BLOB- объекта. Параметр cbData содержит размер этого буфера.
[in] cbData
Размер в байтах буфера pbData .
[in] dwFlags
Флаги, изменяющие поведение функции. Это может быть ноль или сочетание одного или нескольких следующих значений. Набор допустимых флагов зависит от каждого поставщика хранилища ключей.
| Ценность | Значение |
|---|---|
| NCRYPT_SILENT_FLAG | Запрашивает, чтобы поставщик хранилища ключей (KSP) не отображал пользовательский интерфейс. Если поставщик должен отобразить пользовательский интерфейс для работы, вызов завершается ошибкой, и KSP должен задать код ошибки NTE_SILENT_CONTEXT в качестве последней ошибки. |
| NCRYPT_REQUIRE_VBS_FLAG | Указывает, что ключ должен быть защищен с помощью безопасности на основе Виртуализации (VBS). По умолчанию создается перекрестный загрузочный ключ, хранящийся на диске, который сохраняется в циклах перезагрузки. Операция завершится ошибкой, если VBS недоступна. (*См. примечания) |
| NCRYPT_PREFER_VBS_FLAG | Указывает, что ключ должен быть защищен с помощью безопасности на основе виртуализации (VBS). По умолчанию создается перекрестный загрузочный ключ, хранящийся на диске, который сохраняется в циклах перезагрузки. Операция создаст программный изолированный ключ, если VBS недоступен. (*См. примечания) |
| NCRYPT_USE_PER_BOOT_KEY_FLAG | Дополнительный флаг, который можно использовать вместе с NCRYPT_REQUIRE_VBS_FLAG или NCRYPT_PREFER_VBS_FLAG. Указывает безопасности на основе виртуализации (VBS) защитить ключ клиента с помощью ключа на загрузку, хранящегося на диске, но не может использоваться повторно во время загрузочных циклов. (*См. примечания) |
Возвращаемое значение
Возвращает код состояния, указывающий на успешность или сбой функции.
Возможные коды возврата включают, но не ограничиваются следующими:
| Код возврата | Описание |
|---|---|
| ERROR_SUCCESS | Функция была успешной. |
| NTE_BAD_FLAGS | Параметр dwFlags содержит недопустимое значение. |
| NTE_EXISTS | Ключ с указанным именем уже существует, и NCRYPT_OVERWRITE_KEY_FLAG не указан. |
| NTE_INVALID_HANDLE | Недопустимый параметр hProvider . |
| NTE_INVALID_PARAMETER | Один или несколько параметров недопустимы. |
| NTE_NO_MEMORY | Произошел сбой выделения памяти. |
| NTE_VBS_UNAVAILABLE | VBS недоступна. |
| NTE_VBS_CANNOT_DECRYPT_KEY | Операция расшифровки VBS завершилась сбоем. |
Замечания
Это важно
Сведения о флагах VBS относятся к предварительному выпуску продукта, который может быть существенно изменен до выпуска. Корпорация Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых в отношении информации, предоставленной здесь.
Служба не должна вызывать эту функцию из функции StartService. Если служба вызывает эту функцию из функции StartService , может произойти взаимоблокировка, а служба может перестать отвечать.
В следующих разделах описано поведение, конкретное для поставщиков хранилища ключей Майкрософт:
- KSP программного обеспечения Майкрософт
- KSP смарт-карты Майкрософт
KSP программного обеспечения Майкрософт
Дополнительные сведения о параметрах pszBlobType, поддерживаемых поставщиком программного обеспечения Майкрософт, см. в NCryptImportKey.
Если имя ключа не указано, microsoft Software KSP обрабатывает ключ как временный и не сохраняет его постоянно. Для типа NCRYPT_OPAQUETRANSPORT_BLOB имя ключа хранится в BLOB-объекте при экспорте. Для других форматов BLOB имя можно указать в параметре буфера NCRYPTBUFFER_PKCS_KEY_NAME в параметре pParameterList .
В Windows Server 2008 и Windows Vista только ключи, импортированные как PKCS #NCRYPT_PKCS8_PRIVATE_KEY_BLOB 7, NCRYPT_PKCS7_ENVELOPE_BLOB можно сохранить с помощью приведенного выше метода. Чтобы сохранить ключи, импортированные через другие типы BLOB-объектов на этих платформах, используйте метод, описанный в разделе "Импорт ключей и экспорт".
Следующие флаги поддерживаются этим поставщиком ключевых показателей эффективности.
| Срок | Описание |
|---|---|
| NCRYPT_NO_KEY_VALIDATION | Не проверяйте общедоступную часть пары ключей. Этот флаг применяется только к парам открытых и закрытых ключей. |
| NCRYPT_DO_NOT_FINALIZE_FLAG | Не завершайте ключ. Этот параметр полезен, если необходимо добавить или изменить свойства ключа после импорта. Прежде чем его можно будет использовать, необходимо передать дескриптор ключа в функцию NCryptFinalizeKey . Этот флаг поддерживается для закрытых ключей PKCS #7 и PKCS #8, но не для открытых ключей. |
| NCRYPT_MACHINE_KEY_FLAG | Ключ применяется к локальному компьютеру. Если этот флаг отсутствует, ключ применяется к текущему пользователю. |
| NCRYPT_OVERWRITE_KEY_FLAG | Если ключ уже существует в контейнере с указанным именем, существующий ключ будет перезаписан. Если этот флаг не указан и ключ с указанным именем уже существует, эта функция вернет NTE_EXISTS. |
| NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG | Кроме того, сохраните ключ в устаревшем хранилище. Это позволяет использовать ключ с CryptoAPI. Этот флаг применяется только к ключам RSA. |
KSP смарт-карты Майкрософт
Набор ключевых форматов BLOB-объектов и флагов, поддерживаемых этим KSP, идентичен набору, поддерживаемого microsoft Software KSP.
В Windows Server 2008 и Windows Vista KSP Microsoft Smart Card импортирует все ключи в KSP программного обеспечения Майкрософт. Таким образом, ключи не могут сохраняться на смарт-карте с помощью этого API, и руководство, приведенное в приведенном выше разделе, применяется при попытке сохранить ключи в KSP программного обеспечения Майкрософт.
В Windows Server 2008 R2 и Windows 7 поставщик хранилища ключей Microsoft Smart Card может импортировать закрытый ключ в смарт-карту, если выполнены следующие условия:
- Допустимое имя контейнера ключа на карточке.
- Импорт закрытых ключей поддерживается смарт-картой.
- Для следующих двух разделов реестра задано значение DWORD
0x1:- HKLM\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\Microsoft Base Smart Card Crypto Provider\AllowPrivateExchangeKeyImport
- HKLM\SOFTWARE\Microsoft\Cryptography\Defaults\Provider\Microsoft Base Smart Card Crypto Provider\AllowPrivateSignatureKeyImport
Если имя контейнера ключей равно NULL, microsoft Smart Card KSP обрабатывает ключ как временный и импортирует его в KSP программного обеспечения Майкрософт.
Дополнительные требования к оборудованию для ключей VBS
Хотя на компьютере установлена соответствующая ОС, необходимо выполнить следующие дополнительные требования к оборудованию, чтобы использовать VBS для создания и защиты ключей.
- Включено VBS (см. раздел "Безопасность на основе виртуализации" (VBS))
- TPM включен
- Для сред без операционной системы требуется TPM 2.0.
- Для сред виртуальных машин поддерживается vTPM (Virtual TPM).
- BIOS следует обновить до UEFI с помощью профиля SecureBoot
Дополнительные сведения о требованиях к оборудованию:
- VBS имеет несколько требований к оборудованию для выполнения, включая Hyper-V (гипервизор Windows), 64-разрядную архитектуру и поддержку IOMMU. Полный список требований к оборудованию VBS см. здесь.
- Здесь можно найти требования к высокозащищенным устройствам.
Требования
| Требование | Ценность |
|---|---|
| Минимальный поддерживаемый клиент | Windows Vista [классические приложения | Приложения UWP] |
| минимальный поддерживаемый сервер | Windows Server 2008 [классические приложения | Приложения UWP] |
| целевая платформа | Виндоус |
| Заголовок | ncrypt.h |
| Библиотека | Ncrypt.lib |
| Библиотека dll | Ncrypt.dll |