Importar chaves - AWS Criptografia de pagamento

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Importar chaves

Importante

Os exemplos podem exigir a versão mais recente da AWS CLI V2. Antes de começar, verifique se você atualizou para a versão mais recente.

Importar chaves simétricas

Importar chaves usando técnicas assimétricas (TR-34)

AWS Processo de importação de chave de criptografia de chave de criptografia de pagamento

Visão geral: o TR-34 utiliza criptografia assimétrica RSA para criptografar chaves simétricas para troca, além de garantir a origem dos dados (assinatura). Isso garante a confidencialidade (criptografia) e a integridade (assinatura) da chave encapsulada.

Se quiser importar suas próprias chaves, confira o projeto de amostra disponível no Github. Para obter instruções sobre como importar/exportar chaves de outras plataformas, consulte o guia do usuário dessas plataformas.

1. Chamar o comando de inicialização de importação

Chame get-parameters-for-import para inicializar o processo de importação. Essa API gerará um par de chaves para fins de importação de chaves, assinará a chave e retornará o certificado e a raiz do certificado. Em última análise, a chave a ser exportada deve ser criptografada usando essa chave. Na terminologia do TR-34, isso é conhecido como Certificado de KRD. Observe que esses certificados têm vida curta e se destinam apenas a essa finalidade.

2. Instalar o certificado público no sistema de origem da chave

Com muitos HSMs, pode ser necessário instalar/carregar/confiar no certificado público gerado na etapa 1 para exportar chaves com o uso dele.

3. Gere a chave pública e forneça a raiz do certificado para criptografia AWS de pagamento

Para garantir a integridade da carga transmitida, ela é assinada pela parte remetente (conhecida como host de distribuição de chaves ou KDH). A parte remetente desejará gerar uma chave pública para essa finalidade e, em seguida, criar um certificado de chave pública (X509) que possa ser devolvido à AWS Payment Cryptography. AWS Private CA é uma opção para gerar certificados, mas não há restrições quanto à autoridade de certificação usada.

Depois de ter o certificado, você desejará carregar o certificado raiz na Criptografia AWS de Pagamento usando o importKey comando e KeyMaterialType de ROOT_PUBLIC_KEY_CERTIFICATE e KeyUsageType deTR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE.

4. Exportar chave do sistema de origem

Muitos HSMs e sistemas relacionados oferecem suporte à capacidade de exportar chaves usando a norma TR-34. Você deve especificar a chave pública da etapa 1 como o certificado KRD (criptografia) e a chave da etapa 3 como o certificado KDH (assinatura). Para importar para a criptografia de AWS pagamento, você deve especificar o formato de duas passagens TR-34.2012, não CMS, que também pode ser chamado de formato TR-34 Diebold.

5. Chamar chave de importação

Como última etapa, você chamará a API importKey com um KeyMaterialType deTR34_KEY_BLOCK. O certificate-authority-public-key-identifier será o keyARN da CA raiz importada na etapa 3, key-material será o material de chave encapsulado da etapa 4 e signing-key-certificate será o certificado de entidade final da etapa 3. Você também precisará fornecer o token de importação da etapa 1.

6. Use a chave importada para operações criptográficas ou importação subsequente

Se o importado KeyUsage foi TR31_K0_KEY_ENCRYPTION_KEY, essa chave poderá ser usada para importações de chaves subsequentes usando TR-31. Se o tipo de chave for qualquer outro tipo (como TR31_D0_SYMMETRIC_DATA_ENCRYPTION_KEY), a chave poderá ser usada diretamente para operações criptográficas.

Importe chaves usando técnicas assimétricas (RSA Unwrap)

Visão geral: a criptografia AWS de pagamento suporta RSA wrap/unwrap para troca de chaves quando o TR-34 não é viável. Semelhante ao TR-34, essa técnica utiliza criptografia assimétrica RSA para criptografar chaves simétricas para troca. No entanto, diferentemente do TR-34, esse método não tem a carga assinada pela parte remetente. Além disso, essa técnica de encapsulamento RSA não mantém a integridade dos metadados da chave durante a transferência por não incluir blocos de chaves.

nota

O RSA wrap pode ser usado para importar ou exportar chaves TDES e AES-128.

1. Chamar o comando de inicialização de importação

Ligue get-parameters-for-import para inicializar o processo de importação com um tipo de material de chave de KEY_CRYPTOGRAM. WrappingKeyAlgorithm pode ser RSA_2048 ao trocar chaves TDES. O RSA_3072 ou o RSA_4096 podem ser usados ao trocar chaves TDES ou AES-128. Essa API gerará um par de chaves para fins de importação de chaves, assinará a chave usando uma raiz de certificado e retornará tanto o certificado quanto a raiz do certificado. Em última análise, a chave a ser exportada deve ser criptografada usando essa chave. Observe que esses certificados têm vida curta e se destinam apenas a essa finalidade.

$ 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. Instalar o certificado público no sistema de origem da chave

Com muitos HSMs, talvez seja necessário instalar/carregar/confiar no certificado público (e/ou em sua raiz) gerado na etapa 1 para exportar chaves usando-o.

3. Exportar chave do sistema de origem

Muitos HSMs e sistemas relacionados oferecem suporte à capacidade de exportar chaves usando o RSA wrap. Você desejará especificar a chave pública da etapa 1 como o certificado () (de criptografiaWrappingKeyCertificate). Se você precisar da cadeia de confiança, ela está contida no campo de resposta WrappingKeyCertificateChain na etapa #1. Ao exportar a chave do seu HSM, você deve especificar o formato como RSA, Padding Mode = PKCS #1 v2.2 OAEP (com SHA 256 ou SHA 512).

4. Chamar chave de importação

Como última etapa, você chamará a API importKey com um KeyMaterialType deKeyMaterial. Você precisará do token de importação da etapa 1 e do key-material (material da chave embrulhada) da etapa 3. Você precisará fornecer os parâmetros-chave (como o uso da chave), pois o RSA wrap não utiliza blocos de chaves.

$ 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. Use a chave importada para operações criptográficas ou importação subsequente

Se o importado KeyUsage foi TR31_K0_KEY_ENCRYPTION_KEY, essa chave poderá ser usada para importações de chaves subsequentes usando TR-31. Se o tipo de chave for qualquer outro tipo (como TR31_D0_SYMMETRIC_DATA_ENCRYPTION_KEY), a chave poderá ser usada diretamente para operações criptográficas.

Importe chaves simétricas usando uma chave de troca de chaves preestabelecida (TR-31)

AWS Processo de importação de chave simétrica de criptografia de pagamento

Quando os parceiros estão trocando várias chaves (ou para oferecer suporte à rotação de chaves), é comum trocar primeiro uma chave de criptografia de chave inicial (KEK) usando técnicas como componentes de chave em papel ou, no caso de criptografia de AWS pagamento, usando TR-34.

Depois que uma KEK é estabelecida, você pode usar essa chave para transportar as chaves subsequentes (incluindo outras KEKs). AWS A criptografia de pagamento suporta esse tipo de troca de chaves usando o ANSI TR-31, que é amplamente usado e amplamente suportado pelos fornecedores de HSM.

1. Importar chave de criptografia de chave (KEK)

Supõe-se que você já tenha importado sua KEK e tenha o keyARN (ou keyAlias) disponível para você.

2. Criar uma chave na plataforma de origem

Se a chave ainda não existir, crie-a na plataforma de origem. Por outro lado, você pode criar a chave no AWS Payment Cryptography e usar o comando export em vez disso.

3. Exportar chave da plataforma de origem

Ao exportar, especifique o formato de exportação como TR-31. A plataforma de origem também solicitará a exportação da chave e a chave de criptografia a ser usada.

4. Importar para criptografia AWS de pagamento

Ao chamar o comando importKey, WrappingKeyIdentifier deve ser o keyArn (ou alias) da chave de criptografia da chave e a saída da WrappedKeyBlock plataforma de origem.

$ 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" } }

Importar chaves assimétricas (RSA)

Importar chaves públicas RSA

AWS A criptografia de pagamento suporta a importação de chaves RSA públicas na forma de certificados X.509. Para importar um certificado, você precisará primeiro importar seu certificado raiz. Todos os certificados devem estar válidos no momento da importação. O certificado deve estar no formato PEM e ser codificado em base64.

1. Importar para o certificado raiz para criptografia AWS de pagamento
$ 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. Importar certificado de chave pública para criptografia AWS de pagamento

Agora, você pode importar uma chave pública. Existem duas opções para importar chaves públicas. TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE pode ser usado se o objetivo da chave for verificar assinaturas (por exemplo, ao importar usando TR-34). TR31_D1_ASYMMETRIC_KEY_FOR_DATA_ENCRYPTION pode ser usado ao criptografar dados destinados ao uso com outro sistema.

$ 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" } }