すべてのプロダクト
Search
ドキュメントセンター

Key Management Service:HSM間でキーをコピーする

最終更新日:Dec 18, 2024

ハードウェアセキュリティモジュール (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) ベースのラッピングおよびアンラッピングが使用されます。

  1. HSM Bで、ラッピングキーを作成してエクスポートします。

    1. 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
    2. 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
  2. HSM Aで、HSM Bからエクスポートされた公開キーを使用して、コピーする対称キーをラップします。

    1. 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
    2. 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
    3. 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
  3. 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) ベースのラッピングとアンラッピングが使用されます。

  1. HSM Bで、ラッピングキーを作成してエクスポートします。

    1. 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
    2. 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
  2. HSM Aで、HSM Bからエクスポートされた公開キーを使用して、コピーする非対称キーをラップします。

    1. 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
    2. 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
    3. 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
    4. 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
  3. HSM Bで、非対称キーのラップされた秘密キーをアンラップし、非対称キーの公開キーをインポートします。

    1. 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
    2. 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