

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Fornitore di materiali crittografici
<a name="crypto-materials-providers"></a>

**Nota**  
[La nostra libreria di crittografia lato client è stata rinominata Database Encryption SDK. AWS](DDBEC-rename.md) Il seguente argomento fornisce informazioni sulle versioni 1. *x* —2. *x* del DynamoDB Encryption Client for Java e versioni 1. *x —3.* *x* del client di crittografia DynamoDB per Python. Per ulteriori informazioni, consulta [AWS Database Encryption SDK per il supporto della versione DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

Una delle decisioni più importanti da prendere quando si utilizza il DynamoDB Encryption Client è la selezione di [un fornitore di materiali crittografici](DDBEC-legacy-concepts.md#concept-material-provider) (CMP). Il CMP raccoglie e restituisce i materiali crittografici al componente di crittografia dell'item. Determina inoltre la modalità di generazione delle chiavi di crittografia e di firma, gli algoritmi di crittografia e firma utilizzati e se i nuovi materiali di chiave devono essere creati o riutilizzati per ciascun item. 

Puoi scegliere una CMP tra le implementazioni fornite nelle librerie DynamoDB Encryption Client o creare una CMP personalizzata compatibile. La scelta del CMP potrebbe inoltre dipendere dal [linguaggio di programmazione](programming-languages.md) utilizzato.

Questo argomento descrive le più comuni CMPs e offre alcuni consigli per aiutarvi a scegliere quella migliore per la vostra applicazione.

**Provider di materiali KMS diretto**  
Direct KMS Materials Provider protegge gli elementi della tabella in [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)modo che non rimangano mai [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)(AWS KMS) non crittografati. Non è necessario che l'applicazione generi o gestisca i materiali crittografici. Poiché utilizza il AWS KMS key per generare chiavi di crittografia e firma uniche per ogni elemento, questo provider chiama AWS KMS ogni volta che crittografa o decrittografa un elemento.   
Se utilizzate AWS KMS e una sola AWS KMS chiamata per transazione è pratica per la vostra applicazione, questo provider è una buona scelta.  
Per informazioni dettagliate, vedi [Provider di materiali KMS diretto](direct-kms-provider.md).

**Provider di materiali di sottoposti a wrapping (CMP di sottoposti a wrapping)**  
Il Wrapped Materials Provider (Wrapped CMP) consente di generare e gestire le chiavi di wrapping e firma al di fuori del DynamoDB Encryption Client.   
Il CMP di sottoposti a wrapping genera una chiave di crittografia univoca per ciascun item. Utilizza quindi le chiavi di firma e di crittografia (o di annullamento della crittografia) da te fornite. In questo modo, puoi determinare la modalità di generazione delle chiavi di crittografia e di firma e se sono univoche o se vengono riutilizzate per ciascun item. Wrapped CMP è un'alternativa sicura al [Direct KMS Provider](direct-kms-provider.md) per applicazioni che non utilizzano e possono gestire in sicurezza materiali crittografici. AWS KMS   
Per informazioni dettagliate, vedi [Provider di materiali sottoposti a wrapping](wrapped-provider.md).

**Provider più recente**  
Il *provider più recente* è un [provider di materiali crittografici](DDBEC-legacy-concepts.md#concept-material-provider) (CMP) progettato per funzionare con gli [archivi del provider](DDBEC-legacy-concepts.md#provider-store). Proviene CMPs dall'archivio del provider e ottiene i materiali crittografici che restituisce da. CMPs Il Provider più recente in genere utilizza ciascun CMP per soddisfare più richieste di materiali crittografici, ma puoi utilizzare le funzioni dell'archivio del provider per controllare in quale misura vengono riutilizzati i materiali, determinare la frequenza di rotazione del CMP e persino modificare il tipo di CMP utilizzato senza cambiare il Provider più recente.  
Puoi utilizzare il Provider più recente con qualsiasi archivio del provider compatibile. Il client di crittografia DynamoDB include MetaStore un, che è un provider store che restituisce Wrapped. CMPs  
Il Provider più recente rappresenta una scelta adeguata per le applicazioni che devono ridurre al minimo le chiamate alla relativa origine crittografica e per le applicazioni che possono riutilizzare alcuni materiali crittografici senza violare i requisiti di sicurezza. Ad esempio, consente di proteggere i materiali crittografici utilizzando un comando [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) senza chiamare AWS KMS ogni volta che si crittografa o decrittografa un elemento.  
Per informazioni dettagliate, vedi [Provider più recente](most-recent-provider.md).

**Provider di materiali statici**  
Lo Static Materials Provider è progettato per test, proof-of-concept dimostrazioni e compatibilità con le versioni precedenti. Non genera nessun materiale crittografico univoco per gli item. Restituisce le stesse chiavi di crittografia e di firma da te fornite che vengono utilizzate direttamente per crittografare, decrittografare e firmare gli item della tabella.   
Il [Provider di statici asimmetrico](https://aws.github.io/aws-dynamodb-encryption-java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/providers/AsymmetricStaticProvider.html) nella libreria Java non è un provider di statici. Fornisce soltanto costruttori alternativi per il [CMP di sottoposti a wrapping](wrapped-provider.md). Puoi utilizzarlo nell'ambiente di produzione, ma ti consigliamo di utilizzare direttamente il CMP di sottoposti a wrapping ogni qualvolta sia possibile.

**Topics**
+ [Provider di materiali KMS diretto](direct-kms-provider.md)
+ [Provider di materiali sottoposti a wrapping](wrapped-provider.md)
+ [Provider più recente](most-recent-provider.md)
+ [Provider di materiali statici](static-provider.md)

# Provider di materiali KMS diretto
<a name="direct-kms-provider"></a>

**Nota**  
[La nostra libreria di crittografia lato client è stata rinominata Database Encryption SDK. AWS](DDBEC-rename.md) Il seguente argomento fornisce informazioni sulle versioni 1. *x* —2. *x* del DynamoDB Encryption Client for Java e versioni 1. *x —3.* *x* del client di crittografia DynamoDB per Python. Per ulteriori informazioni, consulta [AWS Database Encryption SDK per il supporto della versione DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

*Direct KMS Materials Provider* (Direct KMS Provider) protegge gli elementi della tabella in modo [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)che non rimangano mai () non crittografati. [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/)AWS KMS Questo [provider di materiali crittografici](DDBEC-legacy-concepts.md#concept-material-provider) restituisce una chiave di crittografia e una chiave di firma univoche per ogni item della tabella. A tal fine, chiama AWS KMS ogni volta che si crittografa o decrittografa un elemento.

Se stai elaborando elementi DynamoDB ad alta frequenza e su larga scala, potresti superare i limiti, causando ritardi AWS KMS [requests-per-secondnell'](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html#requests-per-second)elaborazione. [Se devi superare un limite, crea un caso nel Centro.Supporto AWS](https://console.aws.amazon.com/support/home) Potresti anche prendere in considerazione l'utilizzo di un fornitore di materiali crittografici con un riutilizzo limitato delle chiavi, come il [Most Recent](most-recent-provider.md) Provider.

[Per utilizzare Direct KMS Provider, il chiamante deve disporre di almeno uno AWS KMS key e del permesso di chiamare [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)e [decriptare](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) le operazioni su. Account AWS](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) AWS KMS key AWS KMS key Deve essere una chiave di crittografia simmetrica; il DynamoDB Encryption Client non supporta la crittografia asimmetrica. [Se utilizzi una tabella [globale DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html), potresti voler specificare AWS KMS una chiave multiregione.](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) Per informazioni dettagliate, vedi [Come utilizzarlo](#provider-kms-how-to-use).

**Nota**  
Quando si utilizza Direct KMS Provider, i nomi e i valori degli attributi della chiave primaria vengono visualizzati in testo semplice nel [contesto di AWS KMS crittografia e nei registri delle operazioni correlate](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context). AWS CloudTrail AWS KMS Tuttavia, il DynamoDB Encryption Client non espone mai il testo in chiaro di alcun valore di attributo crittografato.

Il Direct KMS Provider è uno dei numerosi [fornitori di materiali crittografici](DDBEC-legacy-concepts.md#concept-material-provider) (CMPs) supportati dal DynamoDB Encryption Client. Per informazioni sull'altro, consulta. CMPs [Fornitore di materiali crittografici](crypto-materials-providers.md)

**Per il codice di esempio, consulta:**
+ 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**
+ [Come utilizzarlo](#provider-kms-how-to-use)
+ [Come funziona](#provider-kms-how-it-works)

## Come utilizzarlo
<a name="provider-kms-how-to-use"></a>

Per creare un Direct KMS Provider, utilizza il parametro key ID per specificare una chiave [KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys) di crittografia simmetrica nel tuo account. Il valore del parametro key ID può essere l'ID chiave, l'ARN della chiave, il nome dell'alias o l'alias ARN di. AWS KMS key*Per i dettagli sugli identificatori chiave, consulta Identificatori [chiave](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id) nella Guida per gli sviluppatori.AWS Key Management Service *

Il provider Direct KMS richiede una chiave KMS di crittografia simmetrica. Non è possibile utilizzare una chiave KMS asimmetrica. Tuttavia, puoi utilizzare una chiave KMS multiregionale, una chiave KMS con materiale chiave importato o una chiave KMS in un archivio di chiavi personalizzato. È necessario disporre dell'autorizzazione [kms: GenerateDataKey e KMS:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) [sulla chiave KMS](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html). Pertanto, è necessario utilizzare una chiave gestita dal cliente, non una chiave KMS gestita o di proprietà. AWS AWS 

Il client di crittografia DynamoDB per Python determina la regione per la AWS KMS chiamata dalla regione nel valore del parametro ID chiave, se ne include una. Altrimenti, utilizza la Regione nel AWS KMS client, se ne specifichi una, o la Regione che configuri in. AWS SDK per Python (Boto3) Per informazioni sulla selezione della regione in Python, consulta [Configuration](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html) in the AWS SDK for Python (Boto3) API Reference.

Il client di crittografia DynamoDB per Java determina la regione per la AWS KMS chiamata dalla regione del client, se AWS KMS il client specificato include una regione. Altrimenti, utilizza la regione configurata in. AWS SDK per Java Per informazioni sulla selezione della regione in AWS SDK per Java, consulta la [Regione AWS selezione](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-region-selection.html) nella Guida per gli AWS SDK per Java sviluppatori.

------
#### [ 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 ]

L'esempio seguente utilizza la chiave ARN per specificare. AWS KMS key Se l'identificatore della chiave non include un Regione AWS, il client di crittografia DynamoDB ottiene la regione dalla sessione Botocore configurata, se presente, o dalle impostazioni predefinite di 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 utilizzi tabelle [globali di Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html), ti consigliamo di crittografare i dati con una chiave multiregionale. AWS KMS Le chiavi multiregionali sono disponibili AWS KMS keys in diversi formati e possono essere utilizzate in Regioni AWS modo intercambiabile perché hanno lo stesso ID di chiave e lo stesso materiale chiave. *Per i dettagli, consulta [Uso delle chiavi multiregionali nella Guida](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html) per gli sviluppatori.AWS Key Management Service *

**Nota**  
Se si utilizza la [versione 2017.11.29](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/globaltables.V1.html) delle tabelle globali, è necessario impostare le azioni degli attributi in modo che i campi di replica riservati non siano crittografati o firmati. Per informazioni dettagliate, vedi [Problemi con le tabelle globali delle versioni precedenti](troubleshooting.md#fix-global-tables).

Per utilizzare una chiave multiregione con il DynamoDB Encryption Client, crea una chiave multiregione e replicala nelle regioni in cui viene eseguita l'applicazione. Quindi configura il provider Direct KMS per utilizzare la chiave multiregione nella regione in cui il DynamoDB Encryption Client chiama. AWS KMS

L'esempio seguente configura il DynamoDB Encryption Client per crittografare i dati nella regione Stati Uniti orientali (Virginia settentrionale) (us-east-1) e decrittografarli nella regione Stati Uniti occidentali (Oregon) (us-west-2) utilizzando una chiave multiregionale.

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

In questo esempio, il client di crittografia DynamoDB ottiene la regione per la AWS KMS chiamata dalla regione del client. AWS KMS Il `keyArn` valore identifica una chiave multiregionale nella stessa regione.

```
// 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 ]

In questo esempio, il client di crittografia DynamoDB ottiene la regione per la AWS KMS chiamata dalla regione nella chiave ARN.

```
# 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)
```

------

## Come funziona
<a name="provider-kms-how-it-works"></a>

Il provider Direct KMS restituisce chiavi di crittografia e firma protette da una AWS KMS key password specificata dall'utente, come illustrato nel diagramma seguente.

![\[L'input, l'elaborazione e l'output del provider Direct KMS nel client di crittografia DynamoDB\]](http://docs.aws.amazon.com/it_it/database-encryption-sdk/latest/devguide/images/directKMS.png)

+ Per generare materiali di crittografia, il provider Direct KMS richiede di AWS KMS [generare una chiave dati univoca per ogni elemento utilizzando una AWS KMS key chiave](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) specificata dall'utente. Deriva le chiavi di crittografia e di firma dell'item dalla copia di testo non crittografato della [chiave di dati](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys) e le restituisce, insieme alla chiave di dati crittografata, archiviata nell'[attributo di descrizione del materiale](DDBEC-legacy-concepts.md#legacy-material-description) dell'item. 

  Il componente di crittografia dell'item utilizza le chiavi di crittografia e di firma e le rimuove dalla memoria il prima possibile. Nell'item crittografato viene salvata soltanto la copia crittografata della chiave di dati da cui queste chiavi sono state derivate.
+ Per generare materiali di decrittografia, il provider Direct KMS chiede di AWS KMS decrittografare la chiave dati crittografata. Quindi, deriva le chiavi di verifica e di firma dalla chiave di dati con testo non crittografato e le restituisce al componente di crittografia dell'item.

  Il componente di crittografia dell'item effettua la verifica dell'item e, in assenza di errori, decrittografa i valori crittografati. Quindi, rimuove le chiavi dalla memoria il prima possibile.

### Ottenere materiali di crittografia
<a name="direct-kms-get-encryption-materials"></a>

Questa sezione descrive nei dettagli gli input, gli output e l'elaborazione del provider KMS diretto al momento della ricezione di una richiesta di materiali di crittografia dal [componente di crittografia dell'item](DDBEC-legacy-concepts.md#item-encryptor).

**Input ** (dall'applicazione)
+ L'ID della chiave di un. AWS KMS key

**Input** (dal componente di crittografia dell'item)
+ [Contesto di crittografia DynamoDB](concepts.md#encryption-context)

**Output** (sul componente di crittografia dell'item)
+ Chiave di crittografia (testo non crittografato)
+ Chiave di firma
+ Nella [descrizione dei materiali effettivi](DDBEC-legacy-concepts.md#legacy-material-description): questi valori vengono salvati nell'attributo di descrizione del materiale aggiunto all'item dal client.
  + amzn-ddb-env-key: chiave dati con codifica Base64 crittografata da AWS KMS key
  + amzn-ddb-env-alg[: algoritmo di crittografia, per impostazione predefinita AES/256](https://csrc.nist.gov/projects/cryptographic-standards-and-guidelines/archived-crypto-projects/aes-development)
  + amzn-ddb-sig-alg[: algoritmo di firma, per impostazione predefinita, Hmac/256 SHA256](https://en.wikipedia.org/wiki/HMAC)
  + amzn-ddb-wrap-alg: km

**Processing**

1. Il provider Direct KMS invia AWS KMS una richiesta per utilizzare quanto specificato AWS KMS key per [generare una chiave dati univoca](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) per l'articolo. L'operazione restituisce una chiave di testo non crittografato e una copia che viene crittografata con la AWS KMS key. Quest'ultima è nota come *materiale di chiave iniziale*.

   La richiesta include i valori seguenti sotto forma di testo non crittografato nel [contesto di crittografia di AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context). Questi valori non segreti sono crittograficamente legati all'oggetto crittografato; pertanto, per effettuare la decrittografia è necessario lo stesso contesto di crittografia. È possibile utilizzare questi valori per identificare la chiamata AWS KMS ai [AWS CloudTrail log](https://docs.aws.amazon.com/kms/latest/developerguide/monitoring-overview.html).
   + amzn-ddb-env-alg — Algoritmo di crittografia, di default AES/256
   + amzn-ddb-sig-alg — Algoritmo di firma, di default Hmac/256 SHA256
   + (Opzionale) — aws-kms-table *table name*
   + (Facoltativo) *partition key name* — *partition key value* (i valori binari sono codificati in Base64)
   + (Facoltativo) *sort key name* — (i valori binari sono codificati in *sort key value* Base64)

   Il provider Direct KMS ottiene i valori per il contesto di AWS KMS crittografia dal contesto di [crittografia DynamoDB per l'elemento](concepts.md#encryption-context). Se il contesto di crittografia DynamoDB non include un valore, ad esempio il nome della tabella, quella coppia nome-valore viene omessa dal contesto di crittografia. AWS KMS 

1. Il Provider KMS diretto deriva la chiave di crittografia e la chiave di firma simmetriche dalla chiave di dati. Per impostazione predefinita, utilizza [Secure Hash Algorithm (SHA) 256 e la [Key Derivation Function RFC5869 basata su HMAC per derivare una chiave di crittografia simmetrica AES a 256 bit e una chiave di firma HMAC-SHA-256](https://tools.ietf.org/html/rfc5869)](https://en.wikipedia.org/wiki/SHA-2) a 256 bit. 

1. Il Provider KMS diretto restituisce l'output al componente di crittografia dell'item.

1. Il componente di crittografia dell'item utilizza la chiave di crittografia per crittografare gli attributi specificati e la chiave di firma per firmarli, tramite gli algoritmi specificati nella descrizione dei materiali effettivi. Rimuove le chiavi di testo non crittografato dalla memoria il prima possibile.

### Ottenere materiali di decrittografia
<a name="direct-kms-get-decryption-materials"></a>

Questa sezione descrive nei dettagli gli input, gli output e l'elaborazione del provider KMS diretto al momento della ricezione di una richiesta di materiali di decrittografia dal [componente di crittografia dell'item](DDBEC-legacy-concepts.md#item-encryptor).

**Input ** (dall'applicazione)
+ L'ID della chiave di un. AWS KMS key

  Il valore dell'ID chiave può essere l'ID della chiave, l'ARN della chiave, il nome dell'alias o l'alias ARN di. AWS KMS key[Tutti i valori che non sono inclusi nell'ID della chiave, come la regione, devono essere disponibili nel profilo denominato.AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html#cli-configure-files-using-profiles) L'ARN chiave fornisce tutti i valori necessari. AWS KMS 

**Input** (dal componente di crittografia dell'item)
+ Una copia del contesto di [crittografia DynamoDB](concepts.md#encryption-context) che contiene il contenuto dell'attributo di descrizione del materiale.

**Output** (sul componente di crittografia dell'item)
+ Chiave di crittografia (testo non crittografato)
+ Chiave di firma

**Processing**

1. Il provider Direct KMS ottiene la chiave dei dati crittografati dall'attributo di descrizione del materiale nell'elemento crittografato. 

1. Chiede AWS KMS di utilizzare quanto specificato AWS KMS key per [decrittografare la chiave dati crittografata](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html). L'operazione restituisce una chiave di testo non crittografato.

   Questa richiesta deve utilizzare lo stesso [contesto di crittografia di AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) utilizzato per generare e crittografare la chiave di dati.
   + aws-kms-table – *table name*
   + *partition key name*— *partition key value* (i valori binari sono codificati in Base64)
   + (Facoltativo) *sort key name* — (i valori binari sono codificati in *sort key value* Base64)
   + amzn-ddb-env-alg — Algoritmo di crittografia, di default AES/256
   + amzn-ddb-sig-alg — Algoritmo di firma, di default Hmac/256 SHA256

1. Il provider Direct KMS utilizza [Secure Hash Algorithm (SHA) 256 e la funzione di derivazione delle chiavi RFC5869 basata su HMAC per derivare una](https://en.wikipedia.org/wiki/SHA-2) [chiave di crittografia simmetrica AES a 256 bit e una chiave di firma HMAC-SHA-256](https://tools.ietf.org/html/rfc5869) a 256 bit dalla chiave dati. 

1. Il Provider KMS diretto restituisce l'output al componente di crittografia dell'item.

1. Il componente di crittografia dell'item utilizza la chiave di firma per verificare l'item. Se l'operazione riesce, utilizza la chiave di crittografia simmetrica per decrittografare i valori di attributo crittografati. Queste operazioni utilizzano gli algoritmi di crittografia e di firma specificati nella descrizione dei materiali effettivi. Il componente di crittografia dell'item rimuove le chiavi di testo non crittografato dalla memoria il prima possibile.

# Provider di materiali sottoposti a wrapping
<a name="wrapped-provider"></a>

**Nota**  
[La nostra libreria di crittografia lato client è stata rinominata Database Encryption SDK. AWS](DDBEC-rename.md) Il seguente argomento fornisce informazioni sulle versioni 1. *x* —2. *x* del DynamoDB Encryption Client for Java e versioni 1. *x —3.* *x* del client di crittografia DynamoDB per Python. Per ulteriori informazioni, consulta [AWS Database Encryption SDK per il supporto della versione DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

Il *Wrapped Materials Provider* (Wrapped CMP) consente di utilizzare chiavi di wrapping e firma da qualsiasi fonte con il DynamoDB Encryption Client. La Wrapped CMP non dipende da alcun servizio. AWS Tuttavia, devi generare e gestire le chiavi di wrapping e firma all'esterno del client, nonché fornire le chiavi corrette per verificare e decrittografare l'item. 

Il CMP di sottoposti a wrapping genera una chiave di crittografia item univoca per ciascun item. Esegue il wrapping della chiave di crittografia dell'item con la chiave di wrapping che hai fornito e salva la chiave di crittografia dell'item sottoposta a wrapping nell'[attributo di descrizione del materiale](DDBEC-legacy-concepts.md#legacy-material-description) dell'item. Poiché sei tu a fornire le chiavi di wrapping e di firma, puoi capire come sono generate le chiavi di wrapping e firma e se sono univoche per ciascun item o riutilizzate. 

Il CMP di sottoposti a wrapping è un'implementazione sicura e un'ottima scelta per le applicazioni in grado di gestire i materiali crittografici.

Wrapped CMP è uno dei numerosi [fornitori di materiali crittografici](DDBEC-legacy-concepts.md#concept-material-provider) (CMPs) supportati dal DynamoDB Encryption Client. Per informazioni sull'altro, vedere. CMPs [Fornitore di materiali crittografici](crypto-materials-providers.md)

**Per il codice di esempio, consulta:**
+ 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**
+ [Come utilizzarlo](#wrapped-cmp-how-to-use)
+ [Come funziona](#wrapped-cmp-how-it-works)

## Come utilizzarlo
<a name="wrapped-cmp-how-to-use"></a>

Per creare un CMP di sottoposti a wrapping, specifica una chiave di wrapping (necessaria per la crittografia), una chiave di annullamento del wrapping (necessaria per la decrittografia) e una chiave di firma. Le chiavi devono essere fornite al momento di crittografare e decrittografare gli item.

Le chiavi di wrapping, annullamento del wrapping e firma possono essere chiavi simmetriche o coppie di chiavi asimmetriche. 

------
#### [ 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
)
```

------

## Come funziona
<a name="wrapped-cmp-how-it-works"></a>

Il CMP di sottoposti a wrapping genera una nuova chiave di crittografia item per ciascun item. Utilizza le chiavi di wrapping, annullamento del wrapping e firma da te fornite, come mostrato nel diagramma mostrato di seguito.

![\[L'input, l'elaborazione e l'output del Wrapped Materials Provider nel DynamoDB Encryption Client\]](http://docs.aws.amazon.com/it_it/database-encryption-sdk/latest/devguide/images/wrappedCMP.png)


### Ottenere materiali di crittografia
<a name="wrapped-cmp-get-encryption-materials"></a>

In questa sezione vengono descritti nei dettagli gli input, gli output e l'elaborazione eseguita dal provider di materiali sottoposti a wrapping (CMP di sottoposti a wrapping) al momento della ricezione di una richiesta di materiali di crittografia. 

**Input** (dall'applicazione)
+ Chiave di wrapping: una chiave [AES](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) simmetrica o una chiave pubblica [RSA](https://en.wikipedia.org/wiki/RSA_(cryptosystem)). Necessaria se alcuni valori degli attributi sono crittografati. In caso contrario, è facoltativa e viene ignorata.
+ Chiave di annullamento del wrapping: facoltativa e ignorata. 
+ Chiave di firma

**Input** (dal componente di crittografia dell'item)
+ [Contesto di crittografia DynamoDB](concepts.md#encryption-context)

**Output** (sul componente di crittografia dell'item)
+ Chiave di crittografia dell'item di testo normale
+ Chiave di firma (invariata)
+ [Descrizione dei materiali effettivi](DDBEC-legacy-concepts.md#legacy-material-description): questi valori vengono salvati nell'[attributo di descrizione del materiale](DDBEC-legacy-concepts.md#legacy-material-description) che il client aggiunge all'item. 
  + `amzn-ddb-env-key`: chiave di crittografia item sottoposta a wrapping Base64-encoded
  + `amzn-ddb-env-alg`: algoritmo di crittografia utilizzato per crittografare l'item. Il valore predefinito è AES-256-CBC.
  + `amzn-ddb-wrap-alg`: l'algoritmo di wrapping che il CMP di sottoposti a wrapping ha utilizzato per eseguire il wrapping della chiave di crittografia item. Se la chiave di wrapping è una chiave AES, viene sottoposta a wrapping utilizzando `AES-Keywrap` senza riempimenti come indicato in [RFC 3394](https://tools.ietf.org/html/rfc3394.html). Se la chiave di wrapping è una chiave RSA, la chiave viene crittografata utilizzando RSA OAEP con padding. MGF1 

**Processing**

La crittografia di un item richiede una chiave di wrapping e una chiave di firma. La chiave di annullamento del wrapping è facoltativa e viene ignorata.

1. Il CMP di sottoposti a wrapping genera una chiave di crittografia item simmetrica univoca per l'item della tabella.

1. Utilizza la chiave di wrapping da te specificata per eseguire il wrapping della chiave di crittografia item. Quindi, la rimuove dalla memoria il prima possibile.

1. Restituisce la chiave di crittografia dell'item in testo normale, la chiave di firma da te fornita e una [descrizione dei materiali effettivi](DDBEC-legacy-concepts.md#legacy-material-description) che include la chiave di crittografia dell'item sottoposta a wrapping e gli algoritmi di crittografia e wrapping.

1. Il componente di crittografia dell'item utilizza la chiave di crittografia testo normale per crittografare l'item. Utilizza la chiave di firma da te fornita per firmare l'item. Quindi, rimuove le chiavi di testo normale dalla memoria il prima possibile. Copia i campi della descrizione dei materiali effettivi, inclusa la chiave di crittografia sottoposta a wrapping (`amzn-ddb-env-key`) nell'attributo di descrizione del materiale dell'item.

### Ottenere materiali di decrittografia
<a name="wrapped-cmp-get-decryption-materials"></a>

In questa sezione vengono descritti nei dettagli gli input, gli output e l'elaborazione eseguita dal provider di materiali sottoposti a wrapping (CMP di sottoposti a wrapping) al momento della ricezione di una richiesta di materiali di decrittografia. 

**Input** (dall'applicazione)
+ Chiave wrapping: facoltativa e ignorata.
+ Chiave di annullamento del wrapping: la stessa chiave [AES](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) simmetrica o la chiave privata [RSA](https://en.wikipedia.org/wiki/RSA_(cryptosystem)) corrispondente alla chiave pubblica RSA utilizzata per la crittografia. Necessaria se alcuni valori degli attributi sono crittografati. In caso contrario, è facoltativa e viene ignorata.
+ Chiave di firma

**Input** (dal componente di crittografia dell'item)
+ Una copia del contesto di [crittografia DynamoDB](concepts.md#encryption-context) che contiene il contenuto dell'attributo di descrizione del materiale.

**Output** (sul componente di crittografia dell'item)
+ Chiave di crittografia dell'item di testo normale
+ Chiave di firma (invariata)

**Processing**

La decrittografia di un item richiede una chiave di annullamento del wrapping e una chiave di firma. La chiave di wrapping è facoltativa e viene ignorata.

1. Il CMP di sottoposti a wrapping ottiene la chiave di crittografia item sottoposta a wrapping dall'attributo di descrizione del materiale dell'item.

1. Utilizza la chiave e l'algoritmo di annullamento del wrapping per annullare il wrapping della chiave di crittografia item. 

1. Restituisce la chiave di crittografia item di testo normale, la chiave di firma e gli algoritmi di crittografia e firma al componente di crittografia dell'item.

1. Il componente di crittografia dell'item utilizza la chiave di firma per verificare l'item. Se la verifica riesce, utilizza la chiave di crittografia item per decrittografare l'item. Quindi, rimuove le chiavi di testo normale dalla memoria il prima possibile.

# Provider più recente
<a name="most-recent-provider"></a>

**Nota**  
[La nostra libreria di crittografia lato client è stata rinominata Database Encryption SDK. AWS](DDBEC-rename.md) Il seguente argomento fornisce informazioni sulle versioni 1. *x* —2. *x* del DynamoDB Encryption Client for Java e versioni 1. *x —3.* *x* del client di crittografia DynamoDB per Python. Per ulteriori informazioni, consulta [AWS Database Encryption SDK per il supporto della versione DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

Il *provider più recente* è un [provider di materiali crittografici](DDBEC-legacy-concepts.md#concept-material-provider) (CMP) progettato per funzionare con gli [archivi del provider](DDBEC-legacy-concepts.md#provider-store). Viene CMPs dall'archivio del provider e ottiene i materiali crittografici restituiti da. CMPs In genere utilizza ciascun CMP per soddisfare più richieste di materiali crittografici. Ma puoi utilizzare le funzioni del suo archivio provider per controllare in quale misura i materiali vengono riutilizzati, stabilire la frequenza di rotazione del CMP e persino cambiare il tipo di CMP utilizzato senza cambiare il provider più recente.

**Nota**  
Il codice associato al `MostRecentProvider` simbolo del provider più recente potrebbe archiviare materiali crittografici in memoria per tutta la durata del processo. Potrebbe consentire a un chiamante di utilizzare chiavi che non è più autorizzato a utilizzare.   
Il `MostRecentProvider` simbolo è obsoleto nelle versioni precedenti supportate del DynamoDB Encryption Client e rimosso dalla versione 2.0.0. Viene sostituito dal simbolo. `CachingMostRecentProvider` Per informazioni dettagliate, vedi [Aggiornamenti al provider più recente](#mrp-versions).

Il provider più recente è una buona scelta per le applicazioni che devono ridurre al minimo le chiamate all'archivio provider e all'origine crittografica e per le applicazioni che possono riutilizzare alcuni materiali crittografici senza violare i requisiti di sicurezza. Ad esempio, ti consente di proteggere i tuoi materiali crittografici con un [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) senza chiamare AWS KMS ogni volta che crittografi o decrittografi un elemento.

Il provider store scelto determina il tipo di provider utilizzato dal provider più recente e la frequenza con CMPs cui riceve una nuova CMP. Puoi utilizzare qualsiasi archivio provider compatibile con il provider più recente, inclusi quelli personalizzati che hai progettato. 

Il client di crittografia DynamoDB include *MetaStore*un client che crea e [restituisce Wrapped Materials Providers (Wrapped](wrapped-provider.md)). CMPs MetaStore Salva più versioni di Wrapped CMPs che genera in una tabella DynamoDB interna e le protegge con la crittografia lato client tramite un'istanza interna del DynamoDB Encryption Client. 

Puoi configurarlo MetaStore per utilizzare qualsiasi tipo di CMP interno per proteggere i materiali nella tabella, incluso un [Direct KMS Provider](direct-kms-provider.md) che genera materiali crittografici protetti dall'utente AWS KMS key, un CMP Wrapped che utilizza le chiavi di wrapping e firma fornite dall'utente o un CMP personalizzato compatibile progettato da te.

**Per il codice di esempio, consulta:**
+ 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**
+ [Come utilizzarlo](#mrp-how-to-use-it)
+ [Come funziona](#mrp-how-it-works)
+ [Aggiornamenti al provider più recente](#mrp-versions)

## Come utilizzarlo
<a name="mrp-how-to-use-it"></a>

Per creare un provider più recente devi creare e configurare un archivio provider e quindi creare un provider più recente che lo utilizzi. 

[Gli esempi seguenti mostrano come creare un provider più recente che utilizza a MetaStore e protegge le versioni nella sua tabella DynamoDB interna con materiali crittografici provenienti da un provider Direct KMS.](direct-kms-provider.md) Questi esempi utilizzano il simbolo. [`CachingMostRecentProvider`](#mrp-versions) 

Ogni provider più recente ha un nome che lo identifica CMPs nella MetaStore tabella, un'impostazione [time-to-live](#most-recent-provider-ttl)(TTL) e un'impostazione della dimensione della cache che determina il numero di voci che la cache può contenere. Questi esempi impostano la dimensione della cache su 1000 voci e un TTL di 60 secondi.

------
#### [ 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
)
```

------

## Come funziona
<a name="mrp-how-it-works"></a>

Il provider più recente riceve CMPs da un provider store. Quindi utilizza il CMP per generare i materiali crittografici che restituisce al componente di crittografia dell'item.

### Informazioni sul provider più recente
<a name="about-mrp"></a>

Il provider più recente ottiene un [provider di materiali crittografici](DDBEC-legacy-concepts.md#concept-material-provider) (CMP) da un [archivio provider](DDBEC-legacy-concepts.md#provider-store). Utilizza quindi il CMP per generare i materiali crittografici che restituisce. Ogni provider più recente è associato a un provider store, ma un provider store può CMPs rifornire più provider su più host.

Il provider più recente può utilizzare qualsiasi CMP compatibile di qualsiasi archivio provider. Richiede materiali di crittografia o decrittografia dal CMP e restituisce l'output all'item encryptor. Non esegue alcuna operazione crittografica.

Per richiedere un CMP al suo archivio provider, il provider più recente fornisce il nome del materiale e la versione di un CMP esistente che desidera utilizzare. Per i materiali di crittografia, il provider più recente richiede sempre la versione massima ("più recente"). Per i materiali di decrittografia, richiede la versione del CMP che è stata utilizzata per creare i materiali di crittografia, come mostrato nel diagramma seguente.

![\[Un provider più recente\]](http://docs.aws.amazon.com/it_it/database-encryption-sdk/latest/devguide/images/most-recent-provider-1.png)


Il provider più recente salva le versioni restituite dall'archivio del CMPs provider in una cache locale LRU (Least Recently Used) in memoria. La cache consente al provider più recente di ottenere ciò di CMPs cui ha bisogno senza chiamare l'archivio del provider per ogni articolo. Puoi cancellare la cache on-demand.

Il provider più recente utilizza un [time-to-livevalore](#most-recent-provider-ttl) configurabile che è possibile regolare in base alle caratteristiche dell'applicazione.

### Informazioni su MetaStore
<a name="about-metastore"></a>

Puoi utilizzare un provider più recente con qualsiasi archivio provider, anche un archivio provider personalizzato compatibile. Il DynamoDB Encryption Client include MetaStore un'implementazione sicura che è possibile configurare e personalizzare.

A *MetaStore*è un [provider store](DDBEC-legacy-concepts.md#provider-store) che crea e restituisce [Wrapped configurati con la chiave di CMPs wrapping](wrapped-provider.md), la chiave di unwrapping e la chiave di firma richieste da Wrapped. CMPs A MetaStore è un'opzione sicura per un provider più recente perché Wrapped genera CMPs sempre chiavi di crittografia degli elementi uniche per ogni articolo. Vengono riutilizzate solo la chiave di wrapping che protegge la chiave di crittografia degli item e le chiavi di firma.

Il diagramma seguente mostra i componenti di MetaStore e come interagisce con il provider più recente.

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


 MetaStore genera i Wrapped CMPs e poi li archivia (in forma crittografata) in una tabella DynamoDB interna. La chiave di partizione è il nome del materiale del provider più recente; la chiave di ordinamento è il numero di versione. I materiali nella tabella sono protetti da un client di crittografia DynamoDB interno, che include un item encryptor e un provider [interno di materiali crittografici](DDBEC-legacy-concepts.md#concept-material-provider) (CMP).

Puoi utilizzare qualsiasi tipo di CMP interno al tuo sito MetaStore, incluso un [Direct KMS Provider](wrapped-provider.md), un CMP Wrapped con materiali crittografici da te fornito o un CMP personalizzato compatibile. Se il tuo CMP interno MetaStore è un Direct KMS Provider, le tue chiavi di wrapping e firma riutilizzabili sono protette da un 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 Le MetaStore chiamate AWS KMS ogni volta che aggiunge una nuova versione CMP alla sua tabella interna o ottiene una versione CMP dalla sua tabella interna.

### Impostazione di un valore time-to-live
<a name="most-recent-provider-ttl"></a>

È possibile impostare un valore time-to-live (TTL) per ogni provider più recente creato. In generale, utilizzate il valore TTL più basso che sia pratico per la vostra applicazione.

L'uso del valore TTL viene modificato nel `CachingMostRecentProvider` simbolo del provider più recente. 

**Nota**  
Il `MostRecentProvider` simbolo del provider più recente è obsoleto nelle versioni precedenti supportate del DynamoDB Encryption Client e rimosso dalla versione 2.0.0. Viene sostituito dal simbolo. `CachingMostRecentProvider` Ti consigliamo di aggiornare il codice il prima possibile. Per informazioni dettagliate, vedi [Aggiornamenti al provider più recente](#mrp-versions).

**`CachingMostRecentProvider`**  
`CachingMostRecentProvider`Utilizza il valore TTL in due modi diversi.   
+ Il TTL determina la frequenza con cui il provider più recente verifica la presenza di una nuova versione del CMP nell'archivio del provider. Se è disponibile una nuova versione, il provider più recente sostituisce la propria CMP e aggiorna i materiali crittografici. Altrimenti, continua a utilizzare i suoi attuali materiali CMP e crittografici.
+ Il TTL determina per quanto tempo CMPs è possibile utilizzare la cache. Prima di utilizzare una CMP memorizzata nella cache per la crittografia, il Most Recent Provider valuta il tempo trascorso nella cache. Se il tempo della cache CMP supera il TTL, la CMP viene rimossa dalla cache e il provider più recente riceve una nuova versione CMP dall'archivio del provider.

**`MostRecentProvider`**  
Nel`MostRecentProvider`, il TTL determina la frequenza con cui il provider più recente verifica la presenza di una nuova versione del CMP nell'archivio del provider. Se è disponibile una nuova versione, il provider più recente sostituisce la propria CMP e aggiorna i materiali crittografici. Altrimenti, continua a utilizzare i suoi attuali materiali CMP e crittografici.

Il TTL non determina la frequenza con cui viene creata una nuova versione CMP. È possibile creare nuove versioni CMP [ruotando](#most-recent-provider-rotate) i materiali crittografici.

Un valore TTL ideale varia a seconda dell'applicazione e dei suoi obiettivi di latenza e disponibilità. Un TTL inferiore migliora il profilo di sicurezza riducendo il tempo di archiviazione dei materiali crittografici in memoria. Inoltre, un TTL inferiore aggiorna le informazioni critiche con maggiore frequenza. Ad esempio, se il CMP interno è un [Direct KMS Provider](direct-kms-provider.md), verifica più frequentemente che il chiamante sia ancora autorizzato a utilizzare un. AWS KMS key

Tuttavia, se il TTL è troppo breve, le chiamate frequenti all'archivio del provider possono aumentare i costi e far sì che l'archivio del provider limiti le richieste provenienti dall'applicazione e da altre applicazioni che condividono l'account di servizio. Potresti anche trarre vantaggio dal coordinamento del TTL con la velocità di rotazione dei materiali crittografici. 

Durante i test, variate il TTL e le dimensioni della cache in base ai diversi carichi di lavoro fino a trovare una configurazione adatta alla vostra applicazione e ai vostri standard di sicurezza e prestazioni.

### Rotazione dei materiali crittografici
<a name="most-recent-provider-rotate"></a>

Quando un Most Recent Provider necessita di materiali di crittografia, utilizza sempre la versione più recente della sua CMP di cui è a conoscenza. La frequenza con cui verifica la presenza di una versione più recente è determinata dal valore [time-to-live](#most-recent-provider-ttl)(TTL) impostato quando si configura il provider più recente. 

Quando il TTL scade, il provider più recente verifica la presenza di una versione più recente del CMP nell'archivio del provider. Se disponibile, il provider più recente la ottiene e sostituisce la CMP nella sua cache. Utilizza questo CMP e il relativo materiale crittografico finché non scopre che Provider Store ha una versione più recente.

Per indicare all'archivio provider di creare una nuova versione di un CMP per un provider più recente, richiama l'operazione Create New Provider (Crea nuovo provider) dell'archivio provider con il nome del materiale del provider più recente. L'archivio provider crea un nuovo CMP e salva una copia crittografata nel suo storage interno con un numero di versione superiore: Restituisce anche un CMP, ma puoi ignorarlo. Di conseguenza, la volta successiva che il provider più recente richiede al provider store il numero massimo di versione CMPs, ottiene il nuovo numero di versione più recente e lo utilizza nelle richieste successive allo store per verificare se è stata creata una nuova versione del CMP.

Puoi programmare le chiamate Create New Provider (Crea nuovo provider) sulla base del tempo, del numero di item o di attributi elaborati o su qualsiasi altro parametro rilevante per la tua applicazione.

### Ottenere materiali di crittografia
<a name="most-recent-provider-encrypt"></a>

Il provider più recente utilizza il seguente processo, mostrato in questo diagramma, per ottenere i materiali di crittografia che restituisce al componente di crittografia dell'item. L'output dipende dal tipo di CMP restituito dall'archivio provider. Il provider più recente può utilizzare qualsiasi archivio provider compatibile, incluso MetaStore quello incluso nel DynamoDB Encryption Client.

![\[Input, elaborazione e output del provider più recente nel client di crittografia DynamoDB\]](http://docs.aws.amazon.com/it_it/database-encryption-sdk/latest/devguide/images/most-recent-provider-provider-store.png)


Quando si crea un provider più recente utilizzando il [`CachingMostRecentProvider`simbolo](#mrp-versions), si specifica un archivio provider, un nome per il provider più recente e un valore [time-to-live](#most-recent-provider-ttl)(TTL). È inoltre possibile specificare facoltativamente una dimensione della cache, che determina il numero massimo di materiali crittografici che possono esistere nella cache.

Quando il componente di crittografia dell'item chiede al provider più recente i materiali di crittografia, il provider più recente inizia a cercare nella sua cache la versione più recente del suo CMP.
+ Se trova la versione CMP più recente nella cache e la CMP non ha superato il valore TTL, il provider più recente utilizza la CMP per generare materiali di crittografia. Quindi restituisce i materiali di crittografia al componente di crittografia dell'item. Questa operazione non richiede una chiamata dell'archivio provider.
+ Se la versione più recente della CMP non è presente nella cache o se è presente nella cache ma ha superato il valore TTL, il provider più recente richiede una CMP dall'archivio del provider. La richiesta include il nome del materiale del provider più recente e il numero della versione massima che conosce.

  1. L'archivio provider restituisce un CMP dal suo storage persistente. Se il provider store è un MetaStore, ottiene un Wrapped CMP crittografato dalla tabella DynamoDB interna utilizzando il nome del materiale del provider più recente come chiave di partizione e il numero di versione come chiave di ordinamento. MetaStore Utilizza il criptatore interno degli elementi e la CMP interna per decrittografare la Wrapped CMP. Quindi restituisce il CMP come testo normale al provider più recente. Se il CMP interno è un [provider KMS diretto](direct-kms-provider.md), questa fase prevede una chiamata a [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (AWS KMS).

  1. Il CMP aggiunge il campo `amzn-ddb-meta-id` alla [descrizione dei materiali effettivi](DDBEC-legacy-concepts.md#legacy-material-description). Il suo valore è il nome del materiale e la versione del CMP nella sua tabella interna. L'archivio provider restituisce al provider più recente il CMP come testo normale.

  1. Il provider più recente archivia il CMP nella cache.

  1. Il provider più recente utilizza il CMP per generare i materiali di crittografia. Quindi restituisce i materiali di crittografia al componente di crittografia dell'item.

### Ottenere materiali di decrittografia
<a name="most-recent-provider-decrypt"></a>

Quando il componente di crittografia dell'item chiede al provider più recente i materiali di decrittografia, il provider più recente utilizza il seguente processo per ottenerli e restituirli.

1. Il provider più recente chiede all'archivio provider il numero di versione dei materiali crittografici utilizzati per crittografare l'item. Passa la descrizione dei materiali effettivi dall'[attributo di descrizione del materiale](DDBEC-legacy-concepts.md#legacy-material-description) dell'item.

1. L'archivio provider riceve il numero di versione del CMP di crittografia dal campo `amzn-ddb-meta-id` nella descrizione dei materiali effettivi e lo restituisce al provider più recente.

1. Il provider più recente ricerca nella sua cache la versione del CMP utilizzata per crittografare e firmare l'item.
+ Se rileva che la versione corrispondente della CMP è nella sua cache e la CMP non ha superato il [valore time-to-live (TTL)](#most-recent-provider-ttl), il provider più recente utilizza la CMP per generare materiali di decrittografia. Quindi restituisce i materiali di decrittografia al componente di crittografia dell'item. Questa operazione non richiede una chiamata dell'archivio provider o a qualsiasi altro CMP.
+ Se la versione corrispondente della CMP non è presente nella cache o se la cache AWS KMS key ha superato il valore TTL, il provider più recente richiede una CMP dal proprio provider store. Nella richiesta invia il nome del materiale e il numero di versione del suo CMP di crittografia.

  1. L'archivio provider ricerca nello storage persistente il CMP utilizzando il nome del provider più recente come chiave di partizione e il numero di versione come chiave di ordinamento.
     + Se il nome e il numero di versione non sono nello storage persistente, l'archivio provider rileva un'eccezione. Se l'archivio provider è stato utilizzato per generare il CMP, il CMP dovrebbe essere archiviato nel suo storage persistente, a meno che non sia stato volutamente eliminato.
     + Se il CMP con il numero di versione e il nome corrispondenti sono disponibili nello storage persistente dell'archivio provider, quest'ultimo restituisce il CMP specificato al provider più recente. 

       Se il provider store è un MetaStore, ottiene il CMP crittografato dalla tabella DynamoDB. Quindi utilizza i materiali crittografici dal suo CMP interno per decrittografare il CMP crittografato prima di restituire il CMP al provider più recente. Se il CMP interno è un [provider KMS diretto](direct-kms-provider.md), questa fase prevede una chiamata a [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (AWS KMS).

  1. Il provider più recente archivia il CMP nella cache.

  1. Il provider più recente utilizza il CMP per generare i materiali di decrittografia. Quindi restituisce i materiali di decrittografia al componente di crittografia dell'item.

## Aggiornamenti al provider più recente
<a name="mrp-versions"></a>

Il simbolo del provider più recente viene modificato da `MostRecentProvider` a`CachingMostRecentProvider`. 

**Nota**  
Il `MostRecentProvider` simbolo, che rappresenta il provider più recente, è obsoleto nella versione 1.15 del DynamoDB Encryption Client for Java e nella versione 1.3 del DynamoDB Encryption Client for Python e rimosso dalle versioni 2.0.0 del DynamoDB Encryption Client in entrambe le implementazioni linguistiche. Utilizzate invece il. `CachingMostRecentProvider`

`CachingMostRecentProvider`Implementa le seguenti modifiche:
+ Rimuove `CachingMostRecentProvider` periodicamente i materiali crittografici dalla memoria quando la loro permanenza in memoria supera il valore configurato [time-to-live (TTL)](#most-recent-provider-ttl). 

  `MostRecentProvider`Potrebbero archiviare materiali crittografici in memoria per tutta la durata del processo. Di conseguenza, il provider più recente potrebbe non essere a conoscenza delle modifiche alle autorizzazioni. Potrebbe utilizzare le chiavi di crittografia dopo la revoca delle autorizzazioni del chiamante per utilizzarle. 

  Se non riesci ad eseguire l'aggiornamento a questa nuova versione, puoi ottenere un effetto simile chiamando periodicamente il `clear()` metodo nella cache. Questo metodo svuota manualmente il contenuto della cache e richiede al Most Recent Provider di richiedere una nuova CMP e nuovi materiali crittografici. 
+ Include `CachingMostRecentProvider` anche un'impostazione della dimensione della cache che consente un maggiore controllo sulla cache.

Per eseguire l'aggiornamento a`CachingMostRecentProvider`, è necessario modificare il nome del simbolo nel codice. Sotto tutti gli altri aspetti, `CachingMostRecentProvider` è completamente retrocompatibile con. `MostRecentProvider` Non è necessario crittografare nuovamente gli elementi della tabella.

Tuttavia, `CachingMostRecentProvider` genera più chiamate all'infrastruttura chiave sottostante. Chiama l'archivio del provider almeno una volta in ogni intervallo time-to-live (TTL). Le applicazioni con numerose applicazioni attive CMPs (a causa della frequente rotazione) o le applicazioni con flotte di grandi dimensioni sono più suscettibili a questo cambiamento. 

Prima di rilasciare il codice aggiornato, testalo accuratamente per assicurarti che le chiamate più frequenti non danneggino l'applicazione o causino limitazioni da parte dei servizi da cui dipende il tuo provider, come AWS Key Management Service () o AWS KMS Amazon DynamoDB. Per mitigare eventuali problemi di prestazioni, regola la dimensione e la dimensione della cache in `CachingMostRecentProvider` base alle time-to-live caratteristiche prestazionali osservate. Per le linee guida, consulta [Impostazione di un valore time-to-live](#most-recent-provider-ttl).

# Provider di materiali statici
<a name="static-provider"></a>

**Nota**  
La nostra libreria di crittografia lato client è stata [rinominata](DDBEC-rename.md) Database Encryption SDK. AWS Il seguente argomento fornisce informazioni sulle versioni 1. *x* —2. *x* del DynamoDB Encryption Client for Java e versioni 1. *x —3.* *x* del client di crittografia DynamoDB per Python. Per ulteriori informazioni, consulta [AWS Database Encryption SDK per il supporto della versione DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

Lo *Static Materials Provider* (Static CMP) è un [fornitore di materiali crittografici](DDBEC-legacy-concepts.md#concept-material-provider) (CMP) molto semplice destinato a test, proof-of-concept dimostrazioni e compatibilità con le versioni precedenti.

Per utilizzare il CMP di statici per crittografare un item della tabella, è necessario fornire una chiave di crittografia simmetrica [AES](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) e una chiave di firma o una coppia di chiavi. Devi fornire le stesse chiavi per decrittografare l'item crittografato. Il CMP di statici non esegue alcuna operazione di crittografia. Passa invece al componente di crittografia dell'item le chiavi di crittografia da te fornite senza modificarle. Il componente di crittografia dell'item crittografa direttamente gli item con la chiave di crittografia. Quindi, utilizza direttamente la chiave di firma per firmarli. 

Poiché il CMP di statici non genera alcun materiale crittografico univoco, tutti gli item della tabella che hai elaborato sono crittografati con la stessa chiave di crittografia e firmati con la stessa chiave di firma. Quando utilizzi la stessa chiave per crittografare i valori degli attributi in numerosi item o utilizzi la stessa chiave o coppia di chiavi per firmare tutti gli item, rischi di superare i limiti crittografici delle chiavi. 

**Nota**  
Il [Provider di statici asimmetrico](https://aws.github.io/aws-dynamodb-encryption-java/com/amazonaws/services/dynamodbv2/datamodeling/encryption/providers/AsymmetricStaticProvider.html) nella libreria Java non è un provider di statici. Fornisce soltanto costruttori alternativi per il [CMP di sottoposti a wrapping](wrapped-provider.md). Può essere utilizzato per la produzione senza alcun rischio per la sicurezza, tuttavia dovresti utilizzare direttamente il CMP di sottoposti a wrapping ogni qualvolta sia possibile.

Static CMP è uno dei numerosi [fornitori di materiali crittografici](DDBEC-legacy-concepts.md#concept-material-provider) (CMPs) supportati dal DynamoDB Encryption Client. Per informazioni sull'altro, vedere. CMPs [Fornitore di materiali crittografici](crypto-materials-providers.md)

**Per il codice di esempio, consulta:**
+ Java: [SymmetricEncryptedItem](https://github.com/aws/aws-dynamodb-encryption-java/blob/master/examples/src/main/java/com/amazonaws/examples/SymmetricEncryptedItem.java)

**Topics**
+ [Come utilizzarlo](#static-cmp-how-to-use)
+ [Come funziona](#static-cmp-how-it-works)

## Come utilizzarlo
<a name="static-cmp-how-to-use"></a>

Per creare un provider di statici, fornisci una chiave di crittografia o una coppia di chiavi e una chiave di firma o una coppia di chiavi. Devi fornire materiali chiave per crittografare e decrittografare gli item della tabella.

------
#### [ 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
)
```

------

## Come funziona
<a name="static-cmp-how-it-works"></a>

Il provider di statici passa le chiavi di crittografia e firma che hai fornito al componente di crittografia dell'item, dove vengono direttamente utilizzate per crittografare e firmare gli item della tabella. Vengono utilizzate le stesse chiavi per tutti gli item, a meno che tu non fornisca chiavi diverse per ciascun item.

![\[L'input, l'elaborazione e l'output dello Static Materials Provider nel DynamoDB Encryption Client\]](http://docs.aws.amazon.com/it_it/database-encryption-sdk/latest/devguide/images/staticCMP.png)


### Ottenere materiali di crittografia
<a name="static-cmp-get-encryption-materials"></a>

In questa sezione vengono descritti nei dettagli gli input, gli output e l'elaborazione eseguita dal provider di materiali statici (CMP di statici) al momento della ricezione di una richiesta di materiali di crittografia.

**Input ** (dall'applicazione)
+ Una chiave di crittografia: deve essere una chiave simmetrica, ad esempio una chiave [Advanced Encryption Standard](https://tools.ietf.org/html/rfc3394.html) (AES). 
+ Una chiave di firma: può essere una chiave simmetrica o una coppia di chiavi asimmetrica. 

**Input** (dal componente di crittografia dell'item)
+ [Contesto di crittografia DynamoDB](concepts.md#encryption-context)

**Output** (sul componente di crittografia dell'item)
+ La chiave di crittografia passata come input.
+ La chiave di firma passata come input.
+ Descrizione dei materiali effettivi: l'eventuale [descrizione dei materiali richiesti](DDBEC-legacy-concepts.md#legacy-material-description) invariata.

### Ottenere materiali di decrittografia
<a name="static-cmp-get-decryption-materials"></a>

In questa sezione vengono descritti nei dettagli gli input, gli output e l'elaborazione eseguita dal provider di materiali statici (CMP di statici) al momento della ricezione di una richiesta di materiali di decrittografia.

Sebbene i metodi per ottenere i materiali di crittografia e ottenere i materiali di decrittografia siano separati, il comportamento è lo stesso. 

**Input ** (dall'applicazione)
+ Una chiave di crittografia: deve essere una chiave simmetrica, ad esempio una chiave [Advanced Encryption Standard](https://tools.ietf.org/html/rfc3394.html) (AES). 
+ Una chiave di firma: può essere una chiave simmetrica o una coppia di chiavi asimmetrica. 

**Input** (dal componente di crittografia dell'item)
+ Contesto di [crittografia DynamoDB (](concepts.md#encryption-context)non utilizzato)

**Output** (sul componente di crittografia dell'item)
+ La chiave di crittografia passata come input.
+ La chiave di firma passata come input.