기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
3단계: 키 구성 요소 암호화
퍼블릭 키 및 가져오기 토큰을 다운로드한 후에는 다운로드한 퍼블릭 키와 지정한 래핑 알고리즘을 사용하여 키 구성 요소를 암호화합니다. 퍼블릭 키 또는 가져오기 토큰을 교체해야 하거나 래핑 알고리즘을 변경해야 하는 경우 새 퍼블릭 키와 가져오기 토큰을 다운로드해야 합니다. AWS KMS가 지원하는 퍼블릭 키 및 래핑 알고리즘에 대한 자세한 내용은 래핑 퍼블릭 키 사양 선택 및 래핑 알고리즘 선택을 참조하세요.
키 구성 요소는 이진 형식이어야 합니다. 자세한 내용은 가져온 키 구성 요소에 대한 요구 사항섹션을 참조하세요.
비대칭 키 쌍의 경우 프라이빗 키만 암호화하고 가져옵니다. AWS KMS가 프라이빗 키에서 퍼블릭 키를 파생합니다.
ECC_NIST_P521 키 구성 요소, RSA_2048 퍼블릭 래핑 키 사양, RSAES_OAEP_SHA_* 래핑 알고리즘과 같은 조합은 지원되지 않습니다.
ECC_NIST_P521 키 구성 요소를 RSA_2048 퍼블릭 래핑 키로 직접 래핑할 수는 없습니다. 더 큰 래핑 키나 RSA_AES_KEY_WRAP_SHA_* 래핑 알고리즘을 사용하세요.
RSA_AES_KEY_WRAP_SHA_256 및 RSA_AES_KEY_WRAP_SHA_1 래핑 알고리즘은 중국 리전에서 지원되지 않습니다.
일반적으로 하드웨어 보안 모듈(HSM)이나 키 관리 시스템에서 내보낼 때 키 구성 요소를 암호화합니다. 이진 형식으로 키 구성 요소를 내보내는 방법은 HSM 또는 키 관리 시스템에 대한 문서를 참조하십시오. OpenSSL을 이용해 개념 증명 데모를 제공하는 다음 섹션을 참조할 수도 있습니다.
키 구성 요소를 암호화하는 경우 퍼블릭 키와 가져오기 토큰을 다운로드할 때 지정한 동일한 래핑 알고리즘을 사용합니다. 지정한 래핑 알고리즘을 찾으려면 관련 GetParametersForImport 요청에 대한 CloudTrail 로그 이벤트를 참조하세요.
테스트용 키 구성 요소 생성
다음 OpenSSL 명령은 테스트를 위해 지원되는 각 유형의 키 구성 요소를 생성합니다. 이러한 예시는 테스트 및 개념 증명 데모용으로만 제공됩니다. 프로덕션 시스템의 경우 보안이 보안 모듈이나 키 관리 시스템과 같은 보다 안전한 방법을 사용하여 키 구성 요소를 생성합니다.
비대칭 키 쌍의 프라이빗 키를 DER로 인코딩된 형식으로 변환하려면 키 구성 요소 생성 명령을 다음 openssl pkcs8
명령으로 파이프합니다. topk8
파라미터는 OpenSSL이 프라이빗 키를 입력으로 받아 PKCS#8 형식의 키를 반환하도록 지시합니다. (기본 동작은 반대입니다.)
openssl pkcs8 -topk8 -outform der -nocrypt
다음 명령은 지원되는 각 유형에 대한 테스트 키 구성 요소를 생성합니다.
-
대칭 암호화 키(32바이트)
이 명령은 256비트 대칭 키(32바이트 임의 문자열)를 생성하여 PlaintextKeyMaterial.bin
파일에 저장합니다. 이 키 구성 요소를 인코딩할 필요는 없습니다.
openssl rand -out PlaintextKeyMaterial.bin 32
중국 리전에서만 128비트 대칭 키(16바이트 임의 문자열)를 생성해야 합니다.
openssl rand -out PlaintextKeyMaterial.bin 16
-
HMAC 키
이 명령은 지정된 크기의 임의 바이트 문자열을 생성합니다. 이 키 구성 요소를 인코딩할 필요는 없습니다.
HMAC 키의 길이는 KMS 키의 키 사양에 정의된 길이와 일치해야 합니다. 예를 들어 KMS 키가 HMAC_384인 경우 384비트(48바이트) 키를 가져와야 합니다.
openssl rand -out HMAC_224_PlaintextKey.bin 28
openssl rand -out HMAC_256_PlaintextKey.bin 32
openssl rand -out HMAC_384_PlaintextKey.bin 48
openssl rand -out HMAC_512_PlaintextKey.bin 64
-
RSA 프라이빗 키
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:2048 | openssl pkcs8 -topk8 -outform der -nocrypt > RSA_2048_PrivateKey.der
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:3072 | openssl pkcs8 -topk8 -outform der -nocrypt > RSA_3072_PrivateKey.der
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:4096 | openssl pkcs8 -topk8 -outform der -nocrypt > RSA_4096_PrivateKey.der
-
ECC 프라이빗 키
openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-256 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_NIST_P256_PrivateKey.der
openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-384 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_NIST_P384_PrivateKey.der
openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-521 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_NIST_P521_PrivateKey.der
openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:secp256k1 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_SECG_P256K1_PrivateKey.der
-
SM2 프라이빗 키(중국 리전만 해당)
openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:sm2 | openssl pkcs8 -topk8 -outform der -nocrypt > SM2_PrivateKey.der
OpenSSL를 사용한 키 구성 요소 암호화의 예시
다음 예시는 OpenSSL을 사용하여 다운로드한 퍼블릭 키로 키 구성 요소를 암호화하는 방법을 보여줍니다. SM2 퍼블릭 키(중국 리전만 해당)를 사용하여 키 구성 요소를 암호화하려면 SM2OfflineOperationHelper 클래스를 사용합니다. 각 래핑 알고리즘에서 지원하는 주요 구성 요소 유형에 대한 자세한 내용은 래핑 알고리즘 선택 단원을 참조하세요.
이 예시는 개념 증명 데모일 뿐입니다. 프로덕션 시스템에서 보안이 강화된 메서드(상용 HSM 또는 키 관리 시스템 등)를 사용해 키 구성 요소를 생성하고 저장합니다.
ECC_NIST_P521 키 구성 요소, RSA_2048 퍼블릭 래핑 키 사양, RSAES_OAEP_SHA_* 래핑 알고리즘과 같은 조합은 지원되지 않습니다.
ECC_NIST_P521 키 구성 요소를 RSA_2048 퍼블릭 래핑 키로 직접 래핑할 수는 없습니다. 더 큰 래핑 키나 RSA_AES_KEY_WRAP_SHA_* 래핑 알고리즘을 사용하세요.
- RSAES_OAEP_SHA_1
-
AWS KMS는 대칭 암호화 키(SYMMETRIC_DEFAULT), 타원 곡선(ECC) 프라이빗 키, SM2 프라이빗 키 및 HMAC 키에 대해 RSAES_OAEP_SHA_1을 지원합니다.
RSAES_OAEP_SHA_1는 RSA 프라이빗 키에는 지원되지 않습니다. 또한 RSAES_OAEP_SHA_* 래핑 알고리즘과 함께 RSA_2048 퍼블릭 래핑 키를 사용하여 ECC_NIST_P521(secp521r1) 프라이빗 키를 래핑할 수 없습니다. 더 큰 퍼블릭 래핑 키나 RSA_AES_KEY_WRAP 래핑 알고리즘을 사용해야 합니다.
다음 예시에서는 다운로드한 퍼블릭 키와 RSAES_OAEP_SHA_1 래핑 알고리즘을 사용하여 키 구성 요소를 암호화하고 이를 EncryptedKeyMaterial.bin
파일에 저장합니다.
이 예시에서는 다음과 같습니다.
-
WrappingPublicKey.bin
은 다운로드한 래핑 퍼블릭 키가 들어 있는 파일입니다.
-
PlaintextKeyMaterial.bin
은 암호화하려는 키 구성 요소(예: PlaintextKeyMaterial.bin
, HMAC_384_PlaintextKey.bin
또는ECC_NIST_P521_PrivateKey.der
)가 들어 있는 파일입니다.
$
openssl pkeyutl \
-encrypt \
-in PlaintextKeyMaterial.bin
\
-out EncryptedKeyMaterial.bin \
-inkey WrappingPublicKey.bin
\
-keyform DER \
-pubin \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:sha1
- RSAES_OAEP_SHA_256
-
AWS KMS는 대칭 암호화 키(SYMMETRIC_DEFAULT), 타원 곡선(ECC) 프라이빗 키, SM2 프라이빗 키 및 HMAC 키에 대해 RSAES_OAEP_SHA_256을 지원합니다.
RSAES_OAEP_SHA_256은 RSA 프라이빗 키에는 지원되지 않습니다. 또한 RSAES_OAEP_SHA_* 래핑 알고리즘과 함께 RSA_2048 퍼블릭 래핑 키를 사용하여 ECC_NIST_P521(secp521r1) 프라이빗 키를 래핑할 수 없습니다. 더 큰 퍼블릭 키나 RSA_AES_KEY_WRAP 래핑 알고리즘을 사용해야 합니다.
다음 예시에서는 다운로드한 퍼블릭 키와 RSAES_OAEP_SHA_256 래핑 알고리즘을 사용하여 키 구성 요소를 암호화하고 이를 EncryptedKeyMaterial.bin
파일에 저장합니다.
이 예시에서는 다음과 같습니다.
-
WrappingPublicKey.bin
은 다운로드한 래핑 퍼블릭 키가 들어 있는 파일입니다. 콘솔에서 퍼블릭 키를 다운로드한 경우, 이 파일 이름은 wrappingKey_KMS key_key_ID
_timestamp
(예: wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909
)입니다.
-
PlaintextKeyMaterial.bin
은 암호화하려는 키 구성 요소(예: PlaintextKeyMaterial.bin
, HMAC_384_PlaintextKey.bin
또는ECC_NIST_P521_PrivateKey.der
)가 들어 있는 파일입니다.
$
openssl pkeyutl \
-encrypt \
-in PlaintextKeyMaterial.bin
\
-out EncryptedKeyMaterial.bin \
-inkey WrappingPublicKey.bin
\
-keyform DER \
-pubin \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:sha256 \
-pkeyopt rsa_mgf1_md:sha256
- RSA_AES_KEY_WRAP_SHA_1
-
RSA_AES_KEY_WRAP_SHA_1 래핑 알고리즘에는 두 가지 암호화 작업이 포함됩니다.
-
생성한 AES 대칭 키와 AES 대칭 암호화 알고리즘을 사용하여 키 구성 요소를 암호화합니다.
-
다운로드한 퍼블릭 키와 RSAES_OAEP_SHA_1 래핑 알고리즘을 사용하여 사용한 AES 대칭 키를 암호화합니다.
RSA_AES_KEY_WRAP_SHA_1 래핑 알고리즘에는 OpenSSL 버전 3.x 이상이 필요합니다.
-
256비트 AES 대칭 암호화 키 생성
이 명령은 256개의 임의 비트로 구성된 AES 대칭 암호화 키를 생성하여 aes-key.bin
파일에 저장합니다.
# Generate a 32-byte AES symmetric encryption key
$
openssl rand -out aes-key.bin 32
-
AES 대칭 암호화 키를 사용하여 키 구성 요소 암호화
이 명령은 AES 대칭 암호화 키를 사용하여 키 구성 요소를 암호화하고 암호화된 키 구성 요소를 key-material-wrapped.bin
파일에 저장합니다.
이 예시 명령에서는 다음과 같습니다.
-
PlaintextKeyMaterial.bin
은 가져오려는 키 구성 요소(예: PlaintextKeyMaterial.bin
, HMAC_384_PlaintextKey.bin
, RSA_3072_PrivateKey.der
또는 ECC_NIST_P521_PrivateKey.der
)가 들어 있는 파일입니다.
-
aes-key.bin
은 이전 명령에서 생성한 256비트 AES 대칭 암호화 키가 들어 있는 파일입니다.
# Encrypt your key material with the AES symmetric encryption key
$
openssl enc -id-aes256-wrap-pad \
-K "$(xxd -p < aes-key.bin
| tr -d '\n')" \
-iv A65959A6 \
-in PlaintextKeyMaterial.bin
\
-out key-material-wrapped.bin
-
퍼블릭 키를 사용하여 AES 대칭 암호화 키 암호화
이 명령은 다운로드한 퍼블릭 키와 RSAES_OAEP_SHA_1 래핑 알고리즘을 사용하여 AES 대칭 암호화 키를 암호화하고 DER 인코딩한 다음 aes-key-wrapped.bin
파일에 저장합니다.
이 예시 명령에서는 다음과 같습니다.
-
WrappingPublicKey.bin
은 다운로드한 래핑 퍼블릭 키가 들어 있는 파일입니다. 콘솔에서 퍼블릭 키를 다운로드한 경우, 이 파일 이름은 wrappingKey_KMS key_key_ID
_timestamp
(예: wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909
)입니다.
-
aes-key.bin
은 이 예시 시퀀스의 첫 번째 명령에서 생성한 256비트 AES 대칭 암호화 키가 들어 있는 파일입니다.
# Encrypt your AES symmetric encryption key with the downloaded public key
$
openssl pkeyutl \
-encrypt \
-in aes-key.bin
\
-out aes-key-wrapped.bin \
-inkey WrappingPublicKey.bin
\
-keyform DER \
-pubin \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:sha1 \
-pkeyopt rsa_mgf1_md:sha1
-
가져올 파일 생성
암호화된 키 구성 요소가 있는 파일과 암호화된 AES 키가 있는 파일을 연결합니다. EncryptedKeyMaterial.bin
파일에 저장합니다. 이 파일은 4단계: 키 구성 요소 가져오기에서 가져올 파일입니다.
이 예시 명령에서는 다음과 같습니다.
# Combine the encrypted AES key and encrypted key material in a file
$
cat aes-key-wrapped.bin
key-material-wrapped.bin
> EncryptedKeyMaterial.bin
- RSA_AES_KEY_WRAP_SHA_256
-
RSA_AES_KEY_WRAP_SHA_256 래핑 알고리즘에는 두 가지 암호화 작업이 포함됩니다.
-
생성한 AES 대칭 키와 AES 대칭 암호화 알고리즘을 사용하여 키 구성 요소를 암호화합니다.
-
다운로드한 퍼블릭 키와 RSAES_OAEP_SHA_256 래핑 알고리즘을 사용하여 사용한 AES 대칭 키를 암호화합니다.
RSA_AES_KEY_WRAP_SHA_256 래핑 알고리즘에는 OpenSSL 버전 3.x 이상이 필요합니다.
-
256비트 AES 대칭 암호화 키 생성
이 명령은 256개의 임의 비트로 구성된 AES 대칭 암호화 키를 생성하여 aes-key.bin
파일에 저장합니다.
# Generate a 32-byte AES symmetric encryption key
$
openssl rand -out aes-key.bin 32
-
AES 대칭 암호화 키를 사용하여 키 구성 요소 암호화
이 명령은 AES 대칭 암호화 키를 사용하여 키 구성 요소를 암호화하고 암호화된 키 구성 요소를 key-material-wrapped.bin
파일에 저장합니다.
이 예시 명령에서는 다음과 같습니다.
-
PlaintextKeyMaterial.bin
은 가져오려는 키 구성 요소(예: PlaintextKeyMaterial.bin
, HMAC_384_PlaintextKey.bin
, RSA_3072_PrivateKey.der
또는 ECC_NIST_P521_PrivateKey.der
)가 들어 있는 파일입니다.
-
aes-key.bin
은 이전 명령에서 생성한 256비트 AES 대칭 암호화 키가 들어 있는 파일입니다.
# Encrypt your key material with the AES symmetric encryption key
$
openssl enc -id-aes256-wrap-pad \
-K "$(xxd -p < aes-key.bin
| tr -d '\n')" \
-iv A65959A6 \
-in PlaintextKeyMaterial.bin
\
-out key-material-wrapped.bin
-
퍼블릭 키를 사용하여 AES 대칭 암호화 키 암호화
이 명령은 다운로드한 퍼블릭 키와 RSAES_OAEP_SHA_256 래핑 알고리즘을 사용하여 AES 대칭 암호화 키를 암호화하고 DER 인코딩한 다음 aes-key-wrapped.bin
파일에 저장합니다.
이 예시 명령에서는 다음과 같습니다.
-
WrappingPublicKey.bin
은 다운로드한 래핑 퍼블릭 키가 들어 있는 파일입니다. 콘솔에서 퍼블릭 키를 다운로드한 경우, 이 파일 이름은 wrappingKey_KMS key_key_ID
_timestamp
(예: wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909
)입니다.
-
aes-key.bin
은 이 예시 시퀀스의 첫 번째 명령에서 생성한 256비트 AES 대칭 암호화 키가 들어 있는 파일입니다.
# Encrypt your AES symmetric encryption key with the downloaded public key
$
openssl pkeyutl \
-encrypt \
-in aes-key.bin
\
-out aes-key-wrapped.bin \
-inkey WrappingPublicKey.bin
\
-keyform DER \
-pubin \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:sha256 \
-pkeyopt rsa_mgf1_md:sha256
-
가져올 파일 생성
암호화된 키 구성 요소가 있는 파일과 암호화된 AES 키가 있는 파일을 연결합니다. EncryptedKeyMaterial.bin
파일에 저장합니다. 이 파일은 4단계: 키 구성 요소 가져오기에서 가져올 파일입니다.
이 예시 명령에서는 다음과 같습니다.
# Combine the encrypted AES key and encrypted key material in a file
$
cat aes-key-wrapped.bin
key-material-wrapped.bin
> EncryptedKeyMaterial.bin
4단계: 키 구성 요소 가져오기로 이동합니다.