ハードウェアセキュリティモジュール (HSM) から別のHSMにキーをコピーする場合は、ソースHSMからキーをエクスポートしてから、そのキーをターゲットHSMにインポートできます。このトピックでは、2つのHSM間でキーをコピーする方法について説明します。
適当なHSMのタイプ
一般的な仮想セキュリティモジュール (GVSM) は、連邦情報処理標準 (FIPS) によって検証されます
シナリオ
2つのHSMが同じクラスターに属しておらず、自動キー同期がサポートされていないシナリオでは、キーをコピーできます。
2つのHSMが同じクラスターに属している場合、クラスター内のキーは自動的に同期されます。 キーをコピーする必要はありません。
前提条件
hsm_proxy HSMクライアントプロキシが起動されます。 詳細については、「クラウドハードウェアセキュリティモジュールの使用開始方法」をご参照ください。
ツール
key_mgmt_tool CLIが必要です。 詳細については、「key_mgmt_tool」をご参照ください。
このトピックで説明する操作を実行する前に、key_mgmt_toolを使用して暗号ユーザー (CU) にログオンしていることを確認してください。 次のサンプルコードは、必要なコマンドを示しています。
/opt/hsm/bin/key_mgmt_tool
を実際のパスに置き換えます。<yourCuUserName>
と<yourCuUserPassword>
をCUの実際のユーザー名とパスワードに置き換えます。
$/opt/hsm/bin/key_mgmt_tool
Command: loginHSM -u CU -s <yourCuUserName> -p <yourCuUserPassword>
対称キーのコピー
この例では、HSM aの対称キーがHSM Bにコピーされます。
対称鍵は、AES (Advanced Encryption Standard) アルゴリズムを使用し、長さが256ビットである。
ラッピングキーは、Rivest-Shamir-Adleman (RSA) アルゴリズムを使用し、長さは2,048ビットです。 公開指数は65537です。
対称キーのエクスポート中に、RSA_OAEP (SHA-256) ベースのラッピングおよびアンラッピングが使用されます。
HSM Bで、ラッピングキーを作成してエクスポートします。
genRSAKeyPair
コマンドを実行して、ラップキーとしてRSAキーを生成します。Command: genRSAKeyPair -m 2048 -e 65537 -l rsa_wrapping_key
パラメーター
説明
-m
キーの長さ。
-e
公開指数。 値は65537から2 ^ 31-1の範囲内の奇数でなければなりません。
-l
キータグ。
期待される出力:
Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS Cfm3GenerateKeyPair: public key handle: 33 private key handle: 32 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS
exportPubKey
コマンドを実行して、RSAキーの公開キーをエクスポートします。Command: exportPubKey -k 33 -out rsa_wrapping_key.pub
パラメーター
説明
-k
公開キーのID。
-アウト
エクスポートされた公開キーのファイル名。
期待される出力:
PEM formatted public key is written to rsa_wrapping_key.pub Cfm3ExportPubKey returned: 0x00 : HSM Return: SUCCESS
HSM Aで、HSM Bからエクスポートされた公開キーを使用して、コピーする対称キーをラップします。
genSymKey
コマンドを実行して対称キーを生成します。 対称キーがすでに存在する場合は、この手順をスキップします。Command: genSymKey -t 31 -s 32 -l mySymmetricKey
パラメーター
説明
-t
キータイプ。 有効な値:
16: GENERIC_SECRET
21: 3DES
31: AES
-s
キーの長さ。 単位はバイトです。
AESタイプのキーの場合、値を16、24、または32に設定します。
3DESタイプのキーの場合、値を24に設定します。
GENERIC_SECRET型のキーには、800以下の値を指定します。
-l
キータグ。
期待される出力:
Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Created. Key Handle: 29 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS
importPubKey
コマンドを実行して、HSM Bから取得した公開鍵をインポートします。Command: importPubKey -sess -l rsa_pub_key -f rsa_wrapping_key.pub
パラメーター
説明
-sess
キーがセッションキーであることを指定します。 セッションキーは、長期保存ではなく一時的な使用を目的としています。
-l
キータグ。
-f
公開鍵のファイル名。
期待される出力:
Cfm3CreatePublicKey returned: 0x00 : HSM Return: SUCCESS Public Key Handle: 28 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS
wrapKey
コマンドを実行して、公開キーを使用して対称キーをラップし、ラップされた対称キーをファイルに保存します。Command: wrapKey -k 29 -w 28 -m 8 -t 3 -out symmetric_key_wrapped_with_rsa.wrap
パラメーター
説明
-k
ラップするキーの識別子。
-w
ラッピングキーの識別子。
-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
8: RSA_OAEP (キーの長さは、Mod_len - 2 × Hash_len - 2の計算結果以下でなければならない。 単位はバイトです。
9: NIST_TDEA_WRAP (キーの長さは4の倍数でなければならない。)
10: AES_GCM
11: CLOUDHSM_AES_GCM
12: RSA_PKCS (キーの長さは、次式の計算結果以下である必要があります。Mod_len - 11。 単位はバイトです。
-t
ハッシュ型。 -mパラメーターを7または8に設定した場合、このパラメーターは必須です。 有効な値:
2 (デフォルト): SHA-1
3: SHA-256
4: SHA-384
5: SHA-512
6: SHA-224
-アウト
ラップされたキーを格納するファイルの名前。
期待される出力:
Cfm2WrapKey5 returned: 0x00 : HSM Return: SUCCESS Key Wrapped. Wrapped Key written to file "symmetric_key_wrapped_with_rsa.wrap" length 525
HSM Bで、
unWrapKey
コマンドを実行して、RSAキーの秘密キーを使用してラップされた対称キーをアンラップします。 次に、アンラップされた対称キーをHSM Bに保存します。Command: unWrapKey -f symmetric_key_wrapped_with_rsa.wrap -w 32 -m 8 -t 3
パラメーター
説明
-f
ラップされたキーのファイル名。
-w
ラッピングキーの識別子。
-m
ラッピング方法。 有効な値:
0: AES_CBC_PAD (-noheaderが指定されている場合、初期ベクトルが必要です。)
1: AES_CBC (-noheaderが指定されている場合、初期ベクトルが必要です。)
4: CLOUDHSM_AES_KEY_WRAP
5: NIST_AES_WRAP_NO_PAD
6 (デフォルト): NIST_AES_WRAP_PAD
7: RSA_AES
8: RSA_OAEP
9: NIST_TDEA_WRAP
10: AES_GCM
11: CLOUDHSM_AES_GCM
12: RSA_PKCS
-t
ハッシュ型。 -mパラメーターを7または8に設定した場合、このパラメーターは必須です。 有効な値:
2 (デフォルト): SHA-1
3: SHA-256
4: SHA-384
5: SHA-512
6: SHA-224
Cfm2UnWrapKey5 returned: 0x00 : HSM Return: SUCCESS Key Unwrapped. Key Handle: 31 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS
非対称キーのコピー
この例では、HSM Aの非対称キーがHSM Bにコピーされます。
非対称キーは、EC secp256k1キーである。
ラッピングキーは、RSAアルゴリズムを使用し、長さが2,048ビットである。 公開指数は65537です。
非対称キーのエクスポート中に、RSA_OAEP (SHA-256) ベースのラッピングとアンラッピングが使用されます。
HSM Bで、ラッピングキーを作成してエクスポートします。
genRSAKeyPair
コマンドを実行して、ラップキーとしてRSAキーを生成します。Command: genRSAKeyPair -m 2048 -e 65537 -l rsa_wrapping_key
パラメーター
説明
-m
キーの長さ。
-e
公開指数。 値は65537から2 ^ 31-1の範囲内の奇数でなければなりません。
-l
キータグ。
期待される出力:
Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS Cfm3GenerateKeyPair: public key handle: 33 private key handle: 32 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS
exportPubKey
コマンドを実行して、RSAキーの公開キーをエクスポートします。Command: exportPubKey -k 33 -out rsa_wrapping_key.pub
パラメーター
説明
-k
公開キーのID。
-アウト
エクスポートされた公開キーのファイル名。
期待される出力:
PEM formatted public key is written to rsa_wrapping_key.pub Cfm3ExportPubKey returned: 0x00 : HSM Return: SUCCESS
HSM Aで、HSM Bからエクスポートされた公開キーを使用して、コピーする非対称キーをラップします。
genECCKeyPair
コマンドを実行して、非対称キーを生成します。 非対称キーがすでに存在する場合は、この手順をスキップします。Command: genECCKeyPair -i 16 -l secp256k1_key
パラメーター
説明
-i
ECCカーブ。 有効な値: 1 ~ 16。
-l
キータグ。
期待される出力:
Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS Cfm3GenerateKeyPair: public key handle: 29 private key handle: 28 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS
importPubKey
コマンドを実行して、HSM Bから取得した公開鍵をインポートします。Command: importPubKey -sess -l rsa_pub_key -f rsa_wrapping_key.pub
パラメーター
説明
-sess
キーがセッションキーであることを指定します。 セッションキーは、長期保存ではなく一時的な使用を目的としています。
-l
キータグ。
-f
公開鍵のファイル名。
期待される出力:
Cfm3CreatePublicKey returned: 0x00 : HSM Return: SUCCESS Public Key Handle: 31 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS
wrapKey
コマンドを実行し、インポートした公開鍵を使用して非対称鍵の秘密鍵をラップします。Command: wrapKey -k 28 -w 31 -m 8 -t 3 -out secp256k1_key_wrapped_with_rsa.wrap
パラメーター
説明
-k
ラップするキーの識別子。
-w
ラッピングキーの識別子。
-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
8: RSA_OAEP (キーの長さは、Mod_len - 2 × Hash_len - 2の計算結果以下でなければならない。 単位はバイトです。
9: NIST_TDEA_WRAP (キーの長さは4の倍数でなければならない。)
10: AES_GCM
11: CLOUDHSM_AES_GCM
12: RSA_PKCS (キーの長さは、次式の計算結果以下である必要があります。Mod_len - 11。 単位はバイトです。
-t
ハッシュ型。 -mパラメーターを7または8に設定した場合、このパラメーターは必須です。 有効な値:
2 (デフォルト): SHA-1
3: SHA-256
4: SHA-384
5: SHA-512
6: SHA-224
-アウト
ラップされたキーを格納するファイルの名前。
期待される出力:
Cfm2WrapKey5 returned: 0x00 : HSM Return: SUCCESS Key Wrapped. Wrapped Key written to file "secp256k1_key_wrapped_with_rsa.wrap" length 515
exportPubKey
コマンドを実行して、非対称キーの公開キーをエクスポートします。Command: exportPubKey -k 29 -out secp256k1_key.pub
パラメーター
説明
-k
公開キーのID。
-アウト
エクスポートされた公開キーのファイル名。
期待される出力:
PEM formatted public key is written to secp256k1_key.pub Cfm3ExportPubKey returned: 0x00 : HSM Return: SUCCESS
HSM Bで、非対称キーのラップされた秘密キーをアンラップし、非対称キーの公開キーをインポートします。
unWrapKey
コマンドを実行して、RSAキーの秘密鍵を使用して、非対称キーのラップされた秘密鍵をアンラップします。Command: unWrapKey -f secp256k1_key_wrapped_with_rsa.wrap -w 32 -m 8 -t 3
パラメーター
説明
-f
ラップされたキーのファイル名。
-w
ラッピングキーの識別子。
-m
ラッピング方法。 有効な値:
0: AES_CBC_PAD (-noheaderが指定されている場合、初期ベクトルが必要です。)
1: AES_CBC (-noheaderが指定されている場合、初期ベクトルが必要です。)
4: CLOUDHSM_AES_KEY_WRAP
5: NIST_AES_WRAP_NO_PAD
6 (デフォルト): NIST_AES_WRAP_PAD
7: RSA_AES
8: RSA_OAEP
9: NIST_TDEA_WRAP
10: AES_GCM
11: CLOUDHSM_AES_GCM
12: RSA_PKCS
-t
ハッシュ型。 -mパラメーターを7または8に設定した場合、このパラメーターは必須です。 有効な値:
2 (デフォルト): SHA-1
3: SHA-256
4: SHA-384
5: SHA-512
6: SHA-224
期待される出力:
Cfm2UnWrapKey5 returned: 0x00 : HSM Return: SUCCESS Key Unwrapped. Key Handle: 27 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS
importPubKey
コマンドを実行して、非対称キーの公開キーをインポートします。Command: importPubKey -l secp256k1_key_pub_imported -f secp256k1_key.pub
期待される出力:
パラメーター
説明
-sess
キーがセッションキーであることを指定します。 セッションキーは、長期保存ではなく一時的な使用を目的としています。
-l
キータグ。
-f
公開鍵のファイル名。
Cfm3CreatePublicKey returned: 0x00 : HSM Return: SUCCESS Public Key Handle: 26 Cluster Status: Node id 0 status: 0x00000000 : HSM Return: SUCCESS