키 가져오기 - AWS 결제 암호화

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

키 가져오기

중요

예제에는 최신 버전의 AWS CLI V2가 필요할 수 있습니다. 시작하기 전에 최신 버전으로 업그레이드했는지 확인하십시오.

대칭 키 가져오기

비대칭 기법을 사용한 키 가져오기(TR-34)

AWS 결제: 암호화 키, 암호화 키 가져오기 프로세스

개요: TR-34 시스템은 RSA 비대칭 암호화를 활용하여 교환을 위한 대칭 키를 암호화하고 데이터 소스(서명)를 보장합니다. 이렇게 하면 래핑된 키의 기밀성(암호화)과 무결성(서명)이 모두 보장됩니다.

자체 키를 가져오려면 Github의 샘플 프로젝트를 확인하세요. 다른 플랫폼에서 키를 가져오거나 내보내는 방법에 대한 지침은 해당 플랫폼의 사용 설명서를 참조하세요.

1. 가져오기 초기화 명령을 호출하세요.

get-parameters-for-import를 호출하여 가져오기 프로세스를 초기화합니다. 이 API는 키 가져오기를 위한 키페어를 생성하고, 키에 서명하고, 인증서 및 인증서 루트를 반환합니다. 최종적으로 내보낼 키는 이 키를 사용하여 암호화해야 합니다. TR-34 용어로는 이를 KRD 인증서라고 합니다. 이러한 인증서는 유효기간이 짧으며 이 용도로만 사용된다는 점에 유의하세요.

2. 키 소스 시스템에 공개 인증서를 설치하세요.

HSM이 많은 경우 1단계에서 생성한 공개 인증서를 설치/로드/신뢰해야 이를 사용하여 키를 내보낼 수 있습니다.

3. 공개 키를 생성하고 AWS 결제 암호화에 인증서 루트를 제공하십시오.

전송된 페이로드의 무결성을 보장하기 위해 전송 당사자(키 분포 호스트 또는 KDH)가 서명합니다. 전송 당사자는 이러한 목적으로 공개 키를 생성한 다음 결제 암호화에 다시 제공할 수 있는 공개 키 인증서 (X509) 를 생성하기를 원할 것입니다. AWS AWS Private CA 인증서를 생성하는 옵션 중 하나이지만 사용되는 인증 기관에는 제한이 없습니다.

인증서를 얻었으면 importKey 명령 및 KeyMaterialType of를 사용하여 AWS Payment Cryptography에 루트 인증서를 로드하는 것이 좋습니다. ROOT_PUBLIC_KEY_CERTIFICATE KeyUsageType TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE

4. 소스 시스템에서 키 내보내기

많은 HSM 및 관련 시스템에서는 TR-34 표준을 사용하여 키를 내보내는 기능을 지원합니다. 1단계의 퍼블릭 키는 KRD(암호화) 인증서로 지정하고 3단계의 키는 KDH(서명) 인증서로 지정하는 것이 좋습니다. AWS 결제 암호화로 가져오려면 형식을 TR-34.2012 비 CMS 2패스 형식으로 지정해야 합니다. 이 형식은 TR-34 디에볼트 형식이라고도 합니다.

5. 키 가져오기 호출

마지막 단계에서는 of를 사용하여 ImportKey API를 호출합니다. KeyMaterialType TR34_KEY_BLOCK certificate-authority-public-key-identifier는 3단계에서 가져온 루트 CA의 키ARN, key-material는 4단계의 래핑된 키 자료, signing-key-certificate는 3단계의 리프 인증서입니다. 또한 1단계에서 가져온 가져오기 토큰을 제공해야 합니다.

6. 가져온 키를 암호화 작업이나 후속 가져오기에 사용합니다.

KeyUsage 임포트한 키가 TR31_K0_KEY_ENCRYTION_KEY인 경우, TR-31 키를 사용하여 이후에 키를 가져올 때 이 키를 사용할 수 있습니다. 키 유형이 다른 유형(예: TR31_D0_SYMMETRIC_DATA_ENCRYPTION_KEY)인 경우 키를 암호화 작업에 직접 사용할 수 있습니다.

비대칭 기법 (RSA 언랩) 을 사용하여 키 가져오기

개요: AWS 결제 암호화는 TR-34 상황이 불가능할 때 키 교환을 위한 RSA 래핑/언랩핑을 지원합니다. 이 기법은 TR-34 방식과 마찬가지로 RSA 비대칭 암호화를 활용하여 대칭 키를 암호화하여 교환합니다. 하지만 TR-34 방식과 달리 이 방법은 전송 당사자가 서명한 페이로드가 없습니다. 또한 이 RSA 랩 기법은 키 블록을 포함하지 않기 때문에 전송 중에 키 메타데이터의 무결성을 유지하지 못합니다.

참고

RSA 랩은 TDES 및 AES-128 키를 가져오거나 내보내는 데 사용할 수 있습니다.

1. 가져오기 초기화 명령을 호출하세요.

키를 get-parameters-for-import 호출하여 KEY_CRYPTOGRAM의 키 머티리얼 유형을 사용하여 가져오기 프로세스를 초기화합니다. WrappingKeyAlgorithm TDES 키를 교환할 때는 RSA_2048이 될 수 있습니다. TDES 또는 AES-128 키를 교환할 때는 RSA_3072 또는 RSA_4096을 사용할 수 있습니다. 이 API는 키 가져오기를 위한 키페어를 생성하고, 인증서 루트를 사용하여 키에 서명하고, 인증서와 인증서 루트를 모두 반환합니다. 최종적으로 내보낼 키는 이 키를 사용하여 암호화해야 합니다. 이러한 인증서는 유효기간이 짧으며 이 용도로만 사용된다는 점에 유의하세요.

$ aws payment-cryptography get-parameters-for-import --key-material-type KEY_CRYPTOGRAM --wrapping-key-algorithm RSA_4096
{ "ImportToken": "import-token-bwxli6ocftypneu5", "ParametersValidUntilTimestamp": 1698245002.065, "WrappingKeyCertificateChain": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0....", "WrappingKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0....", "WrappingKeyAlgorithm": "RSA_4096" }
2. 키 소스 시스템에 공개 인증서를 설치하세요.

많은 HSM의 경우 1단계에서 생성한 공개 인증서 (및/또는 해당 루트) 를 설치/로드/신뢰해야 이를 사용하여 키를 내보낼 수 있습니다.

3. 소스 시스템에서 키 내보내기

많은 HSM 및 관련 시스템에서는 RSA 랩을 사용하여 키를 내보내는 기능을 지원합니다. 1단계의 공개 키를 (암호화) 인증서 (인증서) 로 지정하는 것이 좋습니다. WrappingKey 신뢰 체인이 필요한 경우 이 정보는 #1 단계의 응답 WrappingKeyCertificateChain 필드에 포함되어 있습니다. HSM에서 키를 내보낼 때는 형식을 RSA, 패딩 모드 = PKCS #1 v2.2 OAEP (SHA 256 또는 SHA 512 사용) 로 지정하는 것이 좋습니다.

4. 키 가져오기 호출

마지막 단계에서는 f를 사용하여 ImportKey API를 호출합니다. KeyMaterialType KeyMaterial 1단계의 가져오기 토큰과 3단계의 key-material (래핑된 키 자료) 가 필요합니다. RSA 랩은 키 블록을 사용하지 않으므로 주요 매개 변수 (예: 키 사용) 를 제공해야 합니다.

$ cat import-key-cryptogram.json { "KeyMaterial": { "KeyCryptogram": { "Exportable": true, "ImportToken": "import-token-bwxli6ocftypneu5", "KeyAttributes": { "KeyAlgorithm": "AES_128", "KeyClass": "SYMMETRIC_KEY", "KeyModesOfUse": { "Decrypt": true, "DeriveKey": false, "Encrypt": true, "Generate": false, "NoRestrictions": false, "Sign": false, "Unwrap": true, "Verify": false, "Wrap": true }, "KeyUsage": "TR31_K0_KEY_ENCRYPTION_KEY" }, "WrappedKeyCryptogram": "18874746731....", "WrappingSpec": "RSA_OAEP_SHA_256" } } }
$ aws payment-cryptography import-key --cli-input-json file://import-key-cryptogram.json
{ "Key": { "KeyOrigin": "EXTERNAL", "Exportable": true, "KeyCheckValue": "DA1ACF", "UsageStartTimestamp": 1697643478.92, "Enabled": true, "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h", "CreateTimestamp": 1697643478.92, "KeyState": "CREATE_COMPLETE", "KeyAttributes": { "KeyAlgorithm": "AES_128", "KeyModesOfUse": { "Encrypt": true, "Unwrap": true, "Verify": false, "DeriveKey": false, "Decrypt": true, "NoRestrictions": false, "Sign": false, "Wrap": true, "Generate": false }, "KeyUsage": "TR31_K0_KEY_ENCRYPTION_KEY", "KeyClass": "SYMMETRIC_KEY" }, "KeyCheckValueAlgorithm": "CMAC" } }
5. 가져온 키를 암호화 작업이나 후속 가져오기에 사용합니다.

가져온 KeyUsage 키가 TR31_K0_KEY_ENCRYTION_KEY인 경우 TR-31 키를 사용하여 이후에 키를 가져올 때 이 키를 사용할 수 있습니다. 키 유형이 다른 유형(예: TR31_D0_SYMMETRIC_DATA_ENCRYPTION_KEY)인 경우 키를 암호화 작업에 직접 사용할 수 있습니다.

사전 설정된 키 교환 키(TR-31)를 사용하여 대칭 키를 가져옵니다.

AWS 결제 암호화 대칭 키 가져오기 프로세스

파트너가 여러 키를 교환하는 경우 (또는 키 교체를 지원하기 위해), 일반적으로 먼저 종이 키 구성 요소와 같은 기술을 사용하여 초기 키 암호화 키 (KEK) 를 교환하거나 TR-34 기반의 AWS 결제 암호화를 사용하여 교환합니다.

KEK가 설정되면 이 키를 사용하여 후속 키 (다른 KEK 포함) 를 전송할 수 있습니다. AWS 결제 암호화는 HSM 공급업체에서 널리 사용되고 널리 지원하는 ANSI TR-31 기반의 이러한 종류의 키 교환을 지원합니다.

1. KEK(키 암호화 키) 가져오기

KEK를 이미 가져왔고 keyARN(또는 keyAlias)을 사용할 수 있는 것으로 가정합니다.

2. 소스 플랫폼에서 키 생성

키가 아직 없는 경우 소스 플랫폼에서 키를 생성하세요. 반대로 AWS Payment Cryptography에서 키를 생성하고 대신 export 명령을 사용할 수 있습니다.

3. 소스 플랫폼에서 키 내보내기

내보낼 때는 내보내기 형식을 TR-31 형식으로 지정해야 합니다. 또한 소스 플랫폼은 내보낼 키와 사용할 키 암호화 키를 요청합니다.

4. 결제 암호화로 가져오기 AWS

ImportKey 명령을 호출할 때는 키 암호화 키의 KeyARN (또는 별칭) WrappingKeyIdentifier 이어야 하며 WrappedKeyBlock 소스 플랫폼의 출력이어야 합니다.

$ aws payment-cryptography import-key \ --key-material="Tr31KeyBlock={WrappingKeyIdentifier="arn:aws:payment-cryptography:us-east-2:111122223333:key/ov6icy4ryas4zcza",\ WrappedKeyBlock="D0112B0AX00E00002E0A3D58252CB67564853373D1EBCC1E23B2ADE7B15E967CC27B85D5999EF58E11662991FF5EB1381E987D744334B99D"}"
{ "Key": { "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h", "KeyAttributes": { "KeyUsage": "TR31_D0_SYMMETRIC_DATA_ENCRYPTION_KEY", "KeyClass": "SYMMETRIC_KEY", "KeyAlgorithm": "AES_128", "KeyModesOfUse": { "Encrypt": true, "Decrypt": true, "Wrap": true, "Unwrap": true, "Generate": false, "Sign": false, "Verify": false, "DeriveKey": false, "NoRestrictions": false } }, "KeyCheckValue": "0A3674", "KeyCheckValueAlgorithm": "CMAC", "Enabled": true, "Exportable": true, "KeyState": "CREATE_COMPLETE", "KeyOrigin": "EXTERNAL", "CreateTimestamp": "2023-06-02T07:38:14.913000-07:00", "UsageStartTimestamp": "2023-06-02T07:38:14.857000-07:00" } }

비대칭(RSA) 키 가져오기

RSA 퍼블릭 키 가져오기

AWS 결제 암호화는 X.509 인증서 형태의 공개 RSA 키 가져오기를 지원합니다. 인증서를 가져오려면 먼저 루트 인증서를 가져와야 합니다. 모든 인증서는 가져오는 시점에 만료되지 않아야 합니다. 인증서는 PEM 형식이어야 하며 base64로 인코딩되어야 합니다.

1. 루트 인증서를 결제 암호화로 가져오기 AWS
$ aws payment-cryptography import-key \ --key-material='{"RootCertificatePublicKey":{"KeyAttributes":{"KeyAlgorithm":"RSA_2048", \ "KeyClass":"PUBLIC_KEY", "KeyModesOfUse":{"Verify": true},"KeyUsage":"TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE"}, \ "PublicKeyCertificate":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURKVENDQWcyZ0F3SUJBZ0lCWkRBTkJna3Foa2lHOXcwQkFR..."}}'
{ "Key": { "CreateTimestamp": "2023-08-08T18:52:01.023000+00:00", "Enabled": true, "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/zabouwe3574jysdl", "KeyAttributes": { "KeyAlgorithm": "RSA_2048", "KeyClass": "PUBLIC_KEY", "KeyModesOfUse": { "Decrypt": false, "DeriveKey": false, "Encrypt": false, "Generate": false, "NoRestrictions": false, "Sign": false, "Unwrap": false, "Verify": true, "Wrap": false }, "KeyUsage": "TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE" }, "KeyOrigin": "EXTERNAL", "KeyState": "CREATE_COMPLETE", "UsageStartTimestamp": "2023-08-08T18:52:01.023000+00:00" } }
2. 공개 키 인증서를 AWS 결제 암호화로 가져오기

이제 퍼블릭 키를 가져올 수 있습니다. 퍼블릭 키를 가져오는 데는 두 가지 옵션이 있습니다. TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE는 키의 용도가 서명을 확인하는 것인 경우(예: TR-34 사용하여 가져오는 경우) 사용할 수 있습니다. TR31_D1_ASYMMETRIC_KEY_FOR_DATA_ENCRYPTION는 다른 시스템에서 사용할 데이터를 암호화할 때 사용할 수 있습니다.

$ aws payment-cryptography import-key \ --key-material='{"TrustedCertificatePublicKey":{"CertificateAuthorityPublicKeyIdentifier":"arn:aws:payment-cryptography:us-east-2:111122223333:key/zabouwe3574jysdl", \ "KeyAttributes":{"KeyAlgorithm":"RSA_2048","KeyClass":"PUBLIC_KEY","KeyModesOfUse":{"Verify":true},"KeyUsage":"TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE"},\ "PublicKeyCertificate":"LS0tLS1CRUdJTiB..."}}'
{ "Key": { "CreateTimestamp": "2023-08-08T18:55:46.815000+00:00", "Enabled": true, "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/4kd6xud22e64wcbk", "KeyAttributes": { "KeyAlgorithm": "RSA_4096", "KeyClass": "PUBLIC_KEY", "KeyModesOfUse": { "Decrypt": false, "DeriveKey": false, "Encrypt": false, "Generate": false, "NoRestrictions": false, "Sign": false, "Unwrap": false, "Verify": true, "Wrap": false }, "KeyUsage": "TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE" }, "KeyOrigin": "EXTERNAL", "KeyState": "CREATE_COMPLETE", "UsageStartTimestamp": "2023-08-08T18:55:46.815000+00:00" } }