Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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(NURimport), 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:
- Generieren Sie einen KEK.
- Rufen Sie den öffentlichen Schlüssel des KEK ab.
- 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.
- 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 Verweiskidschü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
- Schrittweise BYOK-Anweisungen: Importieren von HSM-geschützten Schlüsseln in Key Vault (BYOK)