Freigeben über


Bringen Sie Ihre eigene Schlüsselspezifikation mit

In diesem Dokument werden Spezifikationen für das Importieren von HSM-geschützten Schlüsseln aus den lokalen HSMs von Kunden in Key Vault beschrieben.

Szenario

Ein Key Vault-Kunde möchte einen Schlüssel sicher von ihrem lokalen HSM außerhalb von Azure in den HSM übertragen, der Azure Key Vault sichert. Dieser Prozess wird als "Bring Your Own Key" (BYOK) bezeichnet.

Es gelten die folgenden Anforderungen:

  • Der Schlüssel zum Übertragen ist nie außerhalb eines HSM in Nur-Text-Form vorhanden.
  • Außerhalb eines HSM wird der zu übertragende Schlüssel immer durch einen Schlüssel geschützt, der im Azure Key Vault HSM gespeichert ist.

Terminologie

Schlüsselname Schlüsseltyp Ursprung BESCHREIBUNG
Schlüsselaustauschschlüssel (Key Exchange Key, KEK) RSA Azure Key Vault-HSM Dies ist ein durch HSM gestütztes RSA-Schlüsselpaar, das in Azure Key Vault generiert wurde.
Schlüssel zum Packen Okt Hersteller-HSM Ein [ephemerer] Oct-Schlüssel, der von einem HSM vor Ort generiert wird
Zielschlüssel RSA, EC, oct (nur verwaltetes HSM) Hersteller-HSM Der Schlüssel für die Übertragung zum Azure Key Vault HSM

Schlüsselaustauschschlüssel: Ein HSM-gesicherter Schlüssel, den Sie im Schlüsseltresor generieren, in dem Sie den BYOK-Schlüssel importieren. Dieser KEK muss über die folgenden Eigenschaften verfügen:

  • Es handelt sich um einen RSA-HSM Schlüssel (4096-Bit, 3072-Bit oder 2048-Bit).
  • Es hat eine feste key_ops (NUR import), die Sie nur während BYOK verwenden können.
  • Er muss sich im selben Tresor befinden, in dem Sie den Zielschlüssel importieren.

Benutzerschritte

Zum Ausführen einer Schlüsselübertragung führt ein Benutzer die folgenden Schritte aus:

  1. Generieren Sie einen KEK.
  2. Rufen Sie den öffentlichen Schlüssel des KEK ab.
  3. Verwenden Sie das vom HSM-Anbieter bereitgestellte BYOK-Tool, um das KEK in das Ziel-HSM zu importieren und den Zielschlüssel zu exportieren, der durch den KEK geschützt ist.
  4. Importieren Sie den geschützten Zielschlüssel in Azure Key Vault.

Kunden verwenden das BYOK-Tool und die dokumentation des HSM-Anbieters, um Schritt 3 abzuschließen. Es erzeugt ein Schlüsselübertragungs-„blob“ (eine .byok-Datei).

HSM-Einschränkungen

Vorhandene HSMs können Einschränkungen auf von ihnen verwaltete Schlüssel anwenden, einschließlich:

  • Möglicherweise müssen Sie das HSM so konfigurieren, dass der Key-Wrap-Export zulässig ist.
  • Möglicherweise müssen Sie den Zielschlüssel als CKA_EXTRACTABLE für das HSM markieren, um den kontrollierten Export zuzulassen.
  • In einigen Fällen müssen Sie den KEK und den Verpackungsschlüssel möglicherweise als CKA_TRUSTED markieren, damit sie zum Verpacken von Schlüsseln im HSM verwendet werden können.

Die Konfiguration des Quell-HSM liegt in der Regel außerhalb des Umfangs dieser Spezifikation. Microsoft erwartet, dass der HSM-Anbieter eine Dokumentation mit dem BYOK-Tool erstellt, die derartige Konfigurationsschritte beinhaltet.

Hinweis

Sie können mehrere dieser Schritte ausführen, indem Sie andere Schnittstellen wie Azure PowerShell und Azure-Portal verwenden. Sie können diese Schritte auch programmgesteuert ausführen, indem Sie entsprechende Funktionen im Key Vault SDK verwenden.

Generieren des KEK

Verwenden Sie den Befehl "az keyvault key create", um einen KEK mit auf Import gesetzten Schlüsselvorgängen zu erstellen. Beachten Sie den Schlüsselbezeichner kid , der von diesem Befehl zurückgegeben wird.

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

Hinweis

Dienstleistungen unterstützen unterschiedliche KEK-Längen. Azure SQL unterstützt beispielsweise nur Schlüssellängen von 2048 oder 3072 Bytes. Weitere Informationen finden Sie in der Dokumentation für Ihren Dienst.

Abrufen des öffentlichen Schlüssels des KEK

Laden Sie den öffentlichen Schlüsselteil des KEK herunter, und speichern Sie ihn in einer PEM-Datei.

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

Generieren eines Schlüsselübertragungs-Blobs mithilfe des vom HSM-Anbieter bereitgestellten BYOK-Tools

Verwenden Sie das vom HSM-Anbieter bereitgestellte BYOK-Tool zum Erstellen eines Schlüsselübertragungs-Blobs (gespeichert als .byok Datei). Das Tool verwendet den öffentlichen KEK-Schlüssel als .pem Datei als eine seiner Eingaben.

Schlüsselübertragungs-BLOB

Microsoft plant, den PKCS#11 CKM_RSA_AES_KEY_WRAP Mechanismus zum Übertragen des Zielschlüssels in Azure Key Vault zu verwenden. Dieser Mechanismus erzeugt ein einzelnes Blob, und wichtiger ist, dass die beiden HSMs den zwischengeschalteten AES-Schlüssel behandeln und garantieren, dass es kurzlebig ist. Dieser Mechanismus ist derzeit in einigen HSMs nicht verfügbar, aber die Kombination aus dem Schutz des Zielschlüssels mithilfe von CKM_AES_KEY_WRAP_PAD mit einem AES-Schlüssel und dem Schutz des AES-Schlüssels mithilfe von CKM_RSA_PKCS_OAEP erstellt ein entsprechendes Blob.

Der Klartext des Zielschlüssels hängt vom Schlüsseltyp ab:

  • Bei RSA-Schlüsseln verwendet der private Schlüssel ASN.1 DER-Codierung [RFC3447], verpackt in PKCS#8 [RFC5208].
  • Bei EC-Schlüsseln verwendet der private Schlüssel ASN.1 DER-Codierung [RFC5915], verpackt in PKCS#8 [RFC5208].
  • Bei einem Oktettschlüssel verwendet der Schlüssel unformatierte Bytes.

Der Prozess transformiert die Bytes für den Nur-Text-Schlüssel mithilfe des CKM_RSA_AES_KEY_WRAP Mechanismus:

  • Der Prozess generiert einen kurzlebigen Oktschlüssel und verschlüsselt ihn mithilfe des umschließenden RSA-Schlüssels und RSA-OAEP mit SHA1.
  • Der Prozess verschlüsselt den codierten Klartextschlüssel mittels oct-Schlüssel und AES-Schlüssel-Verpackung mit Padding.
  • Der Prozess verkettet den verschlüsselten Okt-Schlüssel und den verschlüsselten Nur-Text-Schlüssel, um das endgültige Chiffretext-Blob zu erzeugen.

Das Übertragungsblobformat verwendet die kompakte „JSON Web Encryption“-Serialisierung (RFC7516) in erster Linie für die Übermittlung der erforderlichen Metadaten an den Dienst für die korrekte Entschlüsselung.

Wenn Sie CKM_RSA_AES_KEY_WRAP_PAD verwenden, lautet die JSON-Serialisierung des Übertragungsblobs:

{
  "schema_version": "1.0.0",
  "header":
  {
    "kid": "<kek-key-id>",
    "alg": "dir",
    "enc": "CKM_RSA_AES_KEY_WRAP"
  },
  "ciphertext":"BASE64URL(<ciphertext>)",
  "generator": "BYOK tool name and version; source HSM name and firmware version"
}

  • kid = Schlüsselbezeichner von KEK. Bei Key Vault-Schlüsseln sieht dies wie folgt aus: https://<vault-name>.vault.azure.net/keys/mykek/<key-version>.
  • alg = Algorithmus.
  • dir = Direkter Modus. Der Verweis kid schützt den Chiffretext direkt, bei dem es sich um eine genaue Darstellung von CKM_RSA_AES_KEY_WRAP handelt.
  • generator = ein Informationsfeld, das den Namen und die Version des BYOK-Tools und des HSM-Quellherstellers und -Modells angibt. Verwenden Sie diese Informationen für die Problembehandlung und den Support.

Speichern Sie das JSON-Blob in einer Datei mit einer .byok Erweiterung, sodass der Azure PowerShell- oder CLI-Client es richtig behandelt, wenn Sie die Add-AzKeyVaultKey Befehle (PowerShell) oder az keyvault key import (CLI) verwenden.

Hochladen des Schlüsselübertragungsblobs zum Importieren des HSM-Schlüssels

Um einen Schlüssel zu importieren, übertragen Sie den Key Transfer Blob (".byok"-Datei) auf eine Onlinearbeitsstation, und führen Sie dann den Befehl "az keyvault key import" aus. Mit diesem Befehl wird das Blob als neuer HSM-gesicherter Schlüssel in Key Vault importiert.

Verwenden Sie zum Importieren eines RSA-Schlüssels den folgenden Befehl:

az keyvault key import --vault-name <vault-name> --name <key-name> --byok-file KeyTransferPackage-<key-name>.byok --ops encrypt decrypt

Um einen EC-Schlüssel zu importieren, geben Sie den Schlüsseltyp und den Kurvennamen an.

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

Wenn Sie diesen Befehl ausführen, sendet er eine REST-API-Anforderung wie folgt:

PUT https://<vault-name>.vault.azure.net/keys/<key-name>?api-version=7.0

Anforderungstext beim Importieren eines RSA-Schlüssels:

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

Anforderungstext beim Importieren eines EC-Schlüssels:

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

Der key_hsm Wert ist der gesamte Inhalt der KeyTransferPackage-.byok-Datei<key-name>, codiert im Base64-Format.

Verweise

Nächste Schritte