あるハードウェアセキュリティモジュール (HSM) から別の HSM にキーをコピーするには、ソース HSM からキーをエクスポートし、宛先 HSM にインポートします。このトピックでは、2 つの HSM 間で対称キーと非対称キーをコピーする方法について説明します。
対象となる HSM タイプ
連邦情報処理標準 (FIPS) によって検証された General Virtual Security Modules (GVSM)。
手動でキーをコピーするケース
2 つの HSM が同じクラスターに属しておらず、自動キー同期がサポートされていない場合は、手動でキーをコピーします。
同じクラスター内のキーは自動的に同期されます。手動でのコピーは不要です。
前提条件
開始する前に、以下が準備できていることを確認してください。
hsm_proxyHSM クライアントプロキシが実行中であること。設定手順については、「Cloud Hardware Security Module の概要」をご参照ください。key_mgmt_toolCLI がインストールされていること。詳細については、「key_mgmt_tool」をご参照ください。
key_mgmt_tool へのログイン
操作を実行する前に、暗号化ユーザー (CU) としてログインします。
$/opt/hsm/bin/key_mgmt_tool
Command: loginHSM -u CU -s <yourCuUserName> -p <yourCuUserPassword>/opt/hsm/bin/key_mgmt_tool を実際のパスに置き換え、<yourCuUserName> と <yourCuUserPassword> をご利用の CU 認証情報に置き換えてください。
仕組み
コピープロセスでは、キーラッピングを使用して、HSM 間でキーマテリアルを安全に移動させます。
HSM B で、ラッピングキーとして RSA キーペアを生成し、その公開鍵をエクスポートします。
HSM A で、HSM B からの RSA 公開鍵をインポートし、それを使用してコピーしたいキーをラップ (暗号化) します。
ラップされたキーファイルを HSM B に転送し、そこで RSA 秘密鍵を使用してアンラップします。
非対称キーの場合は、公開鍵も別途エクスポートおよびインポートします。
対称キーのコピー
この例では、RSA-2048 ラッピングキーと RSA-OAEP (SHA-256) を使用して、AES-256 対称キーを HSM A から HSM B にコピーします。
ステップ 1:HSM B でのラッピングキーの作成とエクスポート
ラッピングキーとして使用する RSA キーペアを生成します。
パラメーター 説明 -mキー長 (ビット単位) -e公開指数。65537 から 2^31-1 までの奇数である必要があります。 -lキーラベル Command: genRSAKeyPair -m 2048 -e 65537 -l rsa_wrapping_key期待される出力:
Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS Cfm3GenerateKeyPair: public key handle: 33 private key handle: 32 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESSRSA 公開鍵をファイルにエクスポートします。
パラメーター 説明 -kエクスポートする公開鍵のハンドル -out出力ファイル名 Command: exportPubKey -k 33 -out rsa_wrapping_key.pub期待される出力:
PEM formatted public key is written to rsa_wrapping_key.pub Cfm3ExportPubKey returned: 0x00 : HSM Return: SUCCESS
rsa_wrapping_key.pub を HSM A の環境に転送します。
ステップ 2:HSM A での対称キーのラップ
対称キーを生成します。キーがすでに存在する場合は、このステップをスキップしてください。
パラメーター 説明 -tキータイプ: 16= GENERIC_SECRET、21= 3DES、31= AES-sキー長 (バイト単位)。AES:16、24、または 32。3DES:24。GENERIC_SECRET:800 以下 -lキーラベル Command: genSymKey -t 31 -s 32 -l mySymmetricKey期待される出力:
Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Created. Key Handle: 29 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESSHSM B からの RSA 公開鍵をセッションキーとしてインポートします。
パラメーター 説明 -sessキーをセッションキーとしてインポートし、一時的にのみ使用します -lキーラベル -fインポートする公開鍵ファイル Command: importPubKey -sess -l rsa_pub_key -f rsa_wrapping_key.pub期待される出力:
Cfm3CreatePublicKey returned: 0x00 : HSM Return: SUCCESS Public Key Handle: 28 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESSインポートした RSA 公開鍵を使用して対称キーをラップし、結果をファイルに保存します。
パラメーター 説明 -kラップするキーのハンドル -wラッピングキーのハンドル -mラッピングメソッド。 8= RSA_OAEP。サポートされているすべての値については、「ラッピングメソッドのリファレンス」をご参照ください。-tハッシュタイプ。 -mが7または8の場合に必要です。3= SHA-256。サポートされているすべての値については、「ハッシュタイプのリファレンス」をご参照ください。-outラップされたキーの出力ファイル名 Command: wrapKey -k 29 -w 28 -m 8 -t 3 -out symmetric_key_wrapped_with_rsa.wrap期待される出力:
Cfm2WrapKey5 returned: 0x00 : HSM Return: SUCCESS Key Wrapped. Wrapped Key written to file "symmetric_key_wrapped_with_rsa.wrap" length 525
symmetric_key_wrapped_with_rsa.wrap を HSM B の環境に転送します。
ステップ 3:HSM B での対称キーのアンラップ
HSM B の RSA 秘密鍵 (ステップ 1 のハンドル 32) を使用して、ラップされたキーファイルをアンラップします。
Command: unWrapKey -f symmetric_key_wrapped_with_rsa.wrap -w 32 -m 8 -t 3| パラメーター | 説明 |
|---|---|
-f | インポートするラップされたキーファイル |
-w | ラッピングキー (RSA 秘密鍵) のハンドル |
-m | ラッピングメソッド。wrapKey で使用した値と一致させる必要があります。 |
-t | ハッシュタイプ。wrapKey で使用した値と一致させる必要があります。 |
期待される出力:
Cfm2UnWrapKey5 returned: 0x00 : HSM Return: SUCCESS
Key Unwrapped. Key Handle: 31
Cluster Status:
Node id 0 status: 0x00000000 : HSM Return: SUCCESSこれで、対称キーはキーハンドル 31 で HSM B で利用可能になります。誤った再インポートを防ぐために、symmetric_key_wrapped_with_rsa.wrap にマークを付けるか、削除してください。
非対称キーのコピー
この例では、EC secp256k1 キーペアを HSM A から HSM B にコピーします。秘密鍵は RSA-2048 と RSA-OAEP (SHA-256) を使用してラップされます。公開鍵は別途エクスポートされます。
ステップ 1:HSM B でのラッピングキーの作成とエクスポート
「対称キーのコピーのステップ 1」と同じ genRSAKeyPair および exportPubKey コマンドを実行します。期待される出力は、公開鍵ハンドル 33 と秘密鍵ハンドル 32 です。
rsa_wrapping_key.pub を HSM A の環境に転送します。
ステップ 2:HSM A での秘密鍵のラップと公開鍵のエクスポート
EC キーペアを生成します。キーがすでに存在する場合は、このステップをスキップしてください。
パラメーター 説明 -iECC 曲線識別子。有効な値:1~16 -lキーラベル Command: genECCKeyPair -i 16 -l secp256k1_key期待される出力:
Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS Cfm3GenerateKeyPair: public key handle: 29 private key handle: 28 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESSHSM B からの RSA 公開鍵をセッションキーとしてインポートします。
Command: importPubKey -sess -l rsa_pub_key -f rsa_wrapping_key.pub期待される出力:
Public Key Handle: 31インポートした RSA 公開鍵を使用して EC 秘密鍵をラップします。
Command: wrapKey -k 28 -w 31 -m 8 -t 3 -out secp256k1_key_wrapped_with_rsa.wrap期待される出力:
Cfm2WrapKey5 returned: 0x00 : HSM Return: SUCCESS Key Wrapped. Wrapped Key written to file "secp256k1_key_wrapped_with_rsa.wrap" length 515EC 公開鍵をファイルにエクスポートします。
Command: exportPubKey -k 29 -out secp256k1_key.pub期待される出力:
PEM formatted public key is written to secp256k1_key.pub Cfm3ExportPubKey returned: 0x00 : HSM Return: SUCCESS
secp256k1_key_wrapped_with_rsa.wrap と secp256k1_key.pub を HSM B の環境に転送します。
ステップ 3:HSM B での秘密鍵のアンラップと公開鍵のインポート
HSM B の RSA 秘密鍵を使用して EC 秘密鍵をアンラップします。
Command: unWrapKey -f secp256k1_key_wrapped_with_rsa.wrap -w 32 -m 8 -t 3期待される出力:
Cfm2UnWrapKey5 returned: 0x00 : HSM Return: SUCCESS Key Unwrapped. Key Handle: 27 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESSEC 公開鍵をインポートします。
パラメーター 説明 -lキーラベル -fインポートする公開鍵ファイル Command: importPubKey -l secp256k1_key_pub_imported -f secp256k1_key.pub期待される出力:
Cfm3CreatePublicKey returned: 0x00 : HSM Return: SUCCESS Public Key Handle: 26 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS
これで、EC キーペアは HSM B で利用可能になります:秘密鍵ハンドル 27、公開鍵ハンドル 26。誤った再インポートを防ぐために、secp256k1_key_wrapped_with_rsa.wrap にマークを付けるか、削除してください。
ラッピングメソッドのリファレンス
wrapKey および unWrapKey の -m パラメーターでは、以下のラッピングメソッドがサポートされています:
| 値 | メソッド | 制約 |
|---|---|---|
0 | AES_CBC_PAD | -noheader が指定されている場合は、初期化ベクトルが必要です |
1 | AES_CBC | -noheader が指定されている場合は、初期化ベクトルが必要です |
4 | CLOUDHSM_AES_KEY_WRAP | — |
5 | NIST_AES_WRAP_NO_PAD | キー長は 8 バイトの倍数である必要があります |
6 (デフォルト) | NIST_AES_WRAP_PAD | — |
7 | RSA_AES | -t (ハッシュタイプ) が必要です |
8 | RSA_OAEP | -t (ハッシュタイプ) が必要です。キー長 ≤ Mod_len − 2 × Hash_len − 2 バイト |
9 | NIST_TDEA_WRAP | キー長は 4 バイトの倍数である必要があります |
10 | AES_GCM | — |
11 | CLOUDHSM_AES_GCM | — |
12 | RSA_PKCS | キー長 ≤ Mod_len − 11 バイト |
ハッシュタイプのリファレンス
-m が 7 (RSA_AES) または 8 (RSA_OAEP) の場合、-t パラメーターは必須です。
| 値 | ハッシュアルゴリズム |
|---|---|
2 (デフォルト) | SHA-1 |
3 | SHA-256 |
4 | SHA-384 |
5 | SHA-512 |
6 | SHA-224 |