次の方法で共有


独自のキー仕様を持ち込む

このドキュメントでは、HSM で保護されたキーを顧客のオンプレミス HSM から Key Vault にインポートするための仕様について説明します。

シナリオ

Key Vault のお客様は、Azure の外部にあるオンプレミス HSM から、Azure Key Vault をサポートする HSM にキーを安全に転送したいと考えています。 このプロセスは Bring Your Own Key (BYOK) と呼ばれます。

これには次の要件があります。

  • 転送するキーは、プレーン テキスト形式の HSM の外部には存在しません。
  • HSM の外部では、転送するキーは、Azure Key Vault HSM に保持されているキーによって常に保護されます。

用語

キーの名称 キーの種類 起源 説明
キー交換キー (KEK) RSA Azure Key Vault HSM Azure Key Vault で生成された HSM ベースの RSA キー ペア
ラッピングキー 10 月 ベンダー HSM オンプレミスの HSM によって生成された一時的な oct キー
ターゲット キー RSA、EC、oct(マネージドHSMのみ) ベンダー HSM Azure Key Vault HSM に転送するキー

Key Exchange Key: BYOK キーをインポートするキー コンテナーで生成する HSM ベースのキー。 この KEK には、次のプロパティが必要です。

  • これは RSA-HSM キー (4096 ビット、3072 ビット、または 2048 ビット) です。
  • 使用できる固定のkey_ops (importのみ) は、BYOK中のみです。
  • ターゲット キーをインポートするのと同じコンテナー内に存在する必要があります。

ユーザーステップ

キー転送を実行するには、ユーザーは次の手順を実行します。

  1. KEK を生成します。
  2. KEK の公開キーを取得します。
  3. HSM ベンダーが提供する BYOK ツールを使用して、KEK をターゲット HSM にインポートし、KEK によって保護されているターゲット キーをエクスポートします。
  4. 保護されたターゲット キーを Azure Key Vault にインポートします。

お客様は、手順 3 を完了するために、HSM ベンダーが提供する BYOK ツールとドキュメントを使用します。 キー転送 BLOB ( .byok ファイル) が生成されます。

HSM 制約

既存の HSM は、次のような、管理するキーに制約を適用する場合があります。

  • キーラップベースのエクスポートを許可するように HSM を構成することが必要になる場合があります。
  • 制御されたエクスポートを許可するには、ターゲット キーを HSM のCKA_EXTRACTABLEとしてマークする必要がある場合があります。
  • 場合によっては、KEK とラップ キーを CKA_TRUSTED としてマークする必要があります。これにより、HSM でキーをラップするために使用できます。

ソース HSM の構成は、通常、この仕様の範囲外です。 Microsoft では、HSM ベンダーが BYOK ツールに付属するドキュメントを作成し、そのような構成手順を含める必要があります。

これらの手順のいくつかを実行するには、Azure PowerShell や Azure portal などの他のインターフェイスを使用します。 これらの手順は、Key Vault SDK で同等の関数を使用してプログラムで実行することもできます。

KEK の生成

az keyvault key create コマンドを使用して、インポートするキー操作が設定された KEK を作成します。 このコマンドから返 kid キー識別子に注意してください。

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

サービスでは、さまざまな KEK の長さがサポートされます。 たとえば、Azure SQL では、 2048 バイトまたは 3072 バイトのキー長のみがサポートされます。 詳細については、サービスのドキュメントを参照してください。

KEK の公開キーを取得する

KEK の公開キー部分をダウンロードし、PEM ファイルに格納します。

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

HSM ベンダーが提供する BYOK ツールを使用してキー転送 BLOB を生成する

HSM ベンダーが提供する BYOK ツールを使用して、キー転送 BLOB を作成し、.byok ファイルとして格納します。 このツールは、KEK 公開キーを入力の 1 つとして .pem ファイルとして受け取ります。

キー転送ブロブ

Microsoft では、PKCS#11 CKM_RSA_AES_KEY_WRAP メカニズムを使用して、ターゲット キーを Azure Key Vault に転送する予定です。 このメカニズムにより、1 つの BLOB が生成されます。さらに重要なのは、2 つの HSM が中間 AES キーを処理し、それが一時的であることを保証することです。 現在、このメカニズムは一部の HSM では使用できませんが、CKM_AES_KEY_WRAP_PADと AES キーを使用してターゲット キーを保護し、CKM_RSA_PKCS_OAEPを使用して AES キーを保護すると、同等の BLOB が作成されます。

ターゲット キーのプレーンテキストは、キーの種類によって異なります。

  • RSA キーの場合、秘密キーは PKCS#8 [RFC5208] でラップされた ASN.1 DER エンコード [RFC3447] を使用します。
  • EC キーの場合、秘密キーは PKCS#8 [RFC5208] でラップされた ASN.1 DER エンコード [RFC5915] を使用します。
  • オクテット キーの場合、キーは生バイトを使用します。

このプロセスでは、CKM_RSA_AES_KEY_WRAP メカニズムを使用してプレーンテキスト キーのバイトを変換します。

  • このプロセスでは、一時的な OCT キーが生成され、ラップ用 RSA キーと RSA-OAEP (SHA1) を使用して暗号化されます。
  • このプロセスでは、oct キーと AES キー ラップと Padding を使用して、エンコードされたプレーンテキスト キーが暗号化されます。
  • このプロセスでは、暗号化された oct キーと暗号化されたプレーンテキスト キーを連結して、最終的な暗号テキスト BLOB を生成します。

転送 BLOB 形式では、JSON Web Encryption コンパクト シリアル化 (RFC7516) が主に、正しい復号化のために必要なメタデータをサービスに配信するための手段として使用されます。

CKM_RSA_AES_KEY_WRAP_PADを使用する場合、転送 BLOB の JSON シリアル化は次のようになります。

{
  "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 = KEK のキー識別子。 Key Vault キーの場合、次のようになります。 https://ContosoKeyVaultHSM.vault.azure.net/keys/mykek/eba63d27e4e34e028839b53fac905621
  • alg = アルゴリズム。
  • dir = ダイレクト モード。 参照される kid は、CKM_RSA_AES_KEY_WRAPの正確な表現である暗号テキストを直接保護します。
  • generator = BYOK ツールの名前とバージョン、およびソース HSM の製造元とモデルを示す情報フィールド。 この情報は、トラブルシューティングとサポートに使用します。

.byok (PowerShell) または Add-AzKeyVaultKey (CLI) コマンドを使用するときに Azure PowerShell または CLI クライアントが正しく処理できるように、az keyvault key import拡張子を持つファイルに JSON BLOB を格納します。

HSM キーをインポートするためにキー転送 BLOB をアップロードする

キーをインポートするには、キー転送 BLOB (".byok" ファイル) をオンライン ワークステーションに転送し、 az keyvault key import コマンドを実行します。 このコマンドは、BLOB を新しい HSM ベースのキーとして Key Vault にインポートします。

RSA キーをインポートするには、次のコマンドを使用します。

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

EC キーをインポートするには、キーの種類と曲線名を指定します。

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

このコマンドを実行すると、次のように REST API 要求が送信されます。

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

RSA キーをインポートするときの要求本文:

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

EC キーをインポートするときの要求本文:

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

key_hsm値は、Base64 形式でエンコードされた KeyTransferPackage-ContosoFirstHSMkey.byok ファイルの内容全体です。

リファレンス

次のステップ