このドキュメントでは、HSM で保護されたキーを顧客のオンプレミス HSM から Key Vault にインポートするための仕様について説明します。
シナリオ
Key Vault のお客様は、Azure の外部にあるオンプレミス HSM から、Azure Key Vault をサポートする HSM にキーを安全に転送したいと考えています。 Key Vault の外部で生成されたキーをインポートするプロセスは、Bring Your Own Key (BYOK) と呼ばれます。
要件は次のとおりです。
- 転送するキーは、プレーンテキスト形式の HSM の外部には存在しません。
- HSM の外部では、転送されるキーは、Azure Key Vault HSM に保持されているキーによって常に保護されます
用語
| キーの名称 | キーの種類 | 起源 | 説明 |
|---|---|---|---|
| キー交換キー (KEK) | RSA | Azure Key Vault HSM | Azure Key Vault で生成された HSM ベースの RSA キー ペア |
| ラッピングキー | AES(高度暗号化標準) | ベンダー HSM | オンプレミスの HSM によって生成された [エフェメラル] AES キー |
| ターゲット キー | RSA、EC、AES (Managed HSM のみ) | ベンダー HSM | Azure Key Vault HSM に転送するキー |
キー交換キー: BYOK キーがインポートされるキー コンテナーで顧客が生成する HSM ベースのキー。 この KEK には、次のプロパティが必要です。
- これは RSA-HSM キー (4096 ビットまたは 3072 ビットまたは 2048 ビット) です。
- 固定key_ops (
importのみ) があり、BYOK 中にのみ使用できます。 - ターゲット キーがインポートされるのと同じコンテナー内にある必要があります
ユーザーステップ
ユーザーは、キーの転送を実行するために次の手順を実行します。
- KEK を生成します。
- KEK の公開キーを取得します。
- HSM ベンダーから提供される BYOK ツールの使用 - KEK をターゲット HSM にインポートし、KEK によって保護されたターゲット キーをエクスポートします。
- 保護されたターゲット キーを 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 公開キー (.pem ファイルとして) は、このツールへの入力の 1 つです。
キー転送ブロブ
長期的には、Microsoft は PKCS#11 CKM_RSA_AES_KEY_WRAP メカニズムを使用してターゲット キーを Azure Key Vault に転送したいと考えています。これは、このメカニズムによって 1 つの BLOB が生成され、さらに重要なのは、中間 AES キーが 2 つの HSM によって処理され、一時的であることが保証されるためです。 現在、このメカニズムは一部の HSM では使用できませんが、AES キーを使用してターゲット キーとCKM_AES_KEY_WRAP_PADを保護し、CKM_RSA_PKCS_OAEPで AES キーを保護すると、同等の BLOB が生成されます。
ターゲット キーのプレーンテキストは、キーの種類によって異なります。
- RSA キーの場合、秘密キー ASN.1 DER エンコード [RFC3447] が PKCS#8 でラップされている [RFC5208]
- EC キーの場合、秘密キー ASN.1 DER エンコード [RFC5915] が PKCS#8 でラップされている [RFC5208]
- オクテット キーの場合、キーの生バイト
その後、プレーンテキスト キーのバイトは、CKM_RSA_AES_KEY_WRAP メカニズムを使用して変換されます。
- エフェメラル AES キーは生成され、その後、SHA1 を用いた RSA-OAEP 方式によってラップ用 RSA キーで暗号化されます。
- エンコードされたプレーンテキスト キーは、AES キーラップとパディングを使用して AES キーを使用して暗号化されます。
- 暗号化された AES キーと暗号化されたプレーンテキスト キーが連結され、最終的な暗号テキスト 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 = ダイレクト モード、つまり、参照されるキッドは、CKM_RSA_AES_KEY_WRAPの正確な表現である暗号テキストを直接保護するために使用されます。
- generator = BYOK ツールの名前とバージョン、およびソース HSM の製造元とモデルを示す情報フィールド。 この情報は、トラブルシューティングとサポートに使用することを目的としています。
JSON BLOB は拡張子が ".byok" のファイルに格納されるため、Azure PowerShell または CLI クライアントは、'Add-AzKeyVaultKey' (PSH) コマンドまたは 'az keyvault key import' (CLI) コマンドが使用されたときに正しく処理されます。
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 --byok-file --kty EC-HSM --curve-name "P-256" 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 の内容全体です。
リファレンス
次のステップ
- 詳細な BYOK 手順: HSM で保護されたキーを Key Vault にインポートする (BYOK)