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 Vaultba történő importálásának specifikációit ismerteti.

Eset

Egy Key Vault-ügyfél biztonságosan át szeretne vinni egy kulcsot a helyszíni HSM-ből az Azure-on kívülről a HSM-hez, amely az Azure Key Vaultot védi. A Key Vaulton kívül létrehozott kulcs importálásának folyamatát általában a Saját kulcs használata (BYOK) néven említik.

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

  • Az átvitt kulcs soha nem létezik egyszerű szöveges formában egy 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 Kulcs típusa Forrás Description
Kulcscserekulcs (KEK) RSA Azure Key Vault HSM Az Azure Key Vaultban létrehozott HSM-alapú RSA-kulcspár
Körbefuttatási kulcs AES SzállítóI HSM A HSM által a helyszíni HSM által létrehozott [rövid élettartamú] AES-kulcs
Célkulcs RSA, EC, AES (csak felügyelt HSM) SzállítóI HSM Az Azure Key Vault HSM-be átvitt kulcs

Kulcscserekulcs: Egy HSM-alapú kulcs, amelyet az ügyfél a BYOK-kulcs importálását tartalmazó kulcstartóban hoz létre. Ennek a KEK-nek a következő tulajdonságokkal kell rendelkeznie:

  • RsA-HSM-kulcs (4096 bites, 3072 bites vagy 2048 bites)
  • Rögzített key_ops (CSAK "importálás"), amely lehetővé teszi, hogy CSAK a BYOK során használja
  • 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 BYOK-eszköz által biztosított HSM-szállító használata – Importálja a KEK-et 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 Vaultba.

Az ügyfelek a HSM szállítója á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 kulcsra, beleértve a következőket:

  • Előfordulhat, hogy a HSM-et konfigurálni kell a kulcsburkoláson alapuló exportálás engedélyezéséhez
  • Lehetséges, hogy a célkulcsot CKA_EXTRACTABLE kell megjelölni a HSM számára a szabályozott exportálás engedélyezéséhez
  • Bizonyos esetekben előfordulhat, hogy a KEK-t és a burkolókulcsot CKA_TRUSTED kell megjelölni. Ez lehetővé teszi, hogy kulcsokat tördeljen a HSM-ben.

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 a BYOK-eszközhöz mellékelt dokumentációt, amely tartalmazza az ilyen konfigurációs lépéseket.

Megjegyzés

Az alábbiakban ismertetett 1., 2. és 4. lépés más felületeken is végrehajtható, például az Azure PowerShell és az Azure Portal használatával. A Key Vault SDK-ban az egyenértékű függvények használatával programozott módon is végrehajthatók.

1. lépés: KEK létrehozása

Az az keyvault key create paranccsal hozza létre az importálásra beállított kulcsműveletekkel rendelkező KEK-t. 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

2. lépés: A KEK nyilvános kulcsának lekérése

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

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

3. lépés: 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özzel fog létrehozni egy kulcsátviteli blobot (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 a PKCS#11 CKM_RSA_AES_KEY_WRAP mechanizmust szeretné használni a célkulcs Azure Key Vaultba való átviteléhez, 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 élettartamú. Ez a mechanizmus jelenleg nem érhető el egyes HSM-ekben, de a célkulcs és a CKM_AES_KEY_WRAP_PAD AES-kulccsal 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 a PKCS#8 fájlba van csomagolva [RFC5208]
  • EC-kulcs esetén az ASN.1 DER kódolású [RFC5915] titkos kulcs a PKCS#8 fájlba van csomagolva [RFC5208]
  • Oktettkulcs esetén a kulcs nyers bájtja

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

  • A rövid élettartamú AES-kulcs a burkoló RSA-kulccsal jön létre és titkosítva 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 kitöltés használatával.
  • A titkosított AES-kulcs és a titkosított egyszerű szöveges kulcs összefűzve hozza létre a végső titkosítószöveg-blobot.

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

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

{
  "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én 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 rejtjelszö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 hibaelhárításhoz és támogatáshoz használhatók.

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

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

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

RSA-kulcs importálásához használja az alábbi parancsot:

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

Az 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érelem törzse 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 KeyTransferPackage-ContosoFirstHSMkey.byok teljes tartalma, base64 formátumban kódolva.

Hivatkozások

Következő lépések