AWS CloudHSM KMU를 사용하여 일반 텍스트 대칭 키 가져오기
AWS CloudHSM key_mgmt_util 도구의 imSymKey 명령을 사용해서 파일에서 하드웨어 보안 모듈(HSM)로 대칭 키의 일반 텍스트 복사본을 가져옵니다. 이 명령을 사용하여 HSM 외부의 메서드를 사용하여 생성하는 키, 그리고 HSM에서 내보낸 키(예: exSymKey 명령이 파일에 기록하는 키)를 가져올 수 있습니다.
가져오기 프로세스 중에 imSymKey는 사용자가 선택하는 AES 키(래핑 키)를 사용하여 가져올 키를 래핑(암호화)한 후 언래핑(암호 해독)합니다. 하지만 imSymKey는 일반 텍스트 키를 포함하는 파일에서만 유효합니다. 암호화된 키를 내보내고 가져오려면 wrapKey 및 unWrapKey 명령을 사용합니다.
또한 imSymKey 명령은 대칭 키만 가져옵니다. 퍼블릭 키를 가져오려면 importPubKey를 사용합니다. 프라이빗 키를 가져오려면 importPrivateKey 또는 wrapKey를 사용합니다.
참고
대칭 키나 프라이빗 키를 사용하여 암호로 보호된 PEM 키를 가져올 수 없습니다.
가져온 키는 HSM에서 생성된 키와 거의 비슷하게 동작합니다. 하지만 OBJ_ATTR_LOCAL 속성 값은 0입니다. 이는 객체가 로컬에서 생성되지 않았음을 의미합니다. 대칭 키를 가져올 때 다음 명령을 사용하여 공유할 수 있습니다. 키를 가져온 후 cloudhsm_mgmt_util의 shareKey
명령을 사용하여 키를 공유할 수 있습니다.
imSymKey -l aesShared -t 31 -f kms.key -w 3296 -u 5
키를 가져온 후, 키 파일을 마킹 또는 삭제해야 합니다. 이 명령은 동일한 키 자료를 여러 번 가져오도록 허용합니다. 키 핸들은 고유하지만 키 자료는 동일한 키가 여러 개 있을 경우 키 자료의 사용을 추적하기 어렵고 암호화 한도를 초과하는 것을 방지할 수 없습니다.
key_mgmt_util 명령을 실행하기 전에 먼저 key_mgmt_util을 시작하고 HSM에 Crypto User(CU)로 로그인해야 합니다.
구문
imSymKey -h imSymKey -f <key-file> -w <wrapping-key-handle> -t <key-type> -l <label> [-id <key-ID>] [-sess] [-wk <wrapping-key-file> ] [-attest] [-min_srv <minimum-number-of-servers>] [-timeout <number-of-seconds> ] [-u <user-ids>]
예시
다음 예제에서는 imSymKey를 사용하여 대칭 키를 HSM으로 가져오는 방법을 보여줍니다.
예 : AES 대칭 키 가져오기
이 예제에서는 imSymKey를 사용하여 AES 대칭 키를 HSM으로 가져옵니다.
첫 번째 명령은 OpenSSL을 사용하여 무작위 256비트 AES 대칭 키를 생성합니다. 이 명령은 aes256.key
파일에 키를 저장합니다.
$
openssl rand -out aes256-forImport.key 32
두 번째 명령은 imSymKey를 사용하여 AES 키를 aes256.key
파일에서 HSM으로 가져옵니다. 이 명령은 키 20(HSM의 AES 키)을 래핑 키로 사용하며 imported
레이블을 지정합니다. ID와 달리, 레이블은 클러스터에서 고유할 필요는 없습니다. -t
(유형) 파라미터 값은 AES를 나타내는 31
입니다.
출력은 파일의 키를 래핑 및 언래핑하고 HSM으로 가져와 키 핸들 262180을 할당한 것을 보여 줍니다.
Command:
imSymKey -f aes256.key -w 20 -t 31 -l imported
Cfm3WrapHostKey returned: 0x00 : HSM Return: SUCCESS Cfm3CreateUnwrapTemplate returned: 0x00 : HSM Return: SUCCESS Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Unwrapped. Key Handle: 262180 Cluster Error Status Node id 1 and err state 0x00000000 : HSM Return: SUCCESS Node id 0 and err state 0x00000000 : HSM Return: SUCCESS Node id 2 and err state 0x00000000 : HSM Return: SUCCESS
다음 명령은 getAttribute를 사용하여 새로 가져온 키의 OBJ_ATTR_LOCAL 속성(attribute 355)을 가져와 attr_262180
파일에 기록합니다.
Command:
getAttribute -o 262180 -a 355 -out attributes/attr_262180
Attributes dumped into attributes/attr_262180_imported file Cfm3GetAttribute returned: 0x00 : HSM Return: SUCCESS
속성 파일을 검사할 때 OBJ_ATTR_LOCAL
속성 값이 0인 것을 알 수 있습니다. 이는 키 자료가 HSM에서 생성되지 않았음을 나타냅니다.
$
cat attributes/attr_262180_local
OBJ_ATTR_LOCAL 0x00000000
예 : 클러스터 간 대칭 키 이동하기
이 예제는 exSymKey 및 imSymKey를 사용하여 클러스터 간에 일반 텍스트 AES 키를 이동하는 방법을 보여줍니다. 이러한 프로세스를 사용하여 양쪽 클러스터의 HSM에 존재하는 AES 래핑을 생성할 수 있습니다. 공유되는 래핑 키가 생성되면 wrapKey 및 unWrapKey를 사용하여 암호화된 키를 클러스터 사이에서 이동할 수 있습니다.
이 작업을 수행하는 CU 사용자는 양쪽 클러스터의 HSM에 로그인할 수 있는 권한이 있어야 합니다.
첫 번째 명령은 exSymKey를 사용하여 키 14(32비트 AES 키)를 클러스터 1에서 aes.key
파일로 내보냅니다. 이 명령은 키 6, 즉 클러스터 1의 HSM에 대한 AES 키를 래핑 키로 사용합니다.
Command:
exSymKey -k 14 -w 6 -out aes.key
Cfm3WrapKey returned: 0x00 : HSM Return: SUCCESS Cfm3UnWrapHostKey returned: 0x00 : HSM Return: SUCCESS Wrapped Symmetric Key written to file "aes.key"
그런 다음 사용자가 클러스터 2의 key_mgmt_util에 로그인하고 imSymKey 명령을 실행하여 aes.key
파일의 키를 클러스터 2의 HSM으로 가져옵니다. 이 명령은 키 252152, 즉 클러스터 2의 HSM에 대한 AES 키를 래핑 키로 사용합니다.
exSymKey 및 imSymKey가 사용하는 래핑 키는 대상 키를 래핑했다가 즉시 언래핑하므로 서로 다른 클러스터의 래핑 키가 같을 필요는 없습니다.
출력은 성공적으로 키를 클러스터 2로 가져와 키 핸들 21을 할당한 것을 보여줍니다.
Command:
imSymKey -f aes.key -w 262152 -t 31 -l xcluster
Cfm3WrapHostKey returned: 0x00 : HSM Return: SUCCESS Cfm3CreateUnwrapTemplate returned: 0x00 : HSM Return: SUCCESS Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Unwrapped. Key Handle: 21 Cluster Error Status Node id 1 and err state 0x00000000 : HSM Return: SUCCESS Node id 0 and err state 0x00000000 : HSM Return: SUCCESS Node id 2 and err state 0x00000000 : HSM Return: SUCCESS
클러스터 1의 키 14와 클러스터 2의 키 21이 동일한 키 자료를 가지는 것을 증명하려면 각 키의 키 확인 값(KCV)을 가져옵니다. KCV 값이 동일한 경우 키 자료가 동일한 것입니다.
다음 명령은 클러스터 1에서 getAttribute를 사용하여 키 14의 KCV 속성(속성 371) 값을 attr_14_kcv
파일에 기록합니다. 그런 다음 cat 명령을 사용하여 attr_14_kcv
파일의 내용을 가져옵니다.
Command:
getAttribute -o 14 -a 371 -out attr_14_kcv
Attributes dumped into attr_14_kcv file
$
cat attr_14_kcv
OBJ_ATTR_KCV 0xc33cbd
이 비슷한 명령은 클러스터 2에서 setAttribute를 사용하여 키 21의 KCV 속성(속성 371) 값을 attr_21_kcv
파일에 기록합니다. 그런 다음 cat 명령을 사용하여 attr_21_kcv
파일의 내용을 가져옵니다.
Command:
getAttribute -o 21 -a 371 -out attr_21_kcv
Attributes dumped into attr_21_kcv file
$
cat attr_21_kcv
OBJ_ATTR_KCV 0xc33cbd
출력은 두 키의 KCV 값이 같다는 것을 보여 줍니다. 즉, 키 자료가 동일함을 증명합니다.
같은 키 자료가 양쪽 클러스터의 HSM에 존재하므로 이제 평문 키를 노출시키지 않고 클러스터 사이에서 암호화된 키를 공유할 수 있습니다. 예를 들어 wrapKey
명령을 래핑 키 14와 함께 사용하여 암호화된 키를 클러스터 1에서 내보낸 후, unWrapKey
를 래핑 키 21과 함께 암호화된 키를 클러스터 2로 가져올 수 있습니다.
예 : 세션 키 가져오기
이 명령은 imSymKey의 -sess
파라미터를 사용하여 현재 세션에서만 유효한 192비트 Triple DES 키를 가져옵니다.
이 명령은 -f
파라미터를 사용하여 가져올 키를 포함하는 파일을 지정하고, -t
파라미터를 사용하여 키 유형을 지정하고, -w
파라미터를 사용하여 래핑 키를 지정합니다. 이 명령은 -l
파라미터를 사용하여 키를 범주화하는 레이블을 지정하고 -id
파라미터를 사용하여 키의 고유한 표시 ID를 생성합니다. 또한 -attest
파라미터를 사용하여 키를 가져오는 펌웨어를 확인합니다.
출력은 성공적으로 키를 래핑 및 언래핑하고 HSM으로 가져와 키 핸들 37을 할당한 것을 보여 줍니다. 또한 증명 점검을 통과했습니다. 이는 펌웨어가 변조되지 않았음을 나타냅니다.
Command:
imSymKey -f 3des192.key -w 6 -t 21 -l temp -id test01 -sess -attest
Cfm3WrapHostKey returned: 0x00 : HSM Return: SUCCESS Cfm3CreateUnwrapTemplate returned: 0x00 : HSM Return: SUCCESS Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Unwrapped. Key Handle: 37 Attestation Check : [PASS] Cluster Error Status Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
다음에는 getAttribute 또는 findKey 명령을 사용하여 새로 가져온 키의 속성을 확인할 수 있습니다. 다음 명령은 findKey를 사용하여 키 37에 명령에서 지정한 유형, 레이블 및 ID가 있으며 이 키가 세션 키임을 확인합니다. 출력의 5행에 표시된 대로, findKey는 모든 속성과 일치하는 유일한 키가 키 37임을 보고합니다.
Command:
findKey -t 21 -l temp -id test01 -sess 1
Total number of keys present 1 number of keys matched from start index 0::0 37 Cluster Error Status Node id 1 and err state 0x00000000 : HSM Return: SUCCESS Node id 0 and err state 0x00000000 : HSM Return: SUCCESS Node id 2 and err state 0x00000000 : HSM Return: SUCCESS Cfm3FindKey returned: 0x00 : HSM Return: SUCCESS
파라미터
- -attest
클러스터가 실행되는 펌웨어가 변조되지 않았는지 확인하는 무결성 점검을 실행합니다.
기본값: 증명 점검은 없음.
필수 항목 여부: 아니요
- -f
-
가져올 키를 포함하는 파일을 지정합니다.
파일은 지정된 길이의 AES 또는 Triple DES 키의 평문 사본을 포함해야 합니다. RC4 및 DES 키는 FIPS 모드 HSM에서 유효하지 않습니다.
-
AES: 16, 24 또는 32바이트
-
Triple DES(3DES): 24바이트
필수 항목 여부: 예
-
- -h
-
명령에 대한 도움말을 표시합니다.
필수 항목 여부: 예
- -id
-
키에 대해 사용자 정의 식별자를 지정합니다. 클러스터에 고유한 문자열을 입력합니다. 기본값은 빈 문자열입니다.
기본값: ID 값이 없음.
필수 항목 여부: 아니요
- -l
-
키에 대해 사용자 정의 레이블을 지정합니다. 문자열을 입력합니다.
키 식별을 지원하는 임의의 문구를 사용할 수 있습니다. 레이블이 고유할 필요는 없으므로 이를 그룹에 사용하여 키를 분류할 수 있습니다.
필수 항목 여부: 예
- -min_srv
-
-timeout
파라미터의 값이 만료되기 전에 키가 동기화되는 HSM의 최소 개수를 지정합니다. 할당된 시간에 지정된 서버 개수에 키가 동기화되지 않으면 키가 생성되지 않습니다.AWS CloudHSM은 자동으로 모든 키를 클러스터의 각 HSM과 동기화합니다. 이 과정을 더 빠르게 진행하려면
min_srv
의 값을 클러스터의 HSM 개수보다 적게 설정하고 낮은 제한 시간 값을 설정합니다. 그러나 일부 요청은 키를 생성하지 않을 수 있음을 주의하십시오.기본값: 1
필수 항목 여부: 아니요
- -sess
-
현재 세션에만 존재하는 키를 생성합니다. 세션이 종료된 후에는 키를 복구할 수 없습니다.
다른 키를 암호화한 후 다시 재빨리 암호를 해독하는 래핑 키와 같이 키가 일시적으로 필요한 경우 이 파라미터를 사용합니다. 세션 종료 후에 암호를 해독해야 할 수 있는 데이터를 암호화하는 데 세션 키를 사용해서는 안 됩니다.
세션 키를 영구적인 (토큰) 키로 변경하려면 setAttribute를 사용합니다.
기본값: 키는 영구적입니다.
필수 항목 여부: 아니요
- -timeout
-
명령이
min_srv
파라미터에서 지정한 HSM의 수에 키가 동기화하기를 기다리는 시간(단위: 초)을 지정합니다.이 파라미터는 명령에서
min_srv
파라미터도 사용되는 경우에만 유효합니다.기본값: 제한 시간 없음. 명령은 무기한 기다리다가 최소 서버 개수에 키가 동기화될 때만 복귀합니다.
필수 항목 여부: 아니요
- -t
-
대칭 키의 유형을 지정합니다. 키 유형을 나타내는 상수를 입력합니다. 예를 들어 AES 키를 생성하려면
-t 31
을 입력합니다.유효한 값:
-
21: Triple DES(3DES)
-
31: AES
필수 항목 여부: 예
-
- -u
-
가져오는 키를 지정된 사용자와 공유합니다. 이 파라미터는 다른 HSM CU(Crypto User)에게 암호화 작업에 이 키를 사용할 수 있는 권한을 부여합니다.
ID 한 개를 입력하거나, -u
5,6
과 같이 쉼표로 구분된 HSM 사용자 ID 목록을 입력합니다. 현재 사용자의 HSM 사용자 ID는 포함하지 마십시오. ID를 찾으려면 cloudhsm_mgmt_util 명령줄 도구에서 listUsers 명령을 사용하거나, key_mgmt_util 명령줄 도구에서 listUsers 명령을 사용합니다.필수 항목 여부: 아니요
- -w
-
래핑 키의 키 핸들을 지정합니다. 이 파라미터는 필수 사항입니다. 키 핸들을 찾으려면 findKey 명령을 사용하십시오.
래핑 키는 가져오기 절차 도중 키를 암호화("래핑")한 후 암호 해독("언래핑")하는 데 사용되는 HSM의 키입니다. AES 키만 래핑 키로 사용할 수 있습니다.
임의의 AES 키(모든 크기)를 래핑 키로 사용할 수 있습니다. 래핑 키는 대상 키를 래핑했다 즉시 언래핑하므로 세션 전용 AES 키를 래핑 키로 사용할 수 있습니다. 키를 래핑 키로 사용할 수 있는지 여부를 확인하려면 getAttribute를 사용하여
OBJ_ATTR_WRAP
속성(262)의 값을 가져옵니다. 래핑 키를 생성하려면 genSymKey를 사용하여 AES 키(유형 31)를 생성합니다.-wk
파라미터를 사용하여 외부 래핑 키를 지정할 경우,-w
래핑 키가 가져오는 키를 언래핑하는 데 사용되고 래핑에는 사용되지 않습니다.참고
키 4는 지원되지 않는 내부 키입니다. 래핑 키로 생성하고 관리하는 AES 키를 사용하는 것이 좋습니다.
필수 항목 여부: 예
- -wk
-
지정된 파일의 AES 키를 사용하여 가져오는 키를 래핑합니다. 평문 AES 키를 포함하는 파일의 경로 및 이름을 입력합니다.
이 파라미터를 포함할 경우, imSymKey는
-wk
파일의 키를 사용하여 가져올 키를 래핑하고,-w
파라미터로 지정된 HSM의 키를 사용하여 언래핑합니다.-w
및-wk
파라미터 값은 동일한 평문 키로 확인되어야 합니다.기본값: 래핑 키 또는 HSM을 사용하여 언래핑
필수 항목 여부: 아니요