Condividi tramite


Specifica per BYOK (Bring Your Own Key)

Questo documento descrive le specifiche per l'importazione di chiavi protette da HSM dagli HSM on-premises dei clienti in Key Vault.

Sceneggiatura

Un cliente di Key Vault vuole trasferire in modo sicuro una chiave dal modulo di protezione hardware locale all'esterno di Azure, nel modulo di protezione hardware che esegue il backup di Azure Key Vault. Questo processo è denominato BRING Your Own Key (BYOK).

Di seguito vengono indicati i requisiti per questo parametro:

  • La chiave da trasferire non esiste mai all'esterno di un HSM in formato testo normale.
  • Al di fuori di un HSM, la chiave da trasferire è sempre protetta da una chiave detenuta nell'HSM di Azure Key Vault.

Terminologia

Nome chiave Tipo di chiave Origine Descrizione
Chiave di scambio delle chiavi (KEK) RSA HSM di Azure Key Vault Coppia di chiavi RSA supportata da HSM generata in Azure Key Vault
Tasto di avvolgimento Ottobre Modulo di sicurezza hardware del fornitore Chiave oct [temporanea] generata dal modulo di sicurezza hardware in sede
Chiave di destinazione RSA, EC, oct (solo modulo di protezione hardware gestito) Modulo di sicurezza hardware del fornitore Chiave da trasferire nel modulo di protezione hardware di Azure Key Vault

Chiave di scambio delle chiavi: una chiave supportata dal modulo di protezione hardware generata nel deposito delle chiavi in cui si importa la chiave BYOK. Questa KEK deve avere le proprietà seguenti:

  • Si tratta di una chiave RSA-HSM (4096 bit, 3072 bit o 2048 bit).
  • Ha un valore fisso key_ops (SOLO import), che è possibile usare solo durante la modalità BYOK.
  • Deve trovarsi nella stessa cassaforte in cui si importa la chiave di destinazione.

Passaggi utente

Per eseguire un trasferimento di chiavi, un utente esegue la procedura seguente:

  1. Generare KEK.
  2. Recupera la chiave pubblica del KEK.
  3. Usare lo strumento BYOK fornito dal fornitore del modulo di protezione hardware per importare la KEK nel modulo di protezione hardware di destinazione ed esportare la chiave di destinazione protetta dalla KEK.
  4. Importare la chiave di destinazione protetta in Azure Key Vault.

I clienti usano lo strumento BYOK e la documentazione forniti dal fornitore del modulo di protezione hardware per completare il passaggio 3. Produce un BLOB di trasferimento delle chiavi (un .byok file).

Vincoli HSM

I moduli di protezione hardware esistenti possono applicare vincoli alle chiavi gestite, tra cui:

  • Potrebbe essere necessario configurare il modulo di protezione hardware per consentire l'esportazione basata sull'incapsulamento delle chiavi.
  • Potrebbe essere necessario contrassegnare la chiave di destinazione come CKA_EXTRACTABLE nel modulo di sicurezza hardware per consentire l'esportazione controllata.
  • In alcuni casi, potrebbe essere necessario contrassegnare la chiave KEK e la chiave di wrapping come CKA_TRUSTED, il che consente di usarla per wrappare le chiavi nel modulo di protezione hardware.

La configurazione del modulo di protezione hardware (HSM) di origine è in genere esterna all'ambito di questa specifica. Microsoft si aspetta che il fornitore dell'HSM produca la documentazione associata al loro strumento BYOK per includere tali passaggi di configurazione.

Annotazioni

È possibile eseguire diversi di questi passaggi usando altre interfacce, ad esempio Azure PowerShell e il portale di Azure. È anche possibile eseguire questi passaggi a livello di codice usando funzioni equivalenti in Key Vault SDK.

Generare KEK

Usare il comando az keyvault key create per creare una chiave kek con operazioni chiave impostate per l'importazione. Si noti l'identificatore kid di chiave restituito da questo comando.

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

Annotazioni

I servizi supportano lunghezze kek diverse. Azure SQL, ad esempio, supporta solo lunghezze di chiave di 2048 o 3072 byte. Per informazioni specifiche, vedere la documentazione relativa al servizio.

Recupera la chiave pubblica del KEK

Scaricare la sezione chiave pubblica del KEK e archiviarla in un file PEM.

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

Generare un blob di trasferimento delle chiavi usando lo strumento BYOK fornito dal fornitore di HSM

Usare lo strumento BYOK fornito dal fornitore del modulo di protezione hardware per creare un BLOB di trasferimento delle chiavi (archiviato come .byok file). Lo strumento accetta la chiave pubblica KEK come .pem file come uno dei relativi input.

BLOB di trasferimento delle chiavi

Microsoft prevede di usare il meccanismo di CKM_RSA_AES_KEY_WRAP PKCS#11 per trasferire la chiave di destinazione in Azure Key Vault. Questo meccanismo produce un singolo BLOB e, più importante ancora, i due HSM gestiscono la chiave AES intermedia e garantiscono che sia effimera. Questo meccanismo non è attualmente disponibile in alcuni moduli di sicurezza hardware, ma la combinazione della protezione della chiave di destinazione tramite CKM_AES_KEY_WRAP_PAD con una chiave AES e la protezione della chiave AES tramite CKM_RSA_PKCS_OAEP crea un BLOB equivalente.

Il testo non crittografato della chiave di destinazione dipende dal tipo di chiave:

  • Per una chiave RSA, la chiave privata utilizza la codifica ASN.1 DER [RFC3447] avvolta in PKCS#8 [RFC5208].
  • Per una chiave EC, la chiave privata utilizza la codifica ASN.1 DER [RFC5915] incapsulata in PKCS#8 [RFC5208].
  • Per una chiave a otto bit, la chiave utilizza byte grezzi.

Il processo trasforma i byte per la chiave di testo non crittografato usando il meccanismo di CKM_RSA_AES_KEY_WRAP:

  • Il processo genera una chiave ott temporanea e la crittografa usando la chiave RSA di wrapping e RSA-OAEP con SHA1.
  • Il processo crittografa la chiave in testo semplice codificata usando la chiave oct e il wrapping della chiave AES con padding.
  • Il processo concatena la chiave ottagonale crittografata e la chiave in chiaro crittografata per produrre il BLOB di testo crittografato finale.

Il formato BLOB di trasferimento usa principalmente la serializzazione compatta JSON Web Encryption (RFC7516) come veicolo per il recapito dei metadati necessari al servizio per la corretta decrittazione.

Se si usa CKM_RSA_AES_KEY_WRAP_PAD, la serializzazione JSON del BLOB di trasferimento è:

{
  "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 = identificatore di chiave KEK. Per le chiavi di Key Vault, si presenta così: https://ContosoKeyVaultHSM.vault.azure.net/keys/mykek/eba63d27e4e34e028839b53fac905621
  • alg = algoritmo.
  • dir = Modalità diretta. Il riferimento kid protegge direttamente il testo crittografato, che è una rappresentazione accurata di CKM_RSA_AES_KEY_WRAP.
  • generator = un campo informativo che indica il nome e la versione dello strumento BYOK e il produttore e il modello del modulo di protezione hardware di origine. Usare queste informazioni per la risoluzione dei problemi e il supporto.

Archiviare il BLOB JSON in un file con un'estensione .byok in modo che il client di Azure PowerShell o dell'interfaccia della riga di comando lo consideri correttamente quando si usano i Add-AzKeyVaultKey comandi (PowerShell) o az keyvault key import (INTERFACCIA della riga di comando).

Caricare il BLOB di trasferimento della chiave per importare la chiave del modulo di protezione hardware

Per importare una chiave, trasferire il file BLOB di trasferimento chiavi (".byok") in una workstation online e quindi eseguire il comando az keyvault key import . Questo comando importa il blob come nuova chiave supportata da HSM in Key Vault.

Per importare una chiave RSA, usare il comando seguente:

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

Per importare una chiave EC, specificare il tipo di chiave e il nome della curva.

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

Quando si esegue questo comando, invia una richiesta API REST come indicato di seguito:

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

Corpo della richiesta durante l'importazione di una chiave RSA:

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

Corpo della richiesta durante l'importazione di una chiave EC:

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

Il key_hsm valore è l'intero contenuto del file KeyTransferPackage-ContosoFirstHSMkey.byok, codificato in formato Base64.

Riferimenti

Passaggi successivi