Udostępnij za pośrednictwem


Specyfikacja używania własnego klucza

W tym dokumencie opisano specyfikacje dotyczące importowania kluczy chronionych przez moduł HSM z lokalnych modułów HSM klientów do usługi Key Vault.

Scenariusz

Klient usługi Key Vault chce bezpiecznie przenieść klucz z lokalnego modułu HSM spoza platformy Azure do modułu HSM opartego na usłudze Azure Key Vault. Proces importowania klucza wygenerowanego poza usługą Key Vault jest określany jako Bring Your Own Key (BYOK).

Poniżej przedstawiono wymagania:

  • Klucz, który ma zostać przeniesiony, nigdy nie istnieje poza modułem HSM w postaci zwykłego tekstu.
  • Poza modułem HSM klucz, który ma zostać przeniesiony, jest zawsze chroniony przez klucz przechowywany w module HSM usługi Azure Key Vault

Terminologia

Nazwa klucza Typ klucza Pochodzenie opis
Klucz wymiany kluczy (KEK) RSA Karta HSM usługi Azure Key Vault Para kluczy RSA z obsługą modułu HSM wygenerowana w usłudze Azure Key Vault
Klucz zawijania AES Moduł HSM dostawcy [efemeryczne] Klucz AES wygenerowany przez lokalny moduł HSM
Klucz docelowy RSA, EC, AES (tylko zarządzany moduł HSM) Moduł HSM dostawcy Klucz, który ma zostać przeniesiony do modułu HSM usługi Azure Key Vault

Klucz wymiany kluczy: klucz oparty na module HSM generowany przez klienta w magazynie kluczy, w którym zostanie zaimportowany klucz BYOK. Ten klucz KEK musi mieć następujące właściwości:

  • Jest to klucz RSA-HSM (4096-bitowy lub 3072-bitowy lub 2048-bitowy)
  • Będzie on miał stały key_ops (tylko "import"), który pozwoli na jego używanie tylko podczas BYOK
  • Musi znajdować się w tym samym magazynie, w którym zostanie zaimportowany klucz docelowy

Kroki użytkownika

Aby wykonać transfer klucza, użytkownik wykonuje następujące czynności:

  1. Generowanie klucza KEK.
  2. Pobierz klucz publiczny klucza KEK.
  3. Użycie dostawcy MODUŁU HSM dostarczonego przez narzędzie BYOK — zaimportuj klucz KEK do docelowego modułu HSM i eksportuje klucz docelowy chroniony przez klucz KEK.
  4. Zaimportuj chroniony klucz docelowy do usługi Azure Key Vault.

Klienci używają narzędzia BYOK i dokumentacji dostarczonej przez dostawcę modułu HSM, aby wykonać kroki 3. Tworzy obiekt blob transferu kluczy (plik ".byok").

Ograniczenia modułu HSM

Istniejący moduł HSM może stosować ograniczenia dotyczące klucza, którymi zarządzają, w tym:

  • Może być konieczne skonfigurowanie modułu HSM w celu zezwolenia na eksportowanie oparte na zawijanie kluczy
  • Może być konieczne oznaczenie klucza docelowego CKA_EXTRACTABLE dla modułu HSM w celu umożliwienia kontrolowanego eksportu
  • W niektórych przypadkach klucz KEK i klucz opakowujące mogą być oznaczone jako CKA_TRUSTED, co umożliwia jego użycie do opakowowania kluczy w module HSM.

Konfiguracja źródłowego modułu HSM jest ogólnie spoza zakresu tej specyfikacji. Firma Microsoft oczekuje, że dostawca modułu HSM utworzy dokumentację dołączącą do narzędzia BYOK, aby uwzględnił wszelkie takie kroki konfiguracji.

Uwaga

Kilka z tych kroków można wykonać przy użyciu innych interfejsów, takich jak program Azure PowerShell i witryna Azure Portal. Można je również wykonywać programowo przy użyciu równoważnych funkcji w zestawie SDK usługi Key Vault.

Generowanie klucza KEK

Użyj polecenia az keyvault key create, aby utworzyć klucz KEK z kluczami ustawionymi na import. Zanotuj identyfikator klucza "kid" zwrócony z poniższego polecenia.

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

Uwaga

Usługi obsługują różne długości klucza KEK; Na przykład usługa Azure SQL obsługuje tylko długości kluczy 2048 lub 3072 bajtów. Zapoznaj się z dokumentacją usługi, aby uzyskać szczegółowe informacje.

Pobieranie klucza publicznego klucza szyfrowania kluczy

Pobierz część klucza publicznego klucza kluczy publicznych i zapisz ją w pliku PEM.

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

Generowanie obiektu blob transferu kluczy przy użyciu dostawcy modułu HSM dostarczonego przez narzędzie BYOK

Klient użyje dostawcy modułu HSM dostarczonego przez narzędzie BYOK do utworzenia obiektu blob transferu kluczy (przechowywanego jako plik ".byok"). Klucz publiczny KEK (jako plik pem) będzie jednym z danych wejściowych tego narzędzia.

Obiekt blob transferu kluczy

W dłuższej perspektywie firma Microsoft chce użyć mechanizmu PKCS#11 CKM_RSA_AES_KEY_WRAP w celu przeniesienia klucza docelowego do usługi Azure Key Vault, ponieważ ten mechanizm tworzy pojedynczy obiekt blob, a co ważniejsze, pośredni klucz AES jest obsługiwany przez dwa moduły HSM i ma gwarancję efemerycznego. Ten mechanizm nie jest obecnie dostępny w niektórych modułach HSM, ale kombinacja ochrony klucza docelowego przy użyciu CKM_AES_KEY_WRAP_PAD przy użyciu klucza AES i ochrony klucza AES za pomocą CKM_RSA_PKCS_OAEP tworzy równoważny obiekt blob.

Klucz docelowy w postaci zwykłego tekstu zależy od typu klucza:

  • W przypadku klucza RSA kodowanie ASN.1 DER klucza prywatnego [RFC3447] opakowane w PKCS#8 [RFC5208]
  • W przypadku klucza EC kodowanie ASN.1 DER klucza prywatnego [RFC5915] opakowane w PKCS#8 [RFC5208]
  • W przypadku klucza oktetu nieprzetworzone bajty klucza

Bajty klucza zwykłego tekstu są następnie przekształcane przy użyciu mechanizmu CKM_RSA_AES_KEY_WRAP:

  • Efemeryczny klucz AES jest generowany i szyfrowany za pomocą opakowującego klucza RSA przy użyciu protokołu RSA-OAEP z algorytmem SHA1.
  • Zakodowany klucz zwykłego tekstu jest szyfrowany przy użyciu klucza AES przy użyciu zawijania klucza AES z wypełnieniem.
  • Zaszyfrowany klucz AES i zaszyfrowany klucz zwykłego tekstu są łączone w celu utworzenia końcowego obiektu blob szyfrowania.

Format transferu obiektu blob używa kompaktowej serializacji JSON Web Encryption (RFC7516) głównie jako pojazdu do dostarczania wymaganych metadanych do usługi w celu poprawnego odszyfrowywania.

Jeśli CKM_RSA_AES_KEY_WRAP_PAD jest używana, serializacja JSON obiektu blob transferu będzie:

{
  "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 = identyfikator klucza KEK. W przypadku kluczy usługi Key Vault wygląda następująco: https://ContosoKeyVaultHSM.vault.azure.net/keys/mykek/eba63d27e4e34e028839b53fac905621
  • alg = algorytm.
  • dir = tryb bezpośredni, czyli, przywoływany dzieciak jest używany do bezpośredniej ochrony szyfrowania, który jest dokładną reprezentacją CKM_RSA_AES_KEY_WRAP
  • generator = pole informacyjne, które określa nazwę i wersję narzędzia BYOK oraz producenta i modelu źródłowego modułu HSM. Te informacje są przeznaczone do użycia w rozwiązywaniu problemów i obsłudze technicznej.

Obiekt blob JSON jest przechowywany w pliku z rozszerzeniem "byok", dzięki czemu klienci programu Azure PowerShell/interfejsu wiersza polecenia traktują go poprawnie, gdy są używane polecenia "Add-AzKeyVaultKey" (PSH) lub "az keyvault key import" (CLI).

Przekazywanie obiektu blob transferu kluczy w celu zaimportowania klucza HSM

Klient przetransferuje plik obiektu blob transferu kluczy (".byok) na stację roboczą online, a następnie uruchomi polecenie az keyvault key import , aby zaimportować ten obiekt blob jako nowy klucz oparty na module HSM do usługi Key Vault.

Aby zaimportować klucz RSA, użyj następującego polecenia:

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

Aby zaimportować klucz EC, należy określić typ klucza i nazwę krzywej.

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 wykonaniu powyższego polecenia powoduje wysłanie żądania interfejsu API REST w następujący sposób:

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

Treść żądania podczas importowania klucza RSA:

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

Treść żądania podczas importowania klucza EC:

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

Wartość "key_hsm" to cała zawartość klucza KeyTransferPackage-ContosoFirstHSMkey.byok zakodowana w formacie Base64.

Informacje

Następne kroki