Bawa spesifikasi kunci Anda sendiri

Dokumen ini menjelaskan spesifikasi untuk mengimpor kunci yang dilindungi HSM dari HSM lokal pelanggan ke dalam Key Vault.

Skenario

Pelanggan Key Vault ingin mentransfer kunci dengan aman dari HSM lokal mereka di luar Azure, ke dalam Azure Key Vault yang didukung HSM. Proses impor kunci yang dihasilkan di luar Key Vault umumnya disebut sebagai Bring Your Own Key (BYOK).

Berikut ini adalah persyaratannya:

  • Kunci yang akan ditransfer tidak pernah ada di luar HSM dalam bentuk teks biasa.
  • Di luar HSM, kunci yang akan ditransfer selalu dilindungi oleh kunci yang dipegang di HSM Azure Key Vault

Terminologi

Nama Kunci Jenis Kunci Asal Deskripsi
Kunci Pertukaran Utama (KEK) RSA HSM Azure Key Vault Pasangan kunci RSA yang didukung HSM yang dihasilkan di Azure Key Vault
Kunci Pembungkusan AES Vendor HSM Tombol [ephemeral] AES yang dihasilkan oleh HSM lokal
Kunci Target RSA, EC, AES (Hanya HSM Terkelola) Vendor HSM Kunci yang akan ditransfer ke HSM Azure Key Vault

Kunci Pertukaran Utama: Kunci yang didukung HSM yang dihasilkan pelanggan di brankas kunci tempat kunci BYOK akan diimpor. KEK ini harus memiliki properti berikut:

  • Kunci RSA-HSM (4096-bit; 3072-bit; atau 2048-bit)
  • Ini akan memiliki key_ops tetap (HANYA 'impor'), yang akan memungkinkannya untuk digunakan HANYA selama BYOK
  • Kek harus berada dalam brankas yang sama dengan tempat Kunci Target akan diimpor

Langkah-langkah pengguna

Untuk melakukan transfer kunci, pengguna melakukan langkah-langkah berikut:

  1. Hasilkan KEK.
  2. Ambil kunci publik KEK.
  3. Menggunakan vendor HSM yang disediakan alat BYOK - Impor KEK ke target HSM dan ekspor Kunci Target yang dilindungi oleh KEK.
  4. Impor Kunci Target yang dilindungi ke Azure Key Vault.

Pelanggan menggunakan alat BYOK dan dokumentasi yang disediakan oleh vendor HSM untuk menyelesaikan Langkah 3. Ini menghasilkan Key Transfer Blob (file ".byok").

Batasan HSM

HSM yang ada dapat menerapkan batasan pada kunci yang mereka kelola, termasuk:

  • HSM mungkin perlu dikonfigurasi untuk memungkinkan ekspor berbasis pembungkusan kunci
  • Kunci target mungkin perlu ditandai dengan CKA_EXTRACTABLE HSM untuk memungkinkan ekspor terkontrol
  • Dalam beberapa kasus, KEK dan kunci pembungkus mungkin perlu ditandai sebagai CKA_TRUSTED. Ini memungkinkannya untuk digunakan untuk membungkus kunci dalam HSM.

Konfigurasi HSM sumber, umumnya, di luar lingkup spesifikasi ini. Microsoft mengharapkan vendor HSM untuk menghasilkan dokumentasi yang menyertai alat BYOK mereka untuk menyertakan langkah-langkah konfigurasi tersebut.

Catatan

Langkah 1, 2, dan 4 yang dijelaskan di bawah ini dapat dilakukan menggunakan antarmuka lain seperti Azure PowerShell dan Azure Portal. Mereka juga dapat dilakukan secara terprogram menggunakan fungsi yang setara di Key Vault SDK.

Langkah 1: Hasilkan KEK

Gunakan perintah buat tombol az keyvault untuk membuat KEK yang memiliki operasi utama yang diatur ke impor. Catat pengidentifikasi kunci 'kid' yang dikembalikan dari perintah di bawah ini.

az keyvault key create --kty RSA-HSM --size 4096 --name KEKforBYOK --ops import --vault-name ContosoKeyVaultHSM

Langkah 2: Ambil kunci publik KEK

Unduh bagian kunci publik dari KEK dan simpan ke dalam file PEM.

az keyvault key download --name KEKforBYOK --vault-name ContosoKeyVaultHSM --file KEKforBYOK.publickey.pem

Langkah 3: Hasilkan blob transfer kunci menggunakan vendor HSM yang disediakan alat BYOK

Pelanggan akan menggunakan alat BYOK yang disediakan Vendor HSM untuk membuat blob transfer kunci (disimpan sebagai file ".byok"). Kunci publik KEK (sebagai file .pem) akan menjadi salah satu masukan untuk alat ini.

Blob Transfer Kunci

Jangka panjang, Microsoft ingin menggunakan mekanisme CKM_RSA_AES_KEY_WRAP PKCS#11 untuk mentransfer kunci target ke Azure Key Vault karena mekanisme ini menghasilkan satu blob dan, yang lebih penting, kunci AES menengah ditangani oleh dua HSM dan dijamin sementara. Mekanisme ini saat ini tidak tersedia di beberapa HSM tetapi kombinasi melindungi kunci target dengan CKM_AES_KEY_WRAP_PAD menggunakan kunci AES dan melindungi kunci AES dengan CKM_RSA_PKCS_OAEP menghasilkan blob yang setara.

Plaintext kunci target tergantung pada jenis kunci:

  • Untuk kunci RSA, kunci privat ASN.1 Pengodean DER [RFC3447] dibungkus dengan PKCS#8 [RFC5208]
  • Untuk kunci EC, kunci privat ASN.1 Pengodean DER [RFC5915] dibungkus dengan PKCS#8 [RFC5208]
  • Untuk kunci oktet, byte mentah dari kunci

Byte untuk kunci plaintext kemudian diubah menggunakan mekanisme CKM_RSA_AES_KEY_WRAP:

  • Kunci AES sementara dihasilkan dan dienkripsi dengan kunci RSA pembungkus menggunakan RSA-OAEP dengan SHA1.
  • \Kunci plaintext yang dikodekan dienkripsi menggunakan kunci AES menggunakan AES Key Wrap dengan Padding.
  • Kunci AES terenkripsi dan kunci plaintext terenkripsi digabungkan untuk menghasilkan blob ciphertext terakhir.

Format blob transfer menggunakan JSON Web Encryption compact serialization (RFC7516) terutama sebagai kendaraan untuk mengirimkan metadata yang diperlukan ke layanan untuk dekripsi yang benar.

Jika CKM_RSA_AES_KEY_WRAP_PAD digunakan, serialisasi JSON dari blob transfer adalah:

{
  "schema_version": "1.0.0",
  "header":
  {
    "kid": "<key identifier of the KEK>",
    "alg": "dir",
    "enc": "CKM_RSA_AES_KEY_WRAP"
  },
  "ciphertext":"BASE64URL(<ciphertext contents>)",
  "generator": "BYOK tool name and version; source HSM name and firmware version"
}

  • kid = pengidentifikasi kunci KEK. Untuk kunci Key Vault Kunci terlihat seperti ini: https://ContosoKeyVaultHSM.vault.azure.net/keys/mykek/eba63d27e4e34e028839b53fac905621
  • alg = algoritma.
  • dir = Mode langsung, yaitu kid yang direferensikan digunakan untuk secara langsung melindungi ciphertext yang merupakan representasi akurat dari CKM_RSA_AES_KEY_WRAP
  • generator = bidang informasi yang menunjukkan nama dan versi alat BYOK dan sumber produsen dan model HSM. Informasi ini ditujukan untuk digunakan dalam pemecahan masalah dan dukungan.

Blob JSON disimpan dalam file dengan ekstensi ".byok" sehingga klien Azure PowerShell/CLI memperlakukannya dengan benar ketika perintah 'Add-AzKeyVaultKey' (PSH) atau 'az keyvault key import' (CLI) digunakan.

Langkah 4: Unggah blob transfer kunci untuk mengimpor HSM-key

Pelanggan akan mentransfer file Key Transfer Blob (".byok") ke workstation online dan kemudian menjalankan perintah impor kunci az keyvault untuk mengimpor blob ini sebagai kunci baru yang didukung HSM ke dalam Key Vault.

Untuk mengimpor kunci RSA gunakan perintah ini:

az keyvault key import --vault-name ContosoKeyVaultHSM --name ContosoFirstHSMkey --byok-file KeyTransferPackage-ContosoFirstHSMkey.byok --ops encrypt decrypt

Untuk mengimpor kunci EC, Anda harus menentukan jenis kunci dan nama kurva.

az keyvault key import --vault-name ContosoKeyVaultHSM --name ContosoFirstHSMkey --byok-file --kty EC-HSM --curve-name "P-256" KeyTransferPackage-ContosoFirstHSMkey.byok --ops sign verify

Ketika perintah di atas dijalankan, perintah ini menghasilkan pengiriman permintaan REST API sebagai berikut:

PUT https://contosokeyvaulthsm.vault.azure.net/keys/ContosoFirstHSMKey?api-version=7.0

Badan permintaan saat mengimpor kunci RSA:

{
  "key": {
    "kty": "RSA-HSM",
    "key_ops": [
      "decrypt",
      "encrypt"
    ],
    "key_hsm": "<Base64 encoded BYOK_BLOB>"
  },
  "attributes": {
    "enabled": true
  }
}

Badan permintaan saat mengimpor kunci EC:

{
  "key": {
    "kty": "EC-HSM",
    "crv": "P-256",
    "key_ops": [
      "sign",
      "verify"
    ],
    "key_hsm": "<Base64 encoded BYOK_BLOB>"
  },
  "attributes": {
    "enabled": true
  }
}

Nilai "key_hsm" adalah seluruh konten KeyTransferPackage-ContosoFirstHSMkey.byok yang dikodekan dalam format Base64.

Referensi

Langkah berikutnya