KMU を使用して AWS CloudHSM キーをアンラップする
AWS CloudHSM key_mgmt_util ツールの unWrapKey コマンドは、ラップされた (暗号化された) 対称キーまたはプライベートキーをファイルから HSM にインポートします。key_mgmt_util の wrapKey コマンドでラップされた暗号化されたキーをインポートするように設計されていますが、他のツールでラップされたキーをアンラップするためにも使用できます。ただし、このような場合は、PKCS#11 または JCE ソフトウェアライブラリを使用して、キーをラップ解除することをお勧めします。
インポートされたキーは、AWS CloudHSM で生成されたキーのように動作します。ただし、OBJ_ATTR_LOCAL 属性の値は 0 であり、ローカルに生成されたものでないことを示しています。
キーをインポートしたら、必ずキーファイルをマークまたは削除してください。このコマンドでは、同じキーマテリアルを複数回インポートすることが禁止されません。その結果、異なるキーハンドルと同じキーマテリアルを持つ複数のキーにより、キーマテリアルの使用を追跡し、暗号化の制限を超えないようにすることが困難になります。
key_mgmt_util コマンドを実行する前に、 key_mgmt_util を起動し、Crypto User (CU) として HSM に ログインする 必要があります。
Syntax
unWrapKey -h unWrapKey -f
<key-file-name>
-w<wrapping-key-handle>
[-sess] [-min_srv<minimum-number-of-HSMs>
] [-timeout<number-of-seconds>
] [-aad<additional authenticated data filename>
] [-tag_size<tag size>
] [-iv_file<IV file>
] [-attest] [-m<wrapping-mechanism>
] [-t<hash-type>
] [-nex] [-u<user id list>
] [-m_value<number of users needed for approval>
] [-noheader] [-l<key-label>
] [-id<key-id>
] [-kt<key-type>
] [-kc<key-class
] [-i<unwrapping-IV>
]
例
これらの例では、unWrapKey を使用して、ラップされたキーをファイルから HSM にインポートする方法を示します。最初の例では、wrapKey key_mgmt_util コマンドでラップされたキーをアンラップしているため、ヘッダーがあります。2 番目の例では、key_mgmt_util の外部でラップされたため、ヘッダーがないキーをアンラップします。
例 : キーのラップ解除 (ヘッダー付き)
このコマンドでは、3DES 対称キーのラップされたコピーを HSM にインポートします。キーはラベル 6
が付いた AES キーでラップ解除されます。このキーは、3 DES キーのラップに使用されたキーと暗号的に同一です。この出力は、ファイルのキーがラップ解除されてインポートされたことと、インポートされたキーのハンドルが 29
であることを示しています。
Command:
unWrapKey -f 3DES.key -w 6 -m 4
Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS Key Unwrapped. Key Handle: 29 Cluster Error Status Node id 1 and err state 0x00000000 : HSM Return: SUCCESS Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
例 : キーのラップ解除 (ヘッダーなし)
このコマンドでは、3DES 対称キーのラップされたコピーを HSM にインポートします。キーはラベル 6
が付いた AES キーでラップ解除されます。このキーは、3 DES キーのラップに使用されたキーと暗号的に同一です。この 3DES キーは key_mgmt_util でラップされていないため、noheader
パラメータは、キー・ラベル (unwrapped3DES
)、キー・クラス (4
)、キー・タイプ (21
) など必要な付随パラメータとともに指定されます。この出力は、ファイルのキーがラップ解除されてインポートされたことと、インポートされたキーのハンドルが 8
であることを示しています。
Command:
unWrapKey -f 3DES.key -w 6 -noheader -l unwrapped3DES -kc 4 -kt 21 -m 4
Cfm3CreateUnwrapTemplate2 returned: 0x00 : HSM Return: SUCCESS Cfm2UnWrapWithTemplate3 returned: 0x00 : HSM Return: SUCCESS Key Unwrapped. Key Handle: 8 Cluster Error Status Node id 1 and err state 0x00000000 : HSM Return: SUCCESS Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
パラメータ
- -h
-
コマンドに関するヘルプを表示します。
必須: はい
- -f
-
ラップされたキーが含まれているファイルのパスと名前を指定します。
必須: はい
- -w
-
ラップキーを指定します。HSM の AES キーまたは RSA キーのキーハンドルを入力します。このパラメータは必須です。キーハンドルを見つけるには、findKey コマンドを使用します。
ラッピングキーを作成するには、genSymKey を使用して AES キー (タイプ 31) を生成するか、 genRSAKeyPair を使用して RSA キーペア (タイプ 0) を生成します。RSA キーペアを使用している場合は、必ず一方のキーでキーをラップし、もう一方のキーでアンラップしてください。キーをラッピングキーとして使用できることを確認するには、getAttribute を使用して、定数
OBJ_ATTR_WRAP
で表される262
属性の値を取得します。必須: はい
- -sess
-
現在のセッションにのみ存在するキーを作成します。セッション終了後、キーをリカバリすることはできません。
このパラメータは、別のキーを暗号化してからすばやく復号化するラッピングキーなど、キーが短時間だけ必要な場合に使用します。セッション終了後に復号する必要がある可能性のあるデータを暗号化するためにセッションキーを使用しないでください。
セッションキーを永続(トークン)キーに変更するには、setAttribute を使用します。
デフォルト: キーは永続的です。
必須:いいえ
- -min_srv
-
-timeout
パラメーターの値が期限切れになる前に、キーが同期される HSM の最小数を指定します。キーが割り当てられた時間内に指定された数のサーバーに同期されない場合は、作成されません。AWS CloudHSM は、どのキーもクラスターのすべての HSM に自動的に同期します。プロセスを高速化するため、
min_srv
の値をクラスターの HSM の数より少なく設定し、低いタイムアウト値を設定します。ただし、一部のリクエストでキーが生成されない場合があることに注意してください。デフォルト: 1
必須:いいえ
- -timeout
-
キーが
min_srv
パラメータで指定された HSM の数に同期されるのをコマンドが待機する時間 (秒単位) を指定します。このパラメータは、
min_srv
パラメータがコマンドでも使用されている場合にのみ有効です。デフォルト: タイムアウトなし。このコマンドは無期限に待機し、キーが最小数のサーバーと同期されている場合にのみ戻ります。
必須:いいえ
- -attest
クラスターを実行するファームウェアが改ざんされていないことを確認する整合性チェックを実行します。
デフォルト: 認証チェックなし。
必須:いいえ
- -nex
-
キーを抽出できなくなります。生成されたキーは HSM からエクスポートできません。
デフォルト: キーは抽出可能です。
必須:いいえ
- -m
-
ラップメカニズムを表す値。CloudHSM は、次のメカニズムをサポートしています。
メカニズム 値 AES_KEY_WRAP_PAD_PKCS5
4 NIST_AES_WRAP_NO_PAD
5 NIST_AES_WRAP_PAD
6 RSA_AES
7 RSA_OAEP
(最大データサイズについてはこのセクションの後半のメモを参照)8 AES_GCM
10 CLOUDHSM_AES_GCM
11 RSA_PKCS
(最大データサイズについてはこのセクションの後半のメモを参照)。今後の変更については、以下の注記「1」を参照してください。12 必須: はい
注記
RSA_OAEP
ラップメカニズムを使用する場合、ラップ可能な最大キーサイズは、次のように、RSA キーのモジュールと、指定したハッシュの長さによって決まります: 最大キーサイズ = modulusLengthInBytes-(2*hashLengthInBytes)-2。RSA_PKCS ラップメカニズムを使用する場合、ラップ可能な最大キーサイズは、RSA キーのモジュールによって次のように決まります: 最大キーサイズ = (modulusLengthInBytes -11)。
- -t
-
ハッシュアルゴリズム 値 SHA1
2 SHA256
3 SHA384
4 SHA512
5 SHA224
(RSA_AES
およびRSA_OAEP
メカニズムに対して有効)6 必須:いいえ
- -noheader
-
key_mgmt_util の外部でラップされたキーをラップ解除する場合は、このパラメータと他のすべての関連パラメータを指定する必要があります。
必須:いいえ
注記
このパラメータを指定する場合は、
-noheader
パラメータも指定する 必要があります。-
-I
ラップ解除されたキーに追加するラベルを指定します。
必須: はい
-
-kc
ラップ解除するキーのクラスを指定します。使用できる値は以下のとおりです。
3 = パブリックキーとプライベートキーのペアのプライベートキー
4: シークレット (対称) キー
必須: はい
-
-kt
ラップ解除するキーのタイプを指定します。使用できる値は以下のとおりです。
0 =
RSA
1 =
DSA
3 =
ECC
16 =
GENERIC_SECRET
21 =
DES3
31 =
AES
必須: はい
オプションで次の
-noheader
パラメータを指定することもできます。-
-id
ラップ解除されたキーに追加する ID。
必須:いいえ
-
-i
使用するラップ解除対象の初期ベクトル (IV)。
必須:いいえ
-
[1] NIST ガイダンスに従い、2023 年以降の FIPS モードのクラスターでは、これは許可されません。FIPS 以外のモードのクラスターでは、2023 年以降も許可されます。詳細については、「FIPS 140 コンプライアンス: 2024 年 メカニズムの非推奨」を参照してください。