Bring Your Own Key (BYOK) の構成
シナリオ
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 に転送するキー |
Key Exchange Key (KEK): これは、BYOK (Bring Your Own Key) キーのインポートを目的とした、ユーザーが生成し、HSM によって保護されたキー・ボールト内のキーです。 KEK には、次のプロパティが必要です。
- 4096 ビット、3072 ビット、または 2048 ビットのサイズの RSA-HSM キーである必要があります。
- その主要な操作 (key_ops) は 'import' に制限されており、BYOK プロセス中にのみ使用できます。
- ターゲット キーがインポートされるのと同じコンテナー内に存在する必要があります。
ユーザーステップ
キー転送を実行するには:
- KEK を生成します。
- KEK の公開キーを取得します。
- BYOK ツールで提供される HSM ベンダーを使用して、KEK をターゲット HSM にインポートし、KEK によって保護されているターゲット キーをエクスポートします。
- 保護されたターゲット キーを Azure Key Vault にインポートします。
お客様は、手順 3. を完了するために、HSM ベンダーが提供する BYOK ツールとドキュメントを使用します。 キー転送 BLOB (".byok" ファイル) が生成されます。
HSM 制約
既存の HSM は、次のような、管理するキーに制約を適用できます。
- HSM は、キーラップベースのエクスポートを許可するように構成する必要がある場合があります
- HSM が制御されたエクスポートを許可するには、ターゲットキーを Cryptoki 属性 (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 公開キーを として使用します。Privacy-Enhanced メール (.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) が主に、正しい復号化のために必要なメタデータをサービスに配信するための手段として使用されます。