키 구성 요소 가져오기 3단계: 키 구성 요소 암호화 - AWS Key Management Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

키 구성 요소 가져오기 3단계: 키 구성 요소 암호화

퍼블릭 키 및 가져오기 토큰을 다운로드한 후에는 다운로드한 퍼블릭 키와 지정한 래핑 알고리즘을 사용하여 키 구성 요소를 암호화합니다. 퍼블릭 키 또는 가져오기 토큰을 교체해야 하거나 래핑 알고리즘을 변경해야 하는 경우 새 퍼블릭 키와 가져오기 토큰을 다운로드해야 합니다. AWS KMS가 지원하는 퍼블릭 키 및 래핑 알고리즘에 대한 자세한 내용은 래핑 퍼블릭 키 사양 선택래핑 알고리즘 선택을 참조하세요.

키 구성 요소는 이진 형식이어야 합니다. 자세한 내용은 가져온 키 구성 요소에 대한 요구 사항섹션을 참조하세요.

참고

비대칭 키 쌍의 경우 프라이빗 키만 암호화하고 가져옵니다. AWS KMS가 프라이빗 키에서 퍼블릭 키를 파생합니다.

ECC_NIST_P521 키 구성 요소, RSA_2048 퍼블릭 래핑 키 사양, RSAES_OAEP_SHA_* 래핑 알고리즘과 같은 조합은 지원되지 않습니다.

ECC_NIST_P521 키 구성 요소를 RSA_2048 퍼블릭 래핑 키로 직접 래핑할 수는 없습니다. 더 큰 래핑 키나 RSA_AES_KEY_WRAP_SHA_* 래핑 알고리즘을 사용하세요.

일반적으로 하드웨어 보안 모듈(HSM)이나 키 관리 시스템에서 내보낼 때 키 구성 요소를 암호화합니다. 이진 형식으로 키 구성 요소를 내보내는 방법은 HSM 또는 키 관리 시스템에 대한 문서를 참조하십시오. OpenSSL을 이용해 개념 증명 데모를 제공하는 다음 섹션을 참조할 수도 있습니다.

키 구성 요소를 암호화하는 경우 퍼블릭 키와 가져오기 토큰을 다운로드할 때 지정한 동일한 래핑 알고리즘을 사용합니다. 지정한 래핑 알고리즘을 찾으려면 관련 GetParametersForImport요청의 CloudTrail 로그 이벤트를 참조하십시오.

테스트용 키 구성 요소 생성

다음 OpenSSL 명령은 테스트를 위해 지원되는 각 유형의 키 구성 요소를 생성합니다. 이 예제는 테스트 및 proof-of-concept 데모용으로만 제공됩니다. 프로덕션 시스템의 경우 보안이 보안 모듈이나 키 관리 시스템과 같은 보다 안전한 방법을 사용하여 키 구성 요소를 생성합니다.

비대칭 키 쌍의 프라이빗 키를 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

OpenSSL를 사용한 키 구성 요소 암호화의 예시

다음 예시는 OpenSSL을 사용하여 다운로드한 퍼블릭 키로 키 구성 요소를 암호화하는 방법을 보여줍니다.

중요

이 예시는 개념 증명 데모일 뿐입니다. 프로덕션 시스템에서 보안이 강화된 메서드(상용 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) 프라이빗 키 및 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) 프라이빗 키 및 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 래핑 알고리즘에는 두 가지 암호화 작업이 포함됩니다.

  1. 생성한 AES 대칭 키와 AES 대칭 암호화 알고리즘을 사용하여 키 구성 요소를 암호화합니다.

  2. 다운로드한 퍼블릭 키와 RSAES_OAEP_SHA_1 래핑 알고리즘을 사용하여 사용한 AES 대칭 키를 암호화합니다.

AWS KMS는 지원되는 모든 유형의 가져온 키 구성 요소와 지원되는 모든 퍼블릭 키 사양에 대해 RSA_AES_KEY_WRAP_SHA_* 래핑 알고리즘을 지원합니다. RSA_AES_KEY_WRAP_SHA_* 알고리즘은 RSA 키 구성 요소를 래핑하는 데 지원되는 유일한 래핑 알고리즘입니다.

RSA_AES_KEY_WRAP_SHA_1 래핑 알고리즘에는 OpenSSL 버전 3.x 이상이 필요합니다.

  1. 256비트 AES 대칭 암호화 키 생성

    이 명령은 256개의 임의 비트로 구성된 AES 대칭 암호화 키를 생성하여 aes-key.bin 파일에 저장합니다.

    # Generate a 32-byte AES symmetric encryption key $ openssl rand -out aes-key.bin 32
  2. 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
  3. 퍼블릭 키를 사용하여 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
  4. 가져올 파일 생성

    암호화된 키 구성 요소가 있는 파일과 암호화된 AES 키가 있는 파일을 연결합니다. EncryptedKeyMaterial.bin 파일에 저장합니다. 이 파일은 4단계: 키 구성 요소 가져오기에서 가져올 파일입니다.

    이 예시 명령에서는 다음과 같습니다.

    • key-material-wrapped.bin은 암호화된 키 구성 요소가 들어 있는 파일입니다.

    • aes-key-wrapped.bin은 암호화된 AES 암호화 키가 들어 있는 파일입니다.

    # 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 래핑 알고리즘에는 두 가지 암호화 작업이 포함됩니다.

  1. 생성한 AES 대칭 키와 AES 대칭 암호화 알고리즘을 사용하여 키 구성 요소를 암호화합니다.

  2. 다운로드한 퍼블릭 키와 RSAES_OAEP_SHA_256 래핑 알고리즘을 사용하여 사용한 AES 대칭 키를 암호화합니다.

AWS KMS는 지원되는 모든 유형의 가져온 키 구성 요소와 지원되는 모든 퍼블릭 키 사양에 대해 RSA_AES_KEY_WRAP_SHA_* 래핑 알고리즘을 지원합니다. RSA_AES_KEY_WRAP_SHA_* 알고리즘은 RSA 키 구성 요소를 래핑하는 데 지원되는 유일한 래핑 알고리즘입니다.

RSA_AES_KEY_WRAP_SHA_256 래핑 알고리즘에는 OpenSSL 버전 3.x 이상이 필요합니다.

  1. 256비트 AES 대칭 암호화 키 생성

    이 명령은 256개의 임의 비트로 구성된 AES 대칭 암호화 키를 생성하여 aes-key.bin 파일에 저장합니다.

    # Generate a 32-byte AES symmetric encryption key $ openssl rand -out aes-key.bin 32
  2. 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
  3. 퍼블릭 키를 사용하여 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
  4. 가져올 파일 생성

    암호화된 키 구성 요소가 있는 파일과 암호화된 AES 키가 있는 파일을 연결합니다. EncryptedKeyMaterial.bin 파일에 저장합니다. 이 파일은 4단계: 키 구성 요소 가져오기에서 가져올 파일입니다.

    이 예시 명령에서는 다음과 같습니다.

    • key-material-wrapped.bin은 암호화된 키 구성 요소가 들어 있는 파일입니다.

    • aes-key-wrapped.bin은 암호화된 AES 암호화 키가 들어 있는 파일입니다.

    # Combine the encrypted AES key and encrypted key material in a file $ cat aes-key-wrapped.bin key-material-wrapped.bin > EncryptedKeyMaterial.bin

4단계: 키 구성 요소 가져오기로 이동합니다.