

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á.

# Provedor de materiais de criptografia
<a name="crypto-materials-providers"></a>

**nota**  
Nossa biblioteca de criptografia do lado do cliente foi [renomeada como SDK de criptografia de banco de dados da AWS](DDBEC-rename.md). O tópico a seguir fornece informações sobre as versões 1.*x*—2.*x* do DynamoDB Encryption Client para Java e versões 1.*x*—3*x* do DynamoDB Encryption Client para Python. Para obter mais informações, consulte [SDK de criptografia de banco de dados da AWS para obter suporte à versão do DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

Uma das decisões mais importantes que você precisa tomar ao usar o DynamoDB Encryption Client é selecionar um [provedor de materiais de criptografia](DDBEC-legacy-concepts.md#concept-material-provider) (CMP). O CMP monta e retorna materiais de criptografia ao criptografador do item. Ele também determina como as chaves de criptografia e assinatura são geradas, se os novos materiais de chaves são gerados para cada item ou reutilizados e os algoritmos de criptografia e assinatura que são usados. 

Você pode escolher um CMP das implementações fornecidas nas bibliotecas do DynamoDB Encryption Client ou criar um CMP compatível personalizado. Sua escolha de CMP também pode ter como base a [linguagem de programação](programming-languages.md) usada.

Este tópico descreve os mais comuns CMPs e oferece alguns conselhos para ajudá-lo a escolher o melhor para seu aplicativo.

**Provedor direto de materiais do KMS**  
O provedor direto de materiais do KMS protege os itens da sua tabela sob uma [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys) que nunca deixa o [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (AWS KMS) sem criptografia. Seu aplicativo não precisa gerar ou gerenciar nenhum material de criptografia. Como ele usa o AWS KMS key para gerar chaves exclusivas de criptografia e assinatura para cada item, esse provedor liga AWS KMS sempre que criptografa ou descriptografa um item.   
Se você usa AWS KMS e uma AWS KMS chamada por transação é prática para seu aplicativo, esse provedor é uma boa escolha.  
Para obter detalhes, consulte [Provedor direto de materiais do KMS](direct-kms-provider.md).

**Provedor encapsulado de materiais (CMP encapsulado)**  
O provedor encapsulado de materiais (CMP encapsulado) permite gerar e gerenciar chaves encapsuladas e de assinatura fora do DynamoDB Encryption Client.   
O CMP encapsulado gera uma chave exclusiva de criptografia para cada item. E, então, ele usa as chaves encapsuladas (ou desencapsuladas) e de assinatura que você forneceu. Desse modo, você pode determinar como as chaves encapsuladas e de assinatura serão geradas e se elas serão exclusivas para cada item ou reutilizadas. O Wrapped CMP é uma alternativa segura ao [Direct KMS Provider](direct-kms-provider.md) para aplicativos que não usam AWS KMS e podem gerenciar com segurança materiais criptográficos.  
Para obter detalhes, consulte [Provedor encapsulado de materiais](wrapped-provider.md).

**Provedor mais recente**  
O *Provedor mais recente* é um [provedor de materiais de criptografia](DDBEC-legacy-concepts.md#concept-material-provider) (CMP) que foi projetado para trabalhar com um [armazenamento de provedores](DDBEC-legacy-concepts.md#provider-store). Ele é CMPs obtido da loja do fornecedor e obtém os materiais criptográficos que retorna do CMPs. O provedor mais recente normalmente usa cada CMP para atender a várias solicitações de materiais de criptografia, mas você pode usar os recursos do armazenamento de provedor para gerenciar a frequência com a qual os materiais são reutilizados, determinar a frequência de rotação do CMP e até mesmo alterar o tipo de CMP usado sem alterar o provedor mais recente.  
Você pode usar o provedor mais recente com qualquer armazenamento compatível de provedor. O DynamoDB Encryption Client inclui MetaStore um, que é um provedor de armazenamento que retorna Wrapped. CMPs  
O provedor mais recente é uma boa opção para aplicativos que precisam minimizar as chamadas para sua origem de criptografia e para aplicativos que podem reutilizar alguns materiais de criptografia sem violar os requisitos de segurança. Por exemplo, ele permite que você proteja seus materiais criptográficos sob um [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)in [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(AWS KMS) sem chamar AWS KMS toda vez que criptografar ou descriptografar um item.  
Para obter detalhes, consulte [Provedor mais recente](most-recent-provider.md).

**Provedor estático de materiais**  
O Static Materials Provider foi projetado para testes, proof-of-concept demonstrações e compatibilidade antiga. Ele não gera material exclusivo de criptografia para cada item. No entanto, ele retorna as mesmas chaves de criptografia e assinatura que você oferece, e essas chaves são usadas diretamente para criptografar, descriptografar e assinar os itens da sua tabela.   
O [Provedor estático assimétrico](https://aws.github.io/aws-dynamodb-encryption-java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/providers/AsymmetricStaticProvider.html) na biblioteca Java não é um provedor estático. Ele apenas oferece construtores alternativos para o [CMP encapsulado](wrapped-provider.md). Ele é seguro para fins de produção, mas você deve usar o CMP encapsulado diretamente sempre que possível.

**Topics**
+ [

# Provedor direto de materiais do KMS
](direct-kms-provider.md)
+ [

# Provedor encapsulado de materiais
](wrapped-provider.md)
+ [

# Provedor mais recente
](most-recent-provider.md)
+ [

# Provedor estático de materiais
](static-provider.md)

# Provedor direto de materiais do KMS
<a name="direct-kms-provider"></a>

**nota**  
Nossa biblioteca de criptografia do lado do cliente foi [renomeada como SDK de criptografia de banco de dados da AWS](DDBEC-rename.md). O tópico a seguir fornece informações sobre as versões 1.*x*—2.*x* do DynamoDB Encryption Client para Java e versões 1.*x*—3*x* do DynamoDB Encryption Client para Python. Para obter mais informações, consulte [SDK de criptografia de banco de dados da AWS para obter suporte à versão do DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

O *Provedor direto de materiais do KMS* (Direct KMS Provider) protege os itens da sua tabela sob um [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys) que nunca deixa [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (AWS KMS) sem criptografia. O [provedor de materiais de criptografia](DDBEC-legacy-concepts.md#concept-material-provider) retorna uma chave de criptografia exclusiva e uma chave de assinatura para cada item da tabela. Para fazer isso, ele chama AWS KMS toda vez que você criptografa ou descriptografa um item.

Se você estiver processando itens do DynamoDB em alta frequência e em grande escala, poderá exceder os limites, causando atrasos AWS KMS [requests-per-secondno](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html#requests-per-second) processamento. Caso seja necessário ultrapassar esses limites, visite o [Centro do AWS Support](https://console.aws.amazon.com/support/home) e crie um caso. Também é possível considerar usar um provedor de materiais criptográficos com reutilização limitada de chaves, como o [provedor mais recente](most-recent-provider.md).

[Para usar o Direct KMS Provider, o chamador deve ter pelo menos uma AWS KMS key permissão para ligar para as operações [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)e [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) no. Conta da AWS](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) AWS KMS key O AWS KMS key deve ser uma chave de criptografia simétrica; o DynamoDB Encryption Client não oferece suporte à criptografia assimétrica. Se você estiver usando uma [tabela global do DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html), talvez queira especificar uma [chave multirregional do AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html). Para obter detalhes, consulte [Como usar](#provider-kms-how-to-use).

**nota**  
Quando você usa o Direct KMS Provider, os nomes e valores de seus atributos de chave primária aparecem em texto simples no [contexto de AWS KMS criptografia](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) e nos AWS CloudTrail registros de operações relacionadas. AWS KMS No entanto, o DynamoDB Encryption Client nunca expõe o texto simples de nenhum valor de atributo criptografado.

O Direct KMS Provider é um dos vários [provedores de materiais criptográficos](DDBEC-legacy-concepts.md#concept-material-provider) (CMPs) suportados pelo DynamoDB Encryption Client. Para obter informações sobre o outro CMPs, consulte[Provedor de materiais de criptografia](crypto-materials-providers.md).

**Para ver um código de exemplo, consulte:**
+ Java: [AwsKmsEncryptedItem](https://github.com/aws/aws-dynamodb-encryption-java/blob/master/examples/src/main/java/com/amazonaws/examples/AwsKmsEncryptedItem.java)
+ Python:, [aws-kms-encrypted-table[aws-kms-encrypted-item](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/aws_kms_encrypted_item.py)](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/aws_kms_encrypted_table.py)

**Topics**
+ [

## Como usar
](#provider-kms-how-to-use)
+ [

## Como funciona
](#provider-kms-how-it-works)

## Como usar
<a name="provider-kms-how-to-use"></a>

Para criar um Direct KMS Provider, use o parâmetro ID da chave para especificar uma [chave do KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys) de criptografia simétrica em sua conta. O valor do parâmetro do ID da chave pode ser o ID, o ARN da chave ou um nome de alias ou um ARN de alias do AWS KMS key. Para obter detalhes sobre os identificadores de chave, consulte [Identificadores de chave](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id) no *Guia do desenvolvedor do AWS Key Management Service *.

O Direct KMS Provider exige uma chave do KMS de criptografia simétrica. Não é possível usar uma chave do KMS assimétrica. É possível usar uma chave do KMS multirregional, chaves do KMS com material de chave importado ou uma chave do KMS em um armazenamento de chaves personalizado. Você deve ter as permissões [kms: GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) e [kms:decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) na chave KMS. Dessa forma, você deve usar uma chave gerenciada pelo cliente, não uma chave KMS AWS gerenciada ou de AWS propriedade.

O DynamoDB Encryption Client for Python determina a região para AWS KMS chamadas da região no valor do parâmetro de ID chave, se ele incluir um. Caso contrário, ele usa a Região no AWS KMS cliente, se você especificar uma, ou a Região que você configura no AWS SDK para Python (Boto3). Para obter informações sobre a seleção de regiões em Python, consulte [Configuração na Referência](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html) da API AWS SDK for Python (Boto3).

O DynamoDB Encryption Client for Java determina a região para AWS KMS chamadas da região no cliente, se AWS KMS o cliente que você especificar incluir uma região. Caso contrário, ela usa a região que você configura em AWS SDK para Java. Para obter informações sobre a seleção de regiões no AWS SDK para Java, consulte a [Região da AWS seleção](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-region-selection.html) no Guia do AWS SDK para Java desenvolvedor.

------
#### [ Java ]

```
// Replace the example key ARN and Region with valid values for your application
final String keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
final String region = 'us-west-2'
      
final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build();
final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, keyArn);
```

------
#### [ Python ]

O exemplo a seguir usa o ARN de chave para especificar o AWS KMS key. Se seu identificador de chave não incluir um Região da AWS, o DynamoDB Encryption Client obtém a região da sessão de Botocore configurada, se houver, ou dos padrões do Boto.

```
# Replace the example key ID with a valid value
kms_key = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key)
```

------

Se você estiver usando tabelas [globais do Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html), recomendamos que você criptografe seus dados com uma chave multirregional. AWS KMS As chaves multirregionais são AWS KMS keys diferentes e Regiões da AWS podem ser usadas de forma intercambiável porque têm o mesmo ID de chave e material de chave. Para obter mais detalhes, consulte [Usar chaves de várias regiões](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html), no *Guia do desenvolvedor do AWS Key Management Service *.

**nota**  
Se você estiver usando a [versão 2017.11.29](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.V1.html) de tabelas globais, deverá definir ações de atributos para que os campos de replicação reservados não sejam criptografados ou assinados. Para obter detalhes, consulte [Problemas com tabelas globais de versões mais antigas](troubleshooting.md#fix-global-tables).

Para usar uma chave multirregional com o DynamoDB Encryption Client, crie uma chave multirregional e replique-a nas regiões em que seu aplicativo é executado. Em seguida, configure o Direct KMS Provider para usar a chave multirregional na região em que o DynamoDB Encryption Client faz chamadas para o AWS KMS.

O exemplo a seguir configura o DynamoDB Encryption Client para criptografar dados na região Leste dos EUA (Norte da Virgínia) (us-east-1) e descriptografá-los na região Oeste dos EUA (Oregon) (us-west-2).

------
#### [ Java ]

Neste exemplo, o DynamoDB Encryption Client obtém a região para fazer AWS KMS chamadas da região no cliente. AWS KMS O valor `keyArn` identifica uma chave de várias regiões na mesma região.

```
// Encrypt in us-east-1

// Replace the example key ARN and Region with valid values for your application
final String usEastKey = 'arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab'
final String region = 'us-east-1'
      
final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build();
final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, usEastKey);
```

```
// Decrypt in us-west-2

// Replace the example key ARN and Region with valid values for your application
final String usWestKey = 'arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab'
final String region = 'us-west-2'
      
final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build();
final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, usWestKey);
```

------
#### [ Python ]

Neste exemplo, o DynamoDB Encryption Client obtém a região para fazer AWS KMS chamadas da região no ARN da chave.

```
# Encrypt in us-east-1

# Replace the example key ID with a valid value
us_east_key = 'arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab'
kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=us_east_key)
```

```
# Decrypt in us-west-2

# Replace the example key ID with a valid value
us_west_key = 'arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab'
kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=us_west_key)
```

------

## Como funciona
<a name="provider-kms-how-it-works"></a>

O Direct KMS Provider retorna as chaves de criptografia e assinatura que são protegidas por um AWS KMS key especificado, conforme exibido no diagrama a seguir.

![\[A entrada, o processamento e a saída de provedor direto do KMS no DynamoDB Encryption Client.\]](http://docs.aws.amazon.com/pt_br/database-encryption-sdk/latest/devguide/images/directKMS.png)

+ Para gerar materiais de criptografia, o Direct KMS Provider solicita AWS KMS a [geração de uma chave de dados exclusiva](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) para cada item usando uma AWS KMS key que você especifica. Ele deriva as chaves de criptografia e de assinatura do item da cópia de texto simples da [chave de dados](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys) e retorna essas chaves junto com a chave de dados criptografada, que é armazenada no [atributo de descrição do material](DDBEC-legacy-concepts.md#legacy-material-description) do item. 

  O criptografador do item usa as chaves de criptografia e assinatura e as remove da memória o mais rápido possível. Somente a cópia criptografada da chave de dados, da qual eles foram originados, é salva no item criptografado.
+ Para gerar materiais de decodificação, o Direct KMS Provider solicita a decodificação da chave AWS KMS de dados criptografada. Então, ele obtém chaves de verificação e assinatura provenientes da chave de dados em texto simples e as retorna para o criptografador de item.

  O criptografador de item verifica o item e, se a verificação for bem-sucedida, ele descriptografa os valores criptografados. Então, ele remove as chaves da memória o mais rápido possível.

### Obter materiais de criptografia
<a name="direct-kms-get-encryption-materials"></a>

Esta seção descreve detalhadamente as entradas, as saídas e o processamento do Direct KMS Provider quando ele recebe uma solicitação de materiais de criptografia do [criptografador de item](DDBEC-legacy-concepts.md#item-encryptor).

**Entrada ** (do aplicativo)
+ O ID da chave de um AWS KMS key. 

**Entrada** (do criptografador de itens)
+ [Contexto de criptografia do DynamoDB](concepts.md#encryption-context)

**Saída** (para o criptografador de itens)
+ Chave de criptografia (texto simples)
+ Chave de assinatura
+ Na [descrição do material atual](DDBEC-legacy-concepts.md#legacy-material-description): esses valores são salvos no atributo da descrição do material que o cliente adiciona ao item.
  + amzn-ddb-env-key: chave de dados codificada em Base64 criptografada pelo AWS KMS key
  + amzn-ddb-env-alg: Algoritmo de criptografia, por padrão [AES/256](https://csrc.nist.gov/projects/cryptographic-standards-and-guidelines/archived-crypto-projects/aes-development)
  + amzn-ddb-sig-alg: algoritmo de assinatura, por padrão, [Hmac /256 SHA256](https://en.wikipedia.org/wiki/HMAC)
  + amzn-ddb-wrap-alg: kms

**Processamento**

1. O Direct KMS Provider envia AWS KMS uma solicitação para usar o especificado AWS KMS key para [gerar uma chave de dados exclusiva](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) para o item. A operação retorna uma chave de texto simples e uma cópia criptografada de acordo com a AWS KMS key. Essa operação também é conhecida como o *material de chave inicial*.

   A solicitação inclui os seguintes valores em texto simples no [contexto de criptografia do AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context). Esses valores não confidenciais estão vinculados de maneira criptográfica ao objeto criptografado, assim, o mesmo contexto de criptografia será necessário na descriptografia. Você pode usar esses valores para identificar a chamada AWS KMS nos [AWS CloudTrail registros](https://docs.aws.amazon.com/kms/latest/developerguide/monitoring-overview.html).
   + amzn-ddb-env-alg — Algoritmo de criptografia, por padrão AES/256
   + amzn-ddb-sig-alg — Algoritmo de assinatura, por padrão Hmac /256 SHA256
   + (Opcional) aws-kms-table — *table name*
   + (Opcional) *partition key name* — *partition key value* (os valores binários são codificados em Base64)
   + (Opcional) *sort key name* — *sort key value* (os valores binários são codificados em Base64)

   O Direct KMS Provider obtém os valores para o contexto de AWS KMS criptografia do contexto de [criptografia do DynamoDB](concepts.md#encryption-context) para o item. Se o contexto de criptografia do DynamoDB não incluir um valor, como o nome da tabela, esse par nome-valor será omitido do contexto de criptografia. AWS KMS 

1. O Direct KMS Provider obtém uma chave de criptografia simétrica e uma chave de assinatura a partir da chave de dados. Por padrão, ele usa o [Secure Hash Algorithm (SHA) 256](https://en.wikipedia.org/wiki/SHA-2) e a [função de derivação de chave RFC5869 baseada em HMAC para derivar uma chave](https://tools.ietf.org/html/rfc5869) de criptografia simétrica AES de 256 bits e uma chave de assinatura HMAC-SHA-256 de 256 bits. 

1. O Direct KMS Provider retorna a saída para o criptografador do item.

1. O criptografador do item usa a chave de criptografia para criptografar os atributos especificados e a chave de assinatura para assiná-los, usando os algoritmos especificados na real descrição do material. Ele remove as chaves de texto simples da memória o mais rápido possível.

### Obter materiais de descriptografia
<a name="direct-kms-get-decryption-materials"></a>

Esta seção descreve detalhadamente as entradas, as saídas e o processamento do Direct KMS Provider quando ele recebe uma solicitação de materiais de descriptografia do [criptografador de itens](DDBEC-legacy-concepts.md#item-encryptor).

**Entrada ** (do aplicativo)
+ O ID da chave de um AWS KMS key. 

  O valor do ID da chave pode ser o ID, o ARN da chave ou um nome de alias ou um ARN de alias do AWS KMS key. Todos os valores que não forem incluídos no ID, como a região, deverão estar disponíveis no [perfil nomeado da AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles). O ARN da chave fornece todos os valores necessários para o AWS KMS .

**Entrada** (do criptografador de itens)
+ Uma cópia do [contexto de criptografia do DynamoDB](concepts.md#encryption-context) com o conteúdo do atributo de descrição do material.

**Saída** (para o criptografador de itens)
+ Chave de criptografia (texto simples)
+ Chave de assinatura

**Processamento**

1. O Direct KMS Provider obtém a chave de dados criptografada a partir do atributo de descrição do material no item criptografado. 

1. Ele solicita AWS KMS o uso do especificado AWS KMS key para [descriptografar a chave de dados criptografada](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html). A operação retorna uma chave de texto simples.

   Essa solicitação deve usar o mesmo [contexto de criptografia do AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) que foi usado para gerar e criptografar a chave de dados.
   + aws-kms-table – *table name*
   + *partition key name*— *partition key value* (os valores binários são codificados em Base64)
   + (Opcional) *sort key name* — *sort key value* (os valores binários são codificados em Base64)
   + amzn-ddb-env-alg — Algoritmo de criptografia, por padrão AES/256
   + amzn-ddb-sig-alg — Algoritmo de assinatura, por padrão Hmac /256 SHA256

1. O Direct KMS Provider usa o [Secure Hash Algorithm (SHA) 256](https://en.wikipedia.org/wiki/SHA-2) e a [função de derivação de chave RFC5869 baseada em HMAC para derivar uma chave](https://tools.ietf.org/html/rfc5869) de criptografia simétrica AES de 256 bits e uma chave de assinatura HMAC-SHA-256 de 256 bits da chave de dados. 

1. O Direct KMS Provider retorna a saída para o criptografador do item.

1. O criptografador do item usa a chave de assinatura para verificar o item. Se ele for bem-sucedido, usará a chave de criptografia simétrica para descriptografar os valores de atributos criptografados. Essas operações usam os algoritmos de criptografia e assinatura especificados na real descrição material. O criptografador do item remove as chaves de texto simples da memória o mais rápido possível.

# Provedor encapsulado de materiais
<a name="wrapped-provider"></a>

**nota**  
Nossa biblioteca de criptografia do lado do cliente foi [renomeada como SDK de criptografia de banco de dados da AWS](DDBEC-rename.md). O tópico a seguir fornece informações sobre as versões 1.*x*—2.*x* do DynamoDB Encryption Client para Java e versões 1.*x*—3*x* do DynamoDB Encryption Client para Python. Para obter mais informações, consulte [SDK de criptografia de banco de dados da AWS para obter suporte à versão do DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

O *provedor empacotado de materiais* (CMP empacotado) permite usar chaves encapsuladas e de assinatura a partir de qualquer origem com o DynamoDB Encryption Client. O Wrapped CMP não depende de nenhum AWS serviço. No entanto, você deve gerar e gerenciar suas chaves de empacotamento e assinatura fora do cliente, incluindo o fornecimento das chaves corretas para verificar e descriptografar o item. 

O CMP encapsulado gera uma chave exclusiva de criptografia para cada item. Ele encapsula a chave de criptografia do item com a chave de empacotamento que você fornece, e salva a chave de criptografia de item encapsulada no [atributo de descrição do material](DDBEC-legacy-concepts.md#legacy-material-description) do item. Como fornece as chaves de empacotamento e assinatura, você determina como as chaves de empacotamento e assinatura serão geradas e se elas serão exclusivas de cada item ou reutilizadas. 

O CMP encapsulado é uma implementação segura e uma boa opção para aplicativos que podem gerenciar materiais de criptografia.

O Wrapped CMP é um dos vários [fornecedores de materiais criptográficos](DDBEC-legacy-concepts.md#concept-material-provider) (CMPs) compatíveis com o DynamoDB Encryption Client. Para obter informações sobre o outro CMPs, consulte[Provedor de materiais de criptografia](crypto-materials-providers.md).

**Para ver um código de exemplo, consulte:**
+ Java: [AsymmetricEncryptedItem](https://github.com/aws/aws-dynamodb-encryption-java/blob/master/examples/src/main/java/com/amazonaws/examples/AsymmetricEncryptedItem.java)
+ Python:, [wrapped-rsa-encrypted-table[wrapped-symmetric-encrypted-table](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/wrapped_symmetric_encrypted_table.py)](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/wrapped_rsa_encrypted_table.py)

**Topics**
+ [

## Como usar
](#wrapped-cmp-how-to-use)
+ [

## Como funciona
](#wrapped-cmp-how-it-works)

## Como usar
<a name="wrapped-cmp-how-to-use"></a>

Para criar um CMP empacotado, especifique uma chave de empacotamento (necessária para a criptografia), uma chave de desempacotamento (necessária para a descriptografia) e uma chave de assinatura. É necessário fornecer chaves ao criptografar e descriptografar itens.

As chaves de empacotamento, desempacotamento e assinatura podem ser chaves simétricas ou pares de chaves assimétricos. 

------
#### [ Java ]

```
// This example uses asymmetric wrapping and signing key pairs
final KeyPair wrappingKeys = ...
final KeyPair signingKeys = ...

final WrappedMaterialsProvider cmp = 
    new WrappedMaterialsProvider(wrappingKeys.getPublic(),
                                 wrappingKeys.getPrivate(),
                                 signingKeys);
```

------
#### [ Python ]

```
# This example uses symmetric wrapping and signing keys
wrapping_key = ...
signing_key  = ...

wrapped_cmp = WrappedCryptographicMaterialsProvider(
    wrapping_key=wrapping_key,
    unwrapping_key=wrapping_key,
    signing_key=signing_key
)
```

------

## Como funciona
<a name="wrapped-cmp-how-it-works"></a>

O CMP encapsulado gera uma nova chave de criptografia para cada item. Ele usa as chaves de empacotamento, desempacotamento e assinatura que você fornece, conforme mostrado no diagrama a seguir.

![\[A entrada, o processamento e a saída do provedor empacotado de materiais no DynamoDB Encryption Client\]](http://docs.aws.amazon.com/pt_br/database-encryption-sdk/latest/devguide/images/wrappedCMP.png)


### Obter materiais de criptografia
<a name="wrapped-cmp-get-encryption-materials"></a>

Esta seção descreve em detalhes as entradas, as saídas e o processamento do provedor encapsulado de materiais (CMP encapsulado) quando ele recebe uma solicitação de materiais de criptografia. 

**Entrada** (do aplicativo)
+ Chave de empacotamento: uma chave simétrica do [Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES) ou uma chave pública [RSA](https://en.wikipedia.org/wiki/RSA_(cryptosystem)). Obrigatória se houver valores de atributo criptografados. Caso contrário, ela é opcional e ignorada.
+ Chave de descriptografia: opcional e ignorada. 
+ Chave de assinatura

**Entrada** (do criptografador de itens)
+ [Contexto de criptografia do DynamoDB](concepts.md#encryption-context)

**Saída** (para o criptografador de itens):
+ Chave de criptografia do item de texto simples
+ Chave de assinatura (inalterada)
+ [Descrição real do material](DDBEC-legacy-concepts.md#legacy-material-description): esses valores são salvos no [atributo de descrição do material](DDBEC-legacy-concepts.md#legacy-material-description) que o cliente adiciona ao item. 
  + `amzn-ddb-env-key`: chave de criptografia de item encapsulado codificada em Base64
  + `amzn-ddb-env-alg`: algoritmo de criptografia usado para criptografar o item. O padrão é AES-256-CBC.
  + `amzn-ddb-wrap-alg`: o algoritmo de empacotamento que o CMP empacotado usou para encapsular a chave de criptografia de item. Se a chave de empacotamento for uma chave do AES, ela será encapsulada com o `AES-Keywrap` não preenchido, conforme definido na [RFC 3394](https://tools.ietf.org/html/rfc3394.html). Se a chave de empacotamento for uma chave RSA, a chave será criptografada usando RSA OAEP com preenchimento. MGF1 

**Processamento**

Quando você criptografa um item, transmite uma chave de empacotamento e outra de assinatura. A chave de descriptografia é opcional e ignorada.

1. O CMP encapsulado gera uma chave exclusiva de criptografia simétrica para o item de tabela.

1. Ele usa a chave de empacotamento que você especifica para encapsular a chave de criptografia de item. Depois, ele a remove da memória o mais rápido possível.

1. Ele retorna a chave de criptografia do item de texto sem formatação, a chave de assinatura que você forneceu e uma [descrição real do material](DDBEC-legacy-concepts.md#legacy-material-description) que inclui a chave de criptografia do item empacotado e os algoritmos de criptografia e empacotamento.

1. O criptografador do item usa a chave de criptografia de texto simples para criptografar o item. Ele usa a chave de assinatura que você forneceu para assinar o item. Depois, ele remove as chaves de texto simples da memória o mais rápido possível. Ele copia os campos na descrição real do material, incluindo a chave de criptografia encapsulada (`amzn-ddb-env-key`), para o atributo de descrição do material do item.

### Obter materiais de descriptografia
<a name="wrapped-cmp-get-decryption-materials"></a>

Esta seção descreve em detalhes as entradas, as saídas e o processamento do provedor encapsulado de materiais (CMP encapsulado) quando ele recebe uma solicitação de materiais de descriptografia. 

**Entrada** (do aplicativo)
+ Chave de criptografia: opcional e ignorada.
+ Chave de descriptografia: a mesma chave simétrica [Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES) ou a chave privada [RSA](https://en.wikipedia.org/wiki/RSA_(cryptosystem)) que corresponde à chave pública RSA usada para criptografia. Obrigatória se houver valores de atributo criptografados. Caso contrário, ela é opcional e ignorada.
+ Chave de assinatura

**Entrada** (do criptografador de itens)
+ Uma cópia do [contexto de criptografia do DynamoDB](concepts.md#encryption-context) com o conteúdo do atributo de descrição do material.

**Saída** (para o criptografador de itens)
+ Chave de criptografia do item de texto simples
+ Chave de assinatura (inalterada)

**Processamento**

Quando você descriptografa um item, transmite uma chave de desempacotamento e outra de assinatura. A chave de empacotamento é opcional e ignorada.

1. O CMP encapsulado obtém a chave de criptografia de item encapsulado do atributo de descrição do material do item.

1. Ele usa o algoritmo e a chave de desempacotamento para desencapsular a chave de criptografia de item. 

1. Ele retorna a chave de criptografia de item de texto simples, a chave de assinatura e os algoritmos de criptografia e assinatura para o criptografador do item.

1. O criptografador do item usa a chave de assinatura para verificar o item. Quando consegue fazer isso, ele usa a chave de criptografia de item para descriptografar o item. Depois, ele remove as chaves de texto simples da memória o mais rápido possível.

# Provedor mais recente
<a name="most-recent-provider"></a>

**nota**  
Nossa biblioteca de criptografia do lado do cliente foi [renomeada como SDK de criptografia de banco de dados da AWS](DDBEC-rename.md). O tópico a seguir fornece informações sobre as versões 1.*x*—2.*x* do DynamoDB Encryption Client para Java e versões 1.*x*—3*x* do DynamoDB Encryption Client para Python. Para obter mais informações, consulte [SDK de criptografia de banco de dados da AWS para obter suporte à versão do DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

O *Provedor mais recente* é um [provedor de materiais de criptografia](DDBEC-legacy-concepts.md#concept-material-provider) (CMP) que foi projetado para trabalhar com um [armazenamento de provedores](DDBEC-legacy-concepts.md#provider-store). Ele é CMPs obtido da loja do fornecedor e obtém os materiais criptográficos que retorna do CMPs. Normalmente, ele usa cada CMP para atender a várias solicitações de materiais de criptografia. Mas você pode usar os recursos do armazenamento de provedores para gerenciar a frequência com a qual os materiais são reutilizados, determinar a frequência de rotação do CMP e até mesmo alterar o tipo de CMP usado sem alterar o provedor mais recente.

**nota**  
O código associado ao símbolo `MostRecentProvider` do provedor mais recente pode armazenar materiais criptográficos na memória durante a vida útil do processo. Isso pode permitir que um chamador use chaves que não está mais autorizado a usar.   
O símbolo `MostRecentProvider` está obsoleto nas versões mais antigas compatíveis do DynamoDB Encryption Client e foi removido da versão 2.0.0. Ele é substituído pelo símbolo `CachingMostRecentProvider`. Para obter detalhes, consulte [Atualizações do provedor mais recente](#mrp-versions).

O provedor mais recente é uma boa opção para aplicativos que precisam minimizar as chamadas para o armazenamento de provedores, sua origem de criptografia e aplicativos que podem reutilizar alguns materiais de criptografia sem violar os requisitos de segurança. Por exemplo, ele permite que você proteja seus materiais criptográficos sob um [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)in [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(AWS KMS) sem chamar AWS KMS toda vez que você criptografa ou descriptografa um item.

O repositório do provedor que você escolher determina o tipo do CMPs que o provedor mais recente usa e com que frequência ele obtém um novo CMP. Você pode usar qualquer armazenamento compatível de provedores com o provedor mais recente, incluindo os armazenamentos de provedores personalizados que você criar. 

O DynamoDB Encryption Client inclui *MetaStore*um que cria e [retorna Wrapped Materials Providers (Wrapped](wrapped-provider.md)). CMPs Ele MetaStore salva várias versões do Wrapped CMPs que ele gera em uma tabela interna do DynamoDB e as protege com criptografia do lado do cliente por uma instância interna do DynamoDB Encryption Client. 

Você pode configurar o MetaStore para usar qualquer tipo de CMP interno para proteger os materiais na tabela, incluindo um [provedor de KMS direto](direct-kms-provider.md) que gera materiais criptográficos protegidos por você AWS KMS key, um CMP empacotado que usa chaves de empacotamento e assinatura fornecidas por você ou um CMP personalizado compatível que você cria.

**Para ver um código de exemplo, consulte:**
+ Java: [MostRecentEncryptedItem](https://github.com/aws/aws-dynamodb-encryption-java/blob/master/examples/src/main/java/com/amazonaws/examples/MostRecentEncryptedItem.java)
+ Python: [most\$1recent\$1provider\$1encrypted\$1table](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/most_recent_provider_encrypted_table.py)

**Topics**
+ [

## Como usar
](#mrp-how-to-use-it)
+ [

## Como funciona
](#mrp-how-it-works)
+ [

## Atualizações do provedor mais recente
](#mrp-versions)

## Como usar
<a name="mrp-how-to-use-it"></a>

Para criar um provedor mais recente, você precisa criar e configurar um armazenamento de provedores e, em seguida, criar um provedor mais recente que usa o armazenamento de provedores. 

[Os exemplos a seguir mostram como criar um provedor mais recente que usa MetaStore e protege as versões em sua tabela interna do DynamoDB com materiais criptográficos de um provedor de KMS direto.](direct-kms-provider.md) Estes exemplos usam o símbolo [`CachingMostRecentProvider`](#mrp-versions). 

Cada provedor mais recente tem um nome que o identifica CMPs na MetaStore tabela, uma configuração [time-to-live](#most-recent-provider-ttl)(TTL) e uma configuração de tamanho de cache que determina quantas entradas o cache pode conter. Esses exemplos definem o tamanho do cache para 1000 entradas e um TTL de 60 segundos.

------
#### [ Java ]

```
// Set the name for MetaStore's internal table
final String keyTableName = 'metaStoreTable'

// Set the Region and AWS KMS key
final String region = 'us-west-2'
final String keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

// Set the TTL and cache size
final long ttlInMillis = 60000;
final long cacheSize = 1000;

// Name that identifies the MetaStore's CMPs in the provider store
final String materialName = 'testMRP'

// Create an internal DynamoDB client for the MetaStore
final AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.standard().withRegion(region).build();

// Create an internal Direct KMS Provider for the MetaStore
final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build();
final DirectKmsMaterialProvider kmsProv = new DirectKmsMaterialProvider(kms, keyArn);

// Create an item encryptor for the MetaStore,
// including the Direct KMS Provider
final DynamoDBEncryptor keyEncryptor = DynamoDBEncryptor.getInstance(kmsProv);

// Create the MetaStore
final MetaStore metaStore = new MetaStore(ddb, keyTableName, keyEncryptor);

//Create the Most Recent Provider
final CachingMostRecentProvider cmp = new CachingMostRecentProvider(metaStore, materialName, ttlInMillis, cacheSize);
```

------
#### [ Python ]

```
# Designate an AWS KMS key
kms_key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'

# Set the name for MetaStore's internal table
meta_table_name = 'metaStoreTable'

# Name that identifies the MetaStore's CMPs in the provider store
material_name = 'testMRP'

# Create an internal DynamoDB table resource for the MetaStore
meta_table = boto3.resource('dynamodb').Table(meta_table_name)

# Create an internal Direct KMS Provider for the MetaStore
kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key_id)
    
# Create the MetaStore with the Direct KMS Provider
meta_store = MetaStore(
    table=meta_table,
    materials_provider=kms_cmp
)

# Create a Most Recent Provider using the MetaStore
#    Sets the TTL (in seconds) and cache size (# entries)
most_recent_cmp = MostRecentProvider(
    provider_store=meta_store,
    material_name=material_name,
    version_ttl=60.0,
    cache_size=1000
)
```

------

## Como funciona
<a name="mrp-how-it-works"></a>

O fornecedor mais recente CMPs vem de uma loja de fornecedores. Em seguida, ele usa o CMP para gerar os materiais de criptografia que retorna ao criptografador de item.

### Sobre o provedor mais recente
<a name="about-mrp"></a>

O Provedor mais recente obtém um [provedor de materiais de criptografia](DDBEC-legacy-concepts.md#concept-material-provider) (CMP) de um [armazenamento de provedores](DDBEC-legacy-concepts.md#provider-store). Em seguida, ele usa o CMP para gerar os materiais de criptografia que retorna. Cada provedor mais recente está associado a uma loja de provedores, mas uma loja de provedores pode fornecer CMPs a vários provedores em vários hosts.

O provedor mais recente pode trabalhar com qualquer CMP compatível de qualquer armazenamento de provedores. Ele solicita materiais de criptografia ou de descriptografia do CMP e retorna a saída ao criptografador do item. Não executa nenhuma operação de criptografia.

Para solicitar um CMP do armazenamento de provedores, o provedor mais recente fornece o nome de material e a versão de um CMP existente que deseja usar. Para materiais de criptografia, o provedor mais recente sempre solicita a versão mais recente. Para materiais de descriptografia, ele solicita a versão do CMP que foi usada para criar os materiais de criptografia, conforme exibido no diagrama a seguir.

![\[Um Provedor mais recente\]](http://docs.aws.amazon.com/pt_br/database-encryption-sdk/latest/devguide/images/most-recent-provider-1.png)


O provedor mais recente salva as versões do CMPs que o provedor armazena retornou em um cache local de uso menos recente (LRU) na memória. O cache permite que o provedor mais recente obtenha o CMPs que precisa sem chamar a loja do provedor para cada item. Você pode limpar o cache sob demanda.

O provedor mais recente usa um [time-to-livevalor](#most-recent-provider-ttl) configurável que você pode ajustar com base nas características do seu aplicativo.

### Sobre o MetaStore
<a name="about-metastore"></a>

Você pode usar um provedor mais recente com qualquer armazenamento de provedores, incluindo um armazenamento de provedores personalizado compatível. O DynamoDB Encryption Client inclui MetaStore uma implementação segura que você pode configurar e personalizar.

*MetaStore*A é um [repositório de provedores](DDBEC-legacy-concepts.md#provider-store) que cria e retorna [Wrapped CMPs](wrapped-provider.md) configurados com a chave de empacotamento, a chave de desempacotamento e a chave de assinatura exigidas pelo Wrapped. CMPs MetaStore A é uma opção segura para um provedor mais recente porque o Wrapped CMPs sempre gera chaves de criptografia de item exclusivas para cada item. Somente a chave de empacotamento que protege a chave de criptografia do item e as chaves de assinatura é reutilizada.

O diagrama a seguir mostra os componentes do MetaStore e como ele interage com o provedor mais recente.

![\[A MetaStore\]](http://docs.aws.amazon.com/pt_br/database-encryption-sdk/latest/devguide/images/most-recent-provider-2.png)


O MetaStore gera o Wrapped e CMPs, em seguida, o armazena (em formato criptografado) em uma tabela interna do DynamoDB. A chave de partição é o nome do material do provedor mais recente; a chave de classificação, seu número de versão. Os materiais na tabela são protegidos por um DynamoDB Encryption Client interno, incluindo um criptografador de item e um [provedor de materiais de criptografia](DDBEC-legacy-concepts.md#concept-material-provider) (CMP) interno.

Você pode usar qualquer tipo de CMP interno em seu MetaStore, incluindo um [provedor de KMS direto](wrapped-provider.md), um CMP empacotado com materiais criptográficos fornecidos por você ou um CMP personalizado compatível. Se o CMP interno do seu MetaStore for um provedor de KMS direto, suas chaves reutilizáveis de empacotamento e assinatura serão protegidas por um in (). [AWS KMS key[AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)AWS KMS As MetaStore chamadas AWS KMS sempre que ele adiciona uma nova versão do CMP à tabela interna ou obtém uma versão do CMP da tabela interna.

### Definindo um time-to-live valor
<a name="most-recent-provider-ttl"></a>

Você pode definir um valor time-to-live (TTL) para cada provedor mais recente que você criar. Em geral, use o valor TTL mais baixo que seja prático para a sua aplicação.

O uso do valor TTL é alterado no símbolo `CachingMostRecentProvider` do provedor mais recente. 

**nota**  
O símbolo `MostRecentProvider` do Provedor mais recente está obsoleto nas versões mais antigas compatíveis do DynamoDB Encryption Client e foi removido da versão 2.0.0. Ele é substituído pelo símbolo `CachingMostRecentProvider`. Recomendamos que você atualize seu código o mais rápido possível. Para obter detalhes, consulte [Atualizações do provedor mais recente](#mrp-versions).

**`CachingMostRecentProvider`**  
O `CachingMostRecentProvider` usa o valor TTL de duas maneiras diferentes.   
+ O TTL determina com que frequência o provedor mais recente verifica o armazenamento do provedor em busca de uma nova versão do CMP. Se uma nova versão estiver disponível, o provedor mais recente substituirá o CMP e atualizará os materiais criptográficos. Caso contrário, ele continuará usando o CMP atual e os materiais criptográficos.
+ O TTL determina por quanto tempo CMPs o cache pode ser usado. Antes de usar uma CMP em cache para criptografia, o provedor mais recente avalia seu tempo no cache. Se o tempo de cache do CMP exceder o TTL, o CMP será removido do cache e o provedor mais recente obterá um novo CMP da versão mais recente do repositório do provedor.

**`MostRecentProvider`**  
No `MostRecentProvider`, o TTL determina com que frequência o provedor mais recente verifica o armazenamento do provedor em busca de uma nova versão do CMP. Se uma nova versão estiver disponível, o provedor mais recente substituirá o CMP e atualizará os materiais criptográficos. Caso contrário, ele continuará usando o CMP atual e os materiais criptográficos.

O TTL não determina com que frequência uma nova versão do CMP é criada. Crie novas versões do CMP [alternando os materiais criptográficos](#most-recent-provider-rotate).

Um valor ideal de TTL varia de acordo com o aplicativo e suas metas de latência e disponibilidade. Um TTL mais baixo melhora seu perfil de segurança ao reduzir o tempo em que os materiais criptográficos são armazenados na memória. Além disso, um TTL mais baixo atualiza as informações críticas com mais frequência. Por exemplo, se seu CMP interno for um [Direct KMS Provider](direct-kms-provider.md), ele verificará com mais frequência se o chamador ainda está autorizado a usar um AWS KMS key.

No entanto, se o TTL for muito breve, as chamadas frequentes para o armazenamento do provedor podem aumentar seus custos e fazer com que o armazenamento do provedor reduza as solicitações do seu aplicativo e de outros aplicativos que compartilham sua conta de serviço. Também é possível se beneficiar da coordenação do TTL com a taxa na qual você alterna os materiais criptográficos. 

Durante o teste, varie o tamanho do TTL e do cache em diferentes cargas de trabalho até encontrar uma configuração que funcione para seu aplicativo e seus padrões de segurança e desempenho.

### Alternar os materiais de criptografia
<a name="most-recent-provider-rotate"></a>

Quando um provedor mais recente precisa de materiais de criptografia, ele sempre usa a versão mais recente de seu CMP que conhece. A frequência com que ele verifica uma versão mais recente é determinada pelo valor [time-to-live](#most-recent-provider-ttl)(TTL) que você define ao configurar o provedor mais recente. 

Quando o TTL expira, o provedor mais recente verifica o armazenamento do provedor em busca de uma nova versão do CMP. Se houver um disponível, o provedor mais recente o obterá e substituirá o CMP em seu cache. Ele usa esse CMP e seus materiais criptográficos até descobrir que o armazenamento do provedor tem uma versão mais recente.

Para solicitar que o armazenamento de provedores crie uma nova versão de um CMP para um provedor mais recente, chame a operação Criar Novo Provedor do armazenamento de provedores com o nome do material do provedor mais recente. O armazenamento de provedores cria um novo CMP e salva uma cópia criptografada em seu armazenamento interno com um número da versão mais recente. (Ele também retorna um CMP, mas você pode descartá-lo.) Como resultado, na próxima vez que o provedor mais recente consultar o repositório do provedor para obter o número máximo de versão CMPs, ele obterá o novo número de versão maior e o usará em solicitações subsequentes à loja para ver se uma nova versão da CMP foi criada.

Você pode programar as chamadas da operação Criar Novo Provedor com base no tempo, no número de itens ou de atributos processados ou em qualquer outra métrica que seja aceitável para seu aplicativo.

### Obter materiais de criptografia
<a name="most-recent-provider-encrypt"></a>

O provedor mais recente usa o seguinte processo, mostrado neste diagrama, para obter os materiais de criptografia retornados ao criptografador de item. A saída depende do tipo de CMP que o armazenamento de provedores retorna. O provedor mais recente pode usar qualquer loja de provedores compatível, incluindo a MetaStore que está incluída no DynamoDB Encryption Client.

![\[A entrada, o processamento e a saída do Provedor mais recente no DynamoDB Encryption Client.\]](http://docs.aws.amazon.com/pt_br/database-encryption-sdk/latest/devguide/images/most-recent-provider-provider-store.png)


Ao criar um provedor mais recente usando o [`CachingMostRecentProvider`símbolo](#mrp-versions), você especifica um repositório de provedores, um nome para o provedor mais recente e um valor [time-to-live](#most-recent-provider-ttl)(TTL). Também é possível especificar opcionalmente um tamanho de cache, que determina o número máximo de materiais criptográficos que podem existir no cache.

Quando o criptografador de item solicita ao provedor mais recente os materiais de criptografia, esse provedor começa pesquisando em seu cache a versão mais recente do CMP.
+ Se ele encontrar a versão mais recente do CMP no cache e o CMP não tiver excedido o valor TTL, o provedor mais recente usará o CMP para gerar materiais de criptografia. Em seguida, ele retorna os materiais de criptografia ao criptografador de item. Essa operação não requer uma chamada para o armazenamento de provedores.
+ Se a versão mais recente do CMP não estiver no cache, ou se estiver no cache mas tiver excedido o valor TTL, o provedor mais recente solicitará um CMP do armazenamento de provedores. A solicitação inclui o nome do material do provedor mais recente e o número da versão mais recente que ele conhece.

  1. O armazenamento de provedores retorna um CMP de seu armazenamento persistente. Se o repositório do provedor for um MetaStore, ele obterá uma CMP encriptada encriptada de sua tabela interna do DynamoDB usando o nome do material Most Recent Provider como chave de partição e o número da versão como chave de classificação. O MetaStore usa seu criptografador de itens interno e CMP interno para descriptografar o Wrapped CMP. Em seguida, ele retorna o CMP com texto simples ao provedor mais recente. Se o CMP interno for um [Direct KMS Provider](direct-kms-provider.md), esta etapa incluirá uma chamada ao [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (AWS KMS).

  1. O CMP adiciona o campo `amzn-ddb-meta-id` à [descrição real do material](DDBEC-legacy-concepts.md#legacy-material-description). O valor é o nome do material e a versão do CMP em sua tabela interna. O armazenamento de provedores retorna o CMP ao provedor mais recente.

  1. O provedor mais recente armazena o CMP na memória.

  1. O provedor mais recente usa o CMP para gerar materiais de criptografia. Em seguida, ele retorna os materiais de criptografia ao criptografador de item.

### Obter materiais de descriptografia
<a name="most-recent-provider-decrypt"></a>

Quando o criptografador do item solicita ao provedor mais recente os materiais de descriptografia, esse provedor usa o seguinte processo para obtê-los e retorná-los.

1. O provedor mais recente solicita ao armazenamento de provedores o número da versão dos materiais de criptografia que foram usados para criptografar o item. Ele passa a descrição real do material a partir do [atributo de descrição do material](DDBEC-legacy-concepts.md#legacy-material-description) do item.

1. O armazenamento de provedores obtém o número da versão do CMP criptografado a partir do campo `amzn-ddb-meta-id` na descrição real do material e o retorna ao provedor mais recente.

1. O provedor mais recente pesquisa seu cache em busca da versão do CMP que foi usada para criptografar e assinar o item.
+ Se descobrir que a versão correspondente do CMP está em seu cache e o CMP não excedeu o [valor time-to-live (TTL)](#most-recent-provider-ttl), o provedor mais recente usa o CMP para gerar materiais de descriptografia. Em seguida, ele retorna os materiais de descriptografia ao criptografador de item. Essa operação não requer uma chamada para o armazenamento de provedores ou qualquer outro CMP.
+ Se a versão do CMP correspondente não estiver no cache, ou se o AWS KMS key estiver no cache mas tiver excedido o valor TTL, o provedor mais recente solicitará um CMP do armazenamento de provedores. Ele envia o nome do material e o número da versão do CMP criptografado na solicitação.

  1. O armazenamento de provedores pesquisa seu armazenamento persistente em busca do CMP usando o nome do provedor mais recente como a chave de partição e o número da versão como a chave de classificação.
     + Se o nome e o número da versão não estiverem no armazenamento persistente, o armazenamento de provedores gera uma exceção. Se o armazenamento de provedores foi usado para gerar o CMP, o CMP deve ser armazenado no armazenamento persistente, a menos que tenha sido intencionalmente excluído.
     + Se o CMP com o nome e o número de versão correspondentes estiverem no armazenamento persistente do armazenamento de provedores, este retornará o CMP especificado ao provedor mais recente. 

       Se o repositório do provedor for um MetaStore, ele obterá o CMP criptografado de sua tabela do DynamoDB. Em seguida, ele usa materiais de criptografia do CMP interno para descriptografar o CMP criptografado antes de retornar o CMP ao provedor mais recente. Se o CMP interno for um [Direct KMS Provider](direct-kms-provider.md), esta etapa incluirá uma chamada ao [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (AWS KMS).

  1. O provedor mais recente armazena o CMP na memória.

  1. O provedor mais recente usa o CMP para gerar materiais de descriptografia. Em seguida, ele retorna os materiais de descriptografia ao criptografador de item.

## Atualizações do provedor mais recente
<a name="mrp-versions"></a>

O símbolo do provedor mais recente é alterado de `MostRecentProvider` para `CachingMostRecentProvider`. 

**nota**  
O símbolo `MostRecentProvider`, que representa o provedor mais recente, foi descontinuado na versão 1.15 do DynamoDB Encryption Client for Java e na versão 1.3 do DynamoDB Encryption Client for Python e removido das versões 2.0.0 do DynamoDB Encryption Client nas duas implementações de linguagem. Use a `CachingMostRecentProvider` em vez disso.

O `CachingMostRecentProvider` implementa as seguintes mudanças:
+ O remove `CachingMostRecentProvider` periodicamente materiais criptográficos da memória quando seu tempo na memória excede o valor configurado [time-to-live (TTL).](#most-recent-provider-ttl) 

  O `MostRecentProvider` pode armazenar materiais criptográficos na memória durante toda a vida útil do processo. Como resultado, o provedor mais recente pode não estar ciente das alterações na autorização. Ele pode usar chaves de criptografia depois que as permissões do chamador para usá-las forem revogadas. 

  Se você não conseguir atualizar para essa nova versão, poderá obter um efeito semelhante chamando periodicamente o método `clear()` no cache. Esse método limpa manualmente o conteúdo do cache e exige que o provedor mais recente solicite um novo CMP e novos materiais criptográficos. 
+ O `CachingMostRecentProvider` também inclui uma configuração de tamanho de cache que oferece mais controle sobre o cache.

Para atualizar para o `CachingMostRecentProvider`, você precisa alterar o nome do símbolo em seu código. Em todos os outros aspectos, o `CachingMostRecentProvider` é totalmente compatível com versões anteriores do `MostRecentProvider`. Você não precisa criptografar novamente nenhum item da tabela.

No entanto, o `CachingMostRecentProvider` gera mais chamadas para a infraestrutura principal subjacente. Ele chama a loja do provedor pelo menos uma vez em cada intervalo time-to-live (TTL). Aplicativos com vários ativos CMPs (devido à rotação frequente) ou aplicativos com grandes frotas provavelmente serão sensíveis a essa mudança. 

Antes de lançar seu código atualizado, teste-o minuciosamente para garantir que as chamadas mais frequentes não prejudiquem seu aplicativo nem causem limitação por serviços dos quais seu provedor depende, como AWS Key Management Service () ou AWS KMS Amazon DynamoDB. Para mitigar quaisquer problemas de desempenho, ajuste o tamanho do cache e o time-to-live do `CachingMostRecentProvider` com base nas características de desempenho observadas. Para obter orientações, consulte [Definindo um time-to-live valor](#most-recent-provider-ttl).

# Provedor estático de materiais
<a name="static-provider"></a>

**nota**  
Nossa biblioteca de criptografia do lado do cliente foi [renomeada como SDK de criptografia de banco de dados da AWS](DDBEC-rename.md). O tópico a seguir fornece informações sobre as versões 1.*x*—2.*x* do DynamoDB Encryption Client para Java e versões 1.*x*—3*x* do DynamoDB Encryption Client para Python. Para obter mais informações, consulte [SDK de criptografia de banco de dados da AWS para obter suporte à versão do DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

O *Static Materials Provider* (Static CMP) é um [provedor de materiais criptográficos](DDBEC-legacy-concepts.md#concept-material-provider) (CMP) muito simples, destinado a testes, proof-of-concept demonstrações e compatibilidade antiga.

Para usar o CMP estático para criptografar um item de tabela, forneça uma chave de criptografia simétrica do [Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES) e uma chave de assinatura ou um par de chaves. Você deve fornecer as mesmas chaves para descriptografar o item criptografado. O CMP estático não realiza operações de criptografia. Em vez disso, ele transmite inalteradas as chaves de criptografia que você fornece ao criptografador do item. O criptografador do item criptografa os itens diretamente na chave de criptografia. Depois, ele usa a chave de assinatura diretamente para assiná-los. 

Como o CMP estático não gera nenhum material exclusivo de criptografia, todos os itens da tabela que você processa são criptografados com a mesma chave de criptografia e assinados pela mesma chave de assinatura. Ao usar a mesma chave para criptografar os valores de atributos em diversos itens ou a mesma chave ou par de chaves para assinar todos os itens, você corre o risco de ultrapassar os limites de criptografia das chaves. 

**nota**  
O [Provedor estático assimétrico](https://aws.github.io/aws-dynamodb-encryption-java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/providers/AsymmetricStaticProvider.html) na biblioteca Java não é um provedor estático. Ele apenas oferece construtores alternativos para o [CMP encapsulado](wrapped-provider.md). Ele é seguro para fins de produção, mas você deve usar o CMP encapsulado diretamente sempre que possível.

O Static CMP é um dos vários [fornecedores de materiais criptográficos](DDBEC-legacy-concepts.md#concept-material-provider) (CMPs) compatíveis com o DynamoDB Encryption Client. Para obter informações sobre o outro CMPs, consulte[Provedor de materiais de criptografia](crypto-materials-providers.md).

**Para ver um código de exemplo, consulte:**
+ Java: [SymmetricEncryptedItem](https://github.com/aws/aws-dynamodb-encryption-java/blob/master/examples/src/main/java/com/amazonaws/examples/SymmetricEncryptedItem.java)

**Topics**
+ [

## Como usar
](#static-cmp-how-to-use)
+ [

## Como funciona
](#static-cmp-how-it-works)

## Como usar
<a name="static-cmp-how-to-use"></a>

Para criar um provedor estático, forneça uma chave de criptografia ou um par de chaves e uma chave de assinatura ou um par de chaves. É necessário fornecer material de chave para criptografar e descriptografar os itens de tabela.

------
#### [ Java ]

```
// To encrypt
SecretKey cek = ...;        // Encryption key
SecretKey macKey =  ...;    // Signing key
EncryptionMaterialsProvider provider = new SymmetricStaticProvider(cek, macKey);

// To decrypt
SecretKey cek = ...;        // Encryption key
SecretKey macKey =  ...;    // Verification key
EncryptionMaterialsProvider provider = new SymmetricStaticProvider(cek, macKey);
```

------
#### [ Python ]

```
# You can provide encryption materials, decryption materials, or both
encrypt_keys = EncryptionMaterials(
    encryption_key = ...,
    signing_key = ...
)

decrypt_keys = DecryptionMaterials(
    decryption_key = ...,
    verification_key = ...
)

static_cmp = StaticCryptographicMaterialsProvider(
    encryption_materials=encrypt_keys
    decryption_materials=decrypt_keys
)
```

------

## Como funciona
<a name="static-cmp-how-it-works"></a>

O provedor estático transmite as chaves de criptografia e assinatura que você fornece ao criptografador do item, onde elas são usadas diretamente para criptografar e assinar os itens da tabela. As mesmas chaves são usadas para todos os itens, a menos que você forneça chaves diferentes para cada um deles.

![\[A entrada, o processamento e a saída do Provedor estático de materiais no DynamoDB Encryption Client.\]](http://docs.aws.amazon.com/pt_br/database-encryption-sdk/latest/devguide/images/staticCMP.png)


### Obter materiais de criptografia
<a name="static-cmp-get-encryption-materials"></a>

Esta seção descreve em detalhes as entradas, as saídas e o processamento do provedor estático de materiais (CMP estático) quando ele recebe uma solicitação de materiais de criptografia.

**Entrada** (do aplicativo)
+ Chave de criptografia - deve ser uma chave simétrica, como uma chave do [Advanced Encryption Standard](https://tools.ietf.org/html/rfc3394.html) (AES). 
+ Chave de assinatura - Pode ser uma chave simétrica ou um par de chaves assimétrico. 

**Entrada** (do criptografador de itens)
+ [Contexto de criptografia do DynamoDB](concepts.md#encryption-context)

**Saída** (para o criptografador de itens)
+ A chave de criptografia transmitida como entrada.
+ A chave de assinatura transmitida como entrada.
+ Descrição real do material: a [descrição solicitada do material](DDBEC-legacy-concepts.md#legacy-material-description), se houver, inalterada.

### Obter materiais de descriptografia
<a name="static-cmp-get-decryption-materials"></a>

Esta seção descreve em detalhes as entradas, as saídas e o processamento do provedor estático de materiais (CMP estático) quando ele recebe uma solicitação de materiais de descriptografia.

Embora ela inclua métodos separados para obter materiais de criptografia e de descriptografia, o comportamento é o mesmo. 

**Entrada** (do aplicativo)
+ Chave de criptografia - deve ser uma chave simétrica, como uma chave do [Advanced Encryption Standard](https://tools.ietf.org/html/rfc3394.html) (AES). 
+ Chave de assinatura - Pode ser uma chave simétrica ou um par de chaves assimétrico. 

**Entrada** (do criptografador de itens)
+ [Contexto de criptografia do DynamoDB](concepts.md#encryption-context) (não usado)

**Saída** (para o criptografador de itens)
+ A chave de criptografia transmitida como entrada.
+ A chave de assinatura transmitida como entrada.