Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Функция 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 |