Saját kulcs használatának specifikációja

Ez a dokumentum a HSM által védett kulcsok ügyfelek helyszíni HSM-jeiből a Key Vault való importálásának specifikációit ismerteti.

Eset

Egy Key Vault ügyfél biztonságosan át szeretne helyezni egy kulcsot a helyszíni HSM-ről az Azure-on kívül, a HSM-háttérrendszerbe az Azure Key Vault. A Key Vault kívül létrehozott kulcs importálásának folyamatát saját kulcs (BYOK) néven is említik.

A követelmények a következők:

  • Az átvitt kulcs soha nem létezik egyszerű szöveges formában a HSM-en kívül.
  • A HSM-en kívül az átvitt kulcsot mindig az Azure Key Vault HSM-ben tárolt kulcs védi

Terminológia

Kulcs neve Kulcstípus Forrás Description
Kulcscserekulcs (KEK) RSA Azure Key Vault HSM Az Azure Key Vault-ben létrehozott HSM-alapú RSA-kulcspár
Körbefuttatási kulcs AES SzállítóI HSM A helyszíni HSM által létrehozott [rövid élettartamú] AES-kulcs
Célkulcs RSA, EC, AES (csak felügyelt HSM esetén) SzállítóI HSM Az Azure Key Vault HSM-be áthelyezendő kulcs

Kulcscserekulcs: Az ügyfél által a BYOK-kulcsot importáló kulcstartóban létrehozott HSM-alapú kulcs. Ennek a KEK-nek a következő tulajdonságokkal kell rendelkeznie:

  • RSA-HSM-kulcs (4096 bites vagy 3072 bites vagy 2048 bites)
  • Rögzített key_ops (CSAK "importálás"), amely lehetővé teszi, hogy csak a BYOK alatt lehessen használni
  • Ugyanabban a tárolóban kell lennie, ahol a célkulcsot importálni fogja

Felhasználói lépések

Kulcsátvitel végrehajtásához a felhasználó a következő lépéseket hajtja végre:

  1. KEK létrehozása.
  2. Kérje le a KEK nyilvános kulcsát.
  3. A HSM szállító által biztosított BYOK eszközzel – Importálja a KEK-t a cél HSM-be, és exportálja a KEK által védett célkulcsot.
  4. Importálja a védett célkulcsot az Azure Key Vault.

Az ügyfelek a HSM-szállító által biztosított BYOK eszközt és dokumentációt használják a 3. lépés végrehajtásához. Létrehoz egy kulcsátviteli blobot (egy ".byok" fájlt).

HSM-korlátozások

A meglévő HSM korlátozásokat alkalmazhat az általuk kezelt kulcsokra, beleértve a következőket:

  • Előfordulhat, hogy a HSM-et konfigurálni kell a kulcsburkolásalapú exportálás engedélyezéséhez
  • Előfordulhat, hogy a célkulcsot meg kell jelölni CKA_EXTRACTABLE a HSM számára az ellenőrzött exportálás engedélyezéséhez
  • Bizonyos esetekben előfordulhat, hogy a KEK-et és a burkolókulcsot CKA_TRUSTED kell megjelölni, ami lehetővé teszi a kulcsok HSM-ben való körbefuttatását.

A forrás HSM konfigurációja általában kívül esik ezen specifikáció hatókörén. A Microsoft elvárja, hogy a HSM szállítója készítsen dokumentációt a BYOK-eszközhöz, hogy tartalmazza az ilyen konfigurációs lépéseket.

Megjegyzés

Ezek közül a lépések közül több más felületen is elvégezhető, például Azure PowerShell és Azure Portal használatával. A Key Vault SDK-ban a megfelelő függvények használatával programozott módon is elvégezhetők.

KEK létrehozása

Az az keyvault key create paranccsal hozza létre a KEK-t az importálásra beállított kulcsműveletekkel. Jegyezze fel az alábbi parancsból visszaadott "kid" kulcsazonosítót.

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

Megjegyzés

A szolgáltatások különböző KEK-hosszokat támogatnak; Azure SQL például csak a 2048 vagy 3072 bájtos kulcshosszokat támogatja. A részletekért tekintse meg a szolgáltatás dokumentációját.

A KEK nyilvános kulcsának lekérése

Töltse le a KEK nyilvános kulcsrészét, és tárolja egy PEM-fájlban.

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

Kulcsátviteli blob létrehozása a BYOK-eszköz által biztosított HSM-szállítóval

Az ügyfél a BYOK által biztosított HSM Vendor eszközt fogja használni egy kulcsátadási blob létrehozásához (amely ".byok" fájlként van tárolva). A KEK nyilvános kulcs (.pem fájlként) az eszköz egyik bemenete lesz.

Kulcsátviteli blob

A Microsoft hosszú távon pKCS#11 CKM_RSA_AES_KEY_WRAP mechanizmussal szeretné átadni a célkulcsot az Azure Key Vault mivel ez a mechanizmus egyetlen blobot hoz létre, és ami még fontosabb, a köztes AES-kulcsot a két HSM kezeli, és garantáltan rövid ideig tart. Ez a mechanizmus jelenleg nem érhető el egyes HSM-ekben, de a célkulcs AES-kulc CKM_AES_KEY_WRAP_PAD csal való védelme és az AES-kulcs CKM_RSA_PKCS_OAEP való védelme egyenértékű blobot eredményez.

A célkulcs egyszerű szövege a kulcs típusától függ:

  • RSA-kulcs esetén az ASN.1 DER kódolású [RFC3447] titkos kulcs be van csomagolva a PKCS#8 fájlba [RFC5208]
  • EC-kulcs esetén az ASN.1 DER kódolású [RFC5915] titkos kulcs be van csomagolva a PKCS#8 fájlba [RFC5208]
  • Oktettkulcs esetén a kulcs nyers bájtja

A egyszerű szöveges kulcs bájtja ezután a CKM_RSA_AES_KEY_WRAP mechanizmussal lesz átalakítva:

  • A rendszer létrehoz és titkosít egy rövid élettartamú AES-kulcsot a burkoló RSA-kulccsal az RSA-OAEP és az SHA1 használatával.
  • A kódolt egyszerű szöveges kulcs az AES-kulccsal van titkosítva az AES-kulcsburkolás és a padding használatával.
  • A titkosított AES-kulcs és a titkosított egyszerű szöveges kulcs összefűzve jelenik meg a végső titkosítószöveg-blob létrehozásához.

Az átviteli blob formátuma JSON Web Encryption kompakt szerializálást (RFC7516) használ elsősorban a szükséges metaadatok szolgáltatásba való megfelelő visszafejtéséhez.

Ha CKM_RSA_AES_KEY_WRAP_PAD használ, az átviteli blob JSON-szerializálása a következő:

{
  "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 = a KEK kulcsazonosítója. Key Vault kulcsok esetében a következőképpen néz ki:https://ContosoKeyVaultHSM.vault.azure.net/keys/mykek/eba63d27e4e34e028839b53fac905621
  • alg = algoritmus.
  • dir = Közvetlen mód, azaz a hivatkozott gyermek közvetlenül védi a titkosítószöveget, amely a CKM_RSA_AES_KEY_WRAP
  • generator = egy információs mező, amely a BYOK eszköz nevét és verzióját, valamint a forrás HSM gyártóját és modelljét jelöli. Ezek az információk a hibaelhárításhoz és támogatáshoz használhatók.

A JSON-blob egy ".byok" kiterjesztésű fájlban van tárolva, így a Azure PowerShell/CLI-ügyfelek megfelelően kezelik azt az Add-AzKeyVaultKey (PSH) vagy az az keyvault key import (CLI) parancsok használatakor.

Kulcsátviteli blob feltöltése a HSM-key importálásához

Az ügyfél átviszi a kulcsátadási blobot (".byok" fájlt) egy online munkaállomásra, majd futtat egy az keyvault key import parancsot a blob új HSM-alapú kulcsként való importálásához a Key Vault.

RSA-kulcs importálásához használja a következő parancsot:

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

Ec-kulcs importálásához meg kell adnia a kulcs típusát és a görbe nevét.

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

A fenti parancs végrehajtása után a következőképpen küldi el a REST API-kérést:

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

Kérelemtörzs RSA-kulcs importálásakor:

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

Kérelem törzse EC-kulcs importálásakor:

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

A "key_hsm" érték a Base64 formátumban kódolt KeyTransferPackage-ContosoFirstHSMkey.byok teljes tartalma.

Hivatkozások

Következő lépések