Bagikan melalui


Fungsi NCryptImportKey (ncrypt.h)

Fungsi NCryptImportKey mengimpor kunci Cryptography API: Next Generation (CNG) dari BLOB memori.

Sintaks

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
);

Parameter

[in] hProvider

Handel penyedia penyimpanan utama.

[in, optional] hImportKey

Handel kunci kriptografi tempat data kunci dalam BLOB kunci yang diimpor dienkripsi. Ini harus merupakan handel ke kunci yang sama yang diteruskan dalam parameter hExportKey dari fungsi NCryptExportKey . Jika parameter ini NULL, BLOB kunci diasumsikan tidak dienkripsi.

[in] pszBlobType

String Unicode yang dihentikan null yang berisi pengidentifikasi yang menentukan format BLOB kunci. Format ini khusus untuk penyedia penyimpanan kunci tertentu. Untuk format BLOB yang didukung oleh penyedia Microsoft, lihat Keterangan.

[in, optional] pParameterList

Alamat struktur NCryptBufferDesc yang menunjuk ke array buffer yang berisi informasi parameter untuk kunci.

[out] phKey

Alamat variabel NCRYPT_KEY_HANDLE yang menerima handel kunci. Setelah Anda selesai menggunakan handel ini, lepaskan dengan meneruskannya ke fungsi NCryptFreeObject .

[in] pbData

Alamat buffer yang berisi BLOB kunci yang akan diimpor. Parameter cbData berisi ukuran buffer ini.

[in] cbData

Ukuran, dalam byte, dari penyangga pbData .

[in] dwFlags

Bendera yang mengubah perilaku fungsi. Ini bisa menjadi nol atau kombinasi dari satu atau beberapa nilai berikut. Kumpulan bendera yang valid khusus untuk setiap penyedia penyimpanan kunci.

Nilai Makna
NCRYPT_SILENT_FLAG Meminta agar penyedia layanan utama (KSP) tidak menampilkan antarmuka pengguna apa pun. Jika penyedia harus menampilkan UI untuk beroperasi, panggilan gagal dan KSP harus mengatur kode kesalahan NTE_SILENT_CONTEXT sebagai kesalahan terakhir.
NCRYPT_REQUIRE_VBS_FLAG Menunjukkan kunci harus dilindungi dengan keamanan berbasis Virtualisasi (VBS). Secara default, ini membuat kunci persisten cross-boot yang disimpan pada disk yang bertahan di seluruh siklus reboot.

Operasi akan gagal jika VBS tidak tersedia. (*Lihat Keterangan)
NCRYPT_PREFER_VBS_FLAG Menunjukkan kunci harus dilindungi dengan keamanan berbasis Virtualisasi (VBS). Secara default, ini membuat kunci persisten cross-boot yang disimpan pada disk yang bertahan di seluruh siklus reboot.

Operasi akan menghasilkan kunci yang terisolasi perangkat lunak jika VBS tidak tersedia. (*Lihat Keterangan)
NCRYPT_USE_PER_BOOT_KEY_FLAG Bendera tambahan yang dapat digunakan bersama dengan NCRYPT_REQUIRE_VBS_FLAG atau NCRYPT_PREFER_VBS_FLAG. Menginstruksikan keamanan berbasis Virtualisasi (VBS) untuk melindungi kunci klien dengan kunci per boot yang disimpan dalam disk tetapi tidak dapat digunakan kembali di seluruh siklus boot. (*Lihat Keterangan)

Mengembalikan nilai

Mengembalikan kode status yang menunjukkan keberhasilan atau kegagalan fungsi.

Kemungkinan kode pengembalian termasuk, tetapi tidak terbatas pada, berikut ini:

Menampilkan kode Deskripsi
ERROR_SUCCESS Fungsi berhasil.
NTE_BAD_FLAGS Parameter dwFlags berisi nilai yang tidak valid.
NTE_EXISTS Kunci dengan nama yang ditentukan sudah ada dan NCRYPT_OVERWRITE_KEY_FLAG tidak ditentukan.
NTE_INVALID_HANDLE Parameter hProvider tidak valid.
NTE_INVALID_PARAMETER Satu atau beberapa parameter tidak valid.
NTE_NO_MEMORY Terjadi kegagalan alokasi memori.
NTE_VBS_UNAVAILABLE VBS tidak tersedia.
NTE_VBS_CANNOT_DECRYPT_KEY Operasi dekripsi gagal VBS.

Keterangan

Penting

Informasi mengenai bendera VBS berkaitan dengan produk prarilis yang mungkin dimodifikasi secara substansial sebelum dirilis secara komersial. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.

Layanan tidak boleh memanggil fungsi ini dari Fungsi StartService-nya. Jika layanan memanggil fungsi ini dari fungsi StartService-nya , kebuntuan dapat terjadi, dan layanan mungkin berhenti merespons.

Bagian berikut menjelaskan perilaku khusus untuk penyedia penyimpanan kunci Microsoft:

  • KSP Perangkat Lunak Microsoft
  • KSP Kartu Pintar Microsoft

KSP Perangkat Lunak Microsoft

Konstanta berikut didukung oleh KSP perangkat lunak Microsoft untuk parameter pszBlobType .

Jika nama kunci tidak disediakan, KSP Perangkat Lunak Microsoft memperlakukan kunci sebagai sementara dan tidak menyimpannya secara terus-menerus. Untuk jenis NCRYPT_OPAQUETRANSPORT_BLOB , nama kunci disimpan dalam BLOB saat diekspor. Untuk format BLOB lainnya, nama dapat disediakan dalam parameter buffer NCRYPTBUFFER_PKCS_KEY_NAME dalam parameter pParameterList .

Pada Windows Server 2008 dan Windows Vista, hanya kunci yang diimpor sebagai Blob amplop PKCS #7 (NCRYPT_PKCS7_ENVELOPE_BLOB) atau PKCS #8 blob kunci privat (NCRYPT_PKCS8_PRIVATE_KEY_BLOB) yang dapat dipertahankan dengan menggunakan metode di atas. Untuk mempertahankan kunci yang diimpor melalui jenis BLOB lain pada platform ini, gunakan metode yang didokumentasikan dalam Impor dan Ekspor Kunci.

Bendera berikut didukung oleh KSP ini.

Istilah Deskripsi
NCRYPT_NO_KEY_VALIDATION Jangan validasi bagian publik dari pasangan kunci. Bendera ini hanya berlaku untuk pasangan kunci publik/privat.
NCRYPT_DO_NOT_FINALIZE_FLAG Jangan menyelesaikan kunci. Opsi ini berguna ketika Anda perlu menambahkan atau memodifikasi properti kunci setelah mengimpornya. Anda harus menyelesaikan kunci sebelum dapat digunakan dengan meneruskan handel kunci ke fungsi NCryptFinalizeKey . Bendera ini didukung untuk kunci privat PKCS #7 dan PKCS #8 tetapi bukan kunci publik.
NCRYPT_MACHINE_KEY_FLAG Kunci berlaku untuk komputer lokal. Jika bendera ini tidak ada, kunci berlaku untuk pengguna saat ini.
NCRYPT_OVERWRITE_KEY_FLAG Jika kunci sudah ada dalam kontainer dengan nama yang ditentukan, kunci yang ada akan ditimpa. Jika bendera ini tidak ditentukan dan kunci dengan nama yang ditentukan sudah ada, fungsi ini akan mengembalikan NTE_EXISTS.
NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG Simpan juga kunci dalam penyimpanan warisan. Ini memungkinkan kunci untuk digunakan dengan CryptoAPI. Bendera ini hanya berlaku untuk kunci RSA.

KSP Kartu Pintar Microsoft

Kumpulan format dan bendera BLOB utama yang didukung oleh KSP ini identik dengan set yang didukung oleh KSP Perangkat Lunak Microsoft.

Pada Windows Server 2008 dan Windows Vista, KSP Kartu Pintar Microsoft mengimpor semua kunci ke dalam KSP Perangkat Lunak Microsoft. Dengan demikian, kunci tidak dapat dipertahankan ke kartu pintar dengan menggunakan API ini, dan panduan di bagian di atas berlaku ketika mencoba mempertahankan kunci dalam KSP Perangkat Lunak Microsoft.

Pada Windows Server 2008 R2 dan Windows 7, Penyedia Penyimpanan Kunci Kartu Pintar Microsoft dapat mengimpor kunci privat ke kartu pintar, asalkan kondisi berikut terpenuhi:

  • Nama kontainer kunci pada kartu valid.
  • Mengimpor kunci privat didukung oleh kartu pintar.
  • Dua kunci registri berikut diatur ke DWORD dari 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

Jika nama kontainer kunci adalah NULL, KSP Kartu Pintar Microsoft memperlakukan kunci sebagai sementara dan mengimpornya ke KSP Perangkat Lunak Microsoft.

Persyaratan perangkat keras tambahan untuk kunci VBS

Meskipun Anda mungkin memiliki OS yang sesuai yang diinstal pada komputer Anda, persyaratan perangkat keras tambahan berikut harus dipenuhi untuk menggunakan VBS untuk menghasilkan dan melindungi kunci.

  • VBS diaktifkan (lihat Keamanan berbasis virtualisasi (VBS))
  • TPM diaktifkan
    • Untuk lingkungan bare-metal, TPM 2.0 diperlukan.
    • Untuk lingkungan VM, vTPM (Virtual TPM) didukung.
  • BIOS harus ditingkatkan ke UEFI dengan profil SecureBoot

Untuk informasi selengkapnya tentang persyaratan perangkat keras:

  • VBS memiliki beberapa persyaratan perangkat keras untuk dijalankan, termasuk Hyper-V (hypervisor Windows), arsitektur 64 bit, dan dukungan IOMMU. Daftar lengkap persyaratan perangkat keras VBS dapat ditemukan di sini.
  • Persyaratan untuk perangkat yang sangat aman dapat ditemukan di sini.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows Vista [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2008 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header ncrypt.h
Pustaka Ncrypt.lib
DLL Ncrypt.dll

Lihat juga

NCryptBuffer

NCryptCreatePersistedKey