Specifikace používání vlastního klíče

Tento dokument popisuje specifikace pro import klíčů chráněných modulem HSM z místních modulů HSM zákazníků do Key Vault.

Scenario

Zákazník Key Vault chce bezpečně přenést klíč ze svého místního modulu HSM mimo Azure do hsM zálohovacího Azure Key Vault. Proces importu klíče vygenerovaného mimo Key Vault se označuje jako byok (Bring Your Own Key).

Požadavky jsou následující:

  • Klíč, který se má přenést, nikdy neexistuje mimo HSM ve formátu prostého textu.
  • Klíč, který se má přenášet mimo HSM, je vždy chráněný klíčem uloženým ve službě Azure Key Vault HSM.

Terminologie

Název klíče Typ klíče Zdroj Popis
Klíč výměny klíčů (KEK) RSA Azure Key Vault HSM Pár klíčů RSA vygenerovaný v Azure Key Vault
Zalamování klíče AES Modul hardwarového zabezpečení (HSM) dodavatele [dočasný] klíč AES vygenerovaný místním modulem HSM
Cílový klíč RSA, EC, AES (pouze spravovaný HSM) Modul hardwarového zabezpečení (HSM) dodavatele Klíč, který se má přenést do Azure Key Vault HSM

Klíč výměny klíčů: Klíč založený na HSM, který zákazník vygeneruje v trezoru klíčů, do kterého se naimportuje klíč BYOK. Tento klíč KEK musí mít následující vlastnosti:

  • Jedná se o klíč RSA-HSM (4096 bitů, 3072 bitů nebo 2048 bitů).
  • Bude mít opravené key_ops (POUZE "import"), které umožní jeho použití POUZE během byok
  • Musí být ve stejném trezoru, do kterého se bude importovat cílový klíč.

Kroky pro uživatele

Aby uživatel mohl provést přenos klíče, provede následující kroky:

  1. Vygenerujte klíč KEK.
  2. Načte veřejný klíč klíče KEK.
  3. Použití modulu HSM od dodavatele, který poskytuje nástroj BYOK– Importujte klíč KEK do cílového HSM a exportujte cílový klíč chráněný klíčem KEK.
  4. Importujte chráněný cílový klíč do Azure Key Vault.

Zákazníci k dokončení kroků 3 používají nástroj BYOK a dokumentaci od dodavatele HSM. Vytvoří objekt blob pro přenos klíčů (soubor .byok).

Omezení HSM

Stávající modul hardwarového zabezpečení (HSM) může uplatňovat omezení pro klíč, který spravuje, včetně následujících:

  • HsM může být potřeba nakonfigurovat tak, aby umožňoval export na základě zalamování klíčů.
  • Cílový klíč může být potřeba označit CKA_EXTRACTABLE hsm, aby umožnil řízený export.
  • V některých případech může být potřeba označit klíč KEK a zalamovací klíč jako CKA_TRUSTED, což umožňuje jejich použití k zabalení klíčů v HSM.

Konfigurace zdrojového HSM je obecně mimo rozsah této specifikace. Microsoft očekává, že dodavatel HSM vytvoří dokumentaci k nástroji BYOK, která bude obsahovat všechny takové kroky konfigurace.

Poznámka

Některé z těchto kroků je možné provést pomocí jiných rozhraní, jako jsou Azure PowerShell a Azure Portal. Můžete je také provádět programově pomocí ekvivalentních funkcí v sadě Key Vault SDK.

Vygenerování KEK

Pomocí příkazu az keyvault key create vytvořte klíč KEK s klíčovými operacemi nastavenými na import. Poznamenejte si identifikátor klíče "kid" vrácený následujícím příkazem.

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

Poznámka

Služby podporují různé délky KEK; Azure SQL například podporuje pouze délku klíče 2048 nebo 3072 bajtů. Konkrétní informace najdete v dokumentaci ke službě.

Načtení veřejného klíče klíče KEK

Stáhněte část klíče k klíči z veřejného klíče a uložte ji do souboru PEM.

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

Generování objektu blob pro přenos klíčů pomocí nástroje BYOK od dodavatele HSM

Zákazník použije k vytvoření objektu blob pro přenos klíče (uloženého jako soubor .byok) od dodavatele HSM, který poskytuje nástroj BYOK. Veřejný klíč KEK (jako soubor .pem) bude jedním ze vstupů tohoto nástroje.

Přenos klíče – objekt blob

Z dlouhodobého hlediska by Microsoft chtěl k přenosu cílového klíče do Azure Key Vault používat CKM_RSA_AES_KEY_WRAP mechanismus PKCS#11, protože tento mechanismus vytváří jeden objekt blob a co je důležitější, zprostředkující klíč AES obsluhují tyto dva moduly hardwarového zabezpečení a zaručuje, že bude dočasný. Tento mechanismus není v současné době k dispozici v některých modulech HSM, ale kombinace ochrany cílového klíče s CKM_AES_KEY_WRAP_PAD použití klíče AES a ochrany klíče AES pomocí CKM_RSA_PKCS_OAEP vytvoří ekvivalentní objekt blob.

Prostý text cílového klíče závisí na typu klíče:

  • Pro klíč RSA privátní klíč ASN.1 DER kódování [RFC3447] zabalený v PKCS#8 [RFC5208]
  • Pro klíč EC je privátní klíč KÓDOVÁNÍ ASN.1 DER [RFC5915] zabalený v PKCS#8 [RFC5208]
  • U oktetového klíče nezpracované bajty klíče

Bajty klíče ve formátu prostého textu se pak transformují pomocí mechanismu CKM_RSA_AES_KEY_WRAP:

  • Dočasný klíč AES se vygeneruje a zašifruje zabaleným klíčem RSA pomocí RSA-OAEP s SHA1.
  • Kódovaný klíč ve formátu prostého textu je šifrovaný pomocí klíče AES pomocí zalamování klíčů AES s odsazením.
  • Šifrovaný klíč AES a šifrovaný klíč ve formátu prostého textu se zřetězením vytvoří konečný objekt blob šifrovacího textu.

Formát objektu blob přenosu používá kompaktní serializaci JSON Web Encryption (RFC7516) primárně jako prostředek pro doručování požadovaných metadat službě ke správnému dešifrování.

Pokud se použije CKM_RSA_AES_KEY_WRAP_PAD, serializace json objektu blob přenosu bude následující:

{
  "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 = identifikátor klíče KEK. U Key Vault klíčů to vypadá takto:https://ContosoKeyVaultHSM.vault.azure.net/keys/mykek/eba63d27e4e34e028839b53fac905621
  • alg = algoritmus.
  • dir = přímý režim, to znamená, že odkazované dítě se používá k přímé ochraně šifrového textu, který je přesnou reprezentací CKM_RSA_AES_KEY_WRAP
  • generator = informační pole, které označuje název a verzi nástroje BYOK a výrobce a model zdrojového HSM. Tyto informace jsou určené k použití při řešení potíží a podpoře.

Objekt blob JSON je uložený v souboru s příponou .byok, aby ho klienti Azure PowerShell/CLI při použití příkazů Add-AzKeyVaultKey (PSH) nebo az keyvault key import (CLI) správně zacházeli.

Nahrání objektu blob pro přenos klíče k importu klíče HSM

Zákazník přenese objekt blob pro přenos klíče (soubor .byok) na online pracovní stanici a pak spustí příkaz az keyvault key import, který tento objekt blob naimportuje jako nový klíč založený na HSM do Key Vault.

Pokud chcete importovat klíč RSA, použijte tento příkaz:

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

Pokud chcete importovat klíč EC, musíte zadat typ klíče a název křivky.

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

Po provedení výše uvedeného příkazu se odešle požadavek rozhraní REST API následujícím způsobem:

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

Text požadavku při importu klíče RSA:

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

Text požadavku při importu klíče EC:

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

Hodnota "key_hsm" je celý obsah souboru KeyTransferPackage-ContosoFirstHSMkey.byok zakódovaný ve formátu Base64.

Reference

Další kroky