

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Proveedor de materiales encapsulado
<a name="wrapped-provider"></a>

**nota**  
Nuestra biblioteca de cifrado del cliente pasó a [llamarse SDK de cifrado de bases de datos de AWS](DDBEC-rename.md). En el siguiente tema, se presenta información sobre las versiones 1.*x*—2.*x* del cliente de cifrado de DynamoDB para Java y versiones 1.*x*—3.*x* del cliente de cifrado de DynamoDB para Python. Para obtener más información, consulte el [SDK de cifrado de bases de datos de AWS para la compatibilidad de la versión de DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

El *proveedor de materiales encapsulado* (CMP encapsulado) le permite utilizar las claves de encapsulación y de firma desde cualquier fuente con el cliente de cifrado de DynamoDB. El Wrapped CMP no depende de ningún AWS servicio. Sin embargo, debe generar y administrar las claves de encapsulación y de firma fuera del cliente, incluida la entrega de las claves correctas para verificar y descifrar el elemento. 

El CMP encapsulado genera una clave de cifrado de elemento única para cada elemento. Encapsula la clave de cifrado del elemento con la clave de encapsulación que proporcione y guarda la clave de cifrado de elemento encapsulado en el [atributo de descripción de materiales](DDBEC-legacy-concepts.md#legacy-material-description) del elemento. Dado que suministra las claves de encapsulación y de firma, determina cómo se generan las claves de firma y encapsulación y si son únicas para cada elemento o si se reutilizan. 

El CMP encapsulado es una implementación segura y supone una buena opción para aplicaciones que puedan administrar materiales criptográficos.

Wrapped CMP es uno de los varios [proveedores de materiales criptográficos](DDBEC-legacy-concepts.md#concept-material-provider) (CMPs) compatibles con el cliente de cifrado de DynamoDB. Para obtener información sobre el otro, consulte. CMPs [Proveedor de materiales criptográficos](crypto-materials-providers.md)

**Para ver código de ejemplo, 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](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/wrapped_rsa_encrypted_table.py), [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)

**Topics**
+ [Modo de uso](#wrapped-cmp-how-to-use)
+ [Funcionamiento](#wrapped-cmp-how-it-works)

## Modo de uso
<a name="wrapped-cmp-how-to-use"></a>

Para crear un CMP encapsulado, especifique una clave de encapsulación (requerida durante el cifrado), una clave de desencapsulación (requerida durante el descifrado) y una clave de firma. Debe proporcionar las claves al cifrar y descifrar elementos.

Las claves de encapsulación, desencapsulación y firma pueden ser claves simétricas o pares de claves asimétricas. 

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

------

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

El CMP encapsulado genera una clave de cifrado de elemento nueva para cada elemento. Utiliza las claves de encapsulación, desencapsulación y firma que proporcione, tal y como se muestra en el siguiente diagrama.

![\[La entrada, el procesamiento y la salida del proveedor de materiales encapsulado en el cliente de cifrado de DynamoDB\]](http://docs.aws.amazon.com/es_es/database-encryption-sdk/latest/devguide/images/wrappedCMP.png)


### Obtener los materiales de cifrado
<a name="wrapped-cmp-get-encryption-materials"></a>

En esta sección se describen en detalle las entradas, las salidas y el procesamiento del proveedor de materiales encapsulado (CMP encapsulado) cuando recibe una solicitud para materiales de cifrado. 

**Entrada** (desde la aplicación)
+ Clave de encapsulación: una clave simétrica [Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES) o una clave pública [RSA](https://en.wikipedia.org/wiki/RSA_(cryptosystem)). Obligatorio si los valores de atributos están cifrados. De lo contrario, es opcional y se pasa por alto.
+ Clave de desencapsulación: opcional y se pasa por alto. 
+ Clave de firma

**Entrada** (desde el encriptador de elementos)
+ [Contexto de cifrado de DynamoDB](concepts.md#encryption-context)

**Salida** (al encriptador de elementos):
+ Clave de cifrado de elemento de texto no cifrado
+ Clave de firma (sin cambios)
+ [Descripción de material real](DDBEC-legacy-concepts.md#legacy-material-description): estos valores se guardan en el [atributo de descripción de material](DDBEC-legacy-concepts.md#legacy-material-description) que el cliente añade al elemento. 
  + `amzn-ddb-env-key`: clave de cifrado de elemento encapsulado cifrado en Base64
  + `amzn-ddb-env-alg`: algoritmo de cifrado utilizado para cifrar el elemento. El valor predeterminado es AES-256-CBC.
  + `amzn-ddb-wrap-alg`: el algoritmo de encapsulación que utilizó el CMP encapsulado para encapsular la clave de cifrado del elemento. Si la clave de encapsulación es una clave AES, la clave se encapsula utilizando `AES-Keywrap` no rellenado, tal como se define en [RFC 3394](https://tools.ietf.org/html/rfc3394.html). Si la clave de empaquetado es una clave RSA, la clave se cifra mediante RSA OAEP con relleno. MGF1 

**Procesando**

Cuando se cifra un elemento, transfiere una clave de encapsulación y una clave de firma. Una clave de desencapsulación es opcional y se pasa por alto.

1. El CMP encapsulado genera una clave de cifrado de elemento simétrica única para el elemento de tabla.

1. Utiliza la clave de cifrado que especifica para encapsular la clave de cifrado del elemento. A continuación, lo elimina de la memoria lo antes posible.

1. Devuelve la clave de cifrado del elemento con texto no cifrado, la clave de firma que suministró y una [descripción de material real](DDBEC-legacy-concepts.md#legacy-material-description) que incluye la clave de cifrado del elemento encapsulado y los algoritmos de cifrado y encapsulación.

1. El encriptador de elementos utiliza la clave de cifrado de texto no cifrado para cifrar el elemento. Utiliza la clave de firma que suministró para firmar el elemento. A continuación, elimina las claves de texto no cifrado de la memoria lo antes posible. Copia los campos en la descripción de material real, incluida la clave de cifrado encapsulada (`amzn-ddb-env-key`), en el atributo de descripción de material del elemento.

### Obtener los materiales de descifrado
<a name="wrapped-cmp-get-decryption-materials"></a>

En esta sección se describen en detalle las entradas, las salidas y el procesamiento del proveedor de materiales encapsulado (CMP encapsulado) cuando recibe una solicitud para materiales de descifrado. 

**Entrada** (desde la aplicación)
+ Clave de encapsulación: opcional y se pasa por alto.
+ Clave de encapsulación: la misma clave simétrica [Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES) o clave privada [RSA](https://en.wikipedia.org/wiki/RSA_(cryptosystem)) que corresponde a la clave pública RSA utilizada para cifrar. Obligatorio si los valores de atributos están cifrados. De lo contrario, es opcional y se pasa por alto.
+ Clave de firma

**Entrada** (desde el encriptador de elementos)
+ Una copia del [contexto de cifrado de DynamoDB](concepts.md#encryption-context) que contiene el contenido del atributo de descripción de material.

**Salida** (al encriptador de elementos)
+ Clave de cifrado de elemento de texto no cifrado
+ Clave de firma (sin cambios)

**Procesando**

Cuando se descifra un elemento, transfiere una clave de desencapsulación y una clave de firma. Una clave de encapsulación es opcional y se pasa por alto.

1. El CMP encapsulado obtiene la clave de cifrado del elemento encapsulado desde el atributo de descripción de material del elemento.

1. Utiliza la clave de desencapsulación y el algoritmo para desencapsular la clave de cifrado del elemento. 

1. Devuelve la clave de cifrado del elemento con texto no cifrado, la clave de firma y los algoritmos de cifrado y de firma al encriptador de elementos.

1. El encriptador de elementos utiliza la clave de firma para verificar el elemento. Si se realiza correctamente, utiliza la clave de cifrado de elementos para descifrar el elemento. A continuación, elimina las claves de texto no cifrado de la memoria lo antes posible.