Conjunto de claves AWS KMS ECDH - AWS Cifrado de bases SDK

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.

Conjunto de claves AWS KMS ECDH

Nuestra biblioteca de cifrado del lado del cliente pasó a llamarse AWS Database Encryption. SDK En esta guía para desarrolladores, se sigue proporcionando información sobre el cliente de cifrado de DynamoDB.
importante

El AWS KMS ECDH anillo de claves solo está disponible en la versión 1.5.0 de la biblioteca de proveedores de materiales.

Un conjunto de AWS KMS ECDH claves utiliza un acuerdo de claves asimétrico AWS KMS keyspara obtener una clave de ajuste simétrica compartida entre dos partes. En primer lugar, el conjunto de claves utiliza el algoritmo de acuerdo de claves Diffie-Hellman (ECDH) de curva elíptica para obtener un secreto compartido a partir de la clave privada del par de claves del remitente y la KMS clave pública del destinatario. A continuación, el conjunto de claves utiliza el secreto compartido para obtener la clave de empaquetado compartida que protege las claves de cifrado de datos. La función de derivación de claves que SDK utiliza el cifrado de AWS bases de datos (KDF_CTR_HMAC_SHA384) para derivar la clave de empaquetado compartida se ajusta a NISTlas recomendaciones de derivación de claves.

La función de derivación de claves devuelve 64 bytes de material de codificación. Para garantizar que ambas partes utilicen el material de codificación correcto, el cifrado de la AWS base de datos SDK utiliza los primeros 32 bytes como clave de compromiso y los últimos 32 bytes como clave de empaquetado compartida. Al descifrar, si el conjunto de claves no puede reproducir la misma clave de compromiso y la misma clave de empaquetado compartida que están almacenadas en el campo de descripción del material del registro cifrado, la operación no se realizará correctamente. Por ejemplo, si cifra un registro con un conjunto de claves configurado con la clave privada de Alice y la clave pública de Bob, un conjunto de claves configurado con la clave privada de Bob y la clave pública de Alice reproducirá la misma clave de compromiso y clave de empaquetado compartida y podrá descifrar el registro. Si la clave pública de Bob no proviene de un par de KMS claves, entonces Bob puede crear un conjunto de ECDHclaves Raw para descifrar el registro.

El conjunto de AWS KMS ECDH claves cifra los registros con una clave simétrica utilizando -. AES GCM A continuación, la clave de datos se cifra sobre con la clave de empaquetado compartida derivada mediante -. AES GCM Cada AWS KMS ECDH llavero solo puede tener una clave de empaquetado compartida, pero puedes incluir varios AWS KMS ECDH llaveros, solos o con otros, en un conjunto de varios llaveros.

Permisos necesarios para los conjuntos de claves de AWS KMS ECDH

El cifrado AWS de bases de datos SDK no requiere una AWS cuenta y no depende de ningún servicio. AWS Sin embargo, para usar un AWS KMS ECDH conjunto de claves, necesita una AWS cuenta y los siguientes permisos mínimos AWS KMS keys en su conjunto de claves. Los permisos varían en función del esquema de acuerdo de claves que utilices.

  • Para cifrar y descifrar registros mediante el esquema de acuerdo de KmsPrivateKeyToStaticPublicKey claves, necesita kms: GetPublicKey y kms: DeriveSharedSecret en el par de claves asimétricas KMSdel remitente. Si proporciona directamente la clave pública DER codificada del remitente al crear una instancia de su conjunto de claves, solo necesitará el DeriveSharedSecret permiso kms: en el par de claves asimétricas del remitente. KMS

  • Para descifrar registros mediante el esquema de acuerdo de KmsPublicKeyDiscovery claves, necesita los GetPublicKey permisos kms: DeriveSharedSecret y kms: en el par de KMS claves asimétricas especificado.

Creación de un conjunto de claves de AWS KMS ECDH

Para crear un conjunto de AWS KMS ECDH claves que cifre y descifre los datos, debe utilizar el esquema de acuerdo de claves. KmsPrivateKeyToStaticPublicKey Para inicializar un conjunto de AWS KMS ECDH claves con el esquema de acuerdo de KmsPrivateKeyToStaticPublicKey claves, proporcione los siguientes valores:

  • ID del remitente AWS KMS key

    Debe identificar un ECC par de KMS claves NIST de curva elíptica () recomendado asimétrico con un KeyUsage valor de. KEY_AGREEMENT La clave privada del remitente se utiliza para obtener el secreto compartido.

  • (Opcional) Clave pública del remitente

    Debe ser una clave pública X.509 DER codificada, también conocida como SubjectPublicKeyInfo (SPKI), tal como se define en RFC 5280.

    La AWS KMS GetPublicKeyoperación devuelve la clave pública de un KMS key pair asimétrico en el formato DER codificado requerido.

    Para reducir el número de AWS KMS llamadas que realiza tu llavero, puedes proporcionar directamente la clave pública del remitente. Si no se proporciona ningún valor para la clave pública del remitente, el llavero llama AWS KMS para recuperar la clave pública del remitente.

  • La clave pública del destinatario

    Debe proporcionar la clave pública X.509 DER codificada del destinatario, también conocida como SubjectPublicKeyInfo (SPKI), tal como se define en RFC 5280.

    La AWS KMS GetPublicKeyoperación devuelve la clave pública de un KMS key pair asimétrico en el formato DER codificado requerido.

  • Especificación de curva

    Identifica la especificación de la curva elíptica en los pares de claves especificados. Los pares de claves del remitente y del destinatario deben tener la misma especificación de curva.

    Valores válidos: ECC_NIST_P256, ECC_NIS_P384, ECC_NIST_P512

  • (Opcional) Una lista de tokens de concesión

    Si controlas el acceso a la KMS clave de tu AWS KMS ECDH llavero mediante concesiones, debes proporcionar todas las fichas de concesión necesarias al inicializar el llavero.

C# / .NET

En el siguiente ejemplo, se crea un AWS KMS ECDH anillo de claves con la KMS clave del remitente, la clave pública del remitente y la clave pública del destinatario. En este ejemplo, se utiliza el senderPublicKey parámetro opcional para proporcionar la clave pública del remitente. Si no proporciona la clave pública del remitente, el conjunto de claves llama AWS KMS para recuperar la clave pública del remitente. Los pares de claves del remitente y del destinatario están en la ECC_NIST_P256 curva.

// Instantiate material providers var materialProviders = new MaterialProviders(new MaterialProvidersConfig()); // Must be DER-encoded X.509 public keys var BobPublicKey = new MemoryStream(new byte[] { }); var AlicePublicKey = new MemoryStream(new byte[] { }); // Create the AWS KMS ECDH static keyring var staticConfiguration = new KmsEcdhStaticConfigurations { KmsPrivateKeyToStaticPublicKey = new KmsPrivateKeyToStaticPublicKeyInput { SenderKmsIdentifier = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", SenderPublicKey = BobPublicKey, RecipientPublicKey = AlicePublicKey } }; var createKeyringInput = new CreateAwsKmsEcdhKeyringInput { CurveSpec = ECDHCurveSpec.ECC_NIST_P256, KmsClient = new AmazonKeyManagementServiceClient(), KeyAgreementScheme = staticConfiguration }; var keyring = materialProviders.CreateAwsKmsEcdhKeyring(createKeyringInput);
Java

En el siguiente ejemplo, se crea un conjunto de AWS KMS ECDH claves con la KMS clave del remitente, la clave pública del remitente y la clave pública del destinatario. En este ejemplo, se utiliza el senderPublicKey parámetro opcional para proporcionar la clave pública del remitente. Si no proporciona la clave pública del remitente, el conjunto de claves llama AWS KMS para recuperar la clave pública del remitente. Los pares de claves del remitente y del destinatario están en la ECC_NIST_P256 curva.

// Retrieve public keys // Must be DER-encoded X.509 public keys ByteBuffer BobPublicKey = getPublicKeyBytes("arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"); ByteBuffer AlicePublicKey = getPublicKeyBytes("arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"); // Create the AWS KMS ECDH static keyring final CreateAwsKmsEcdhKeyringInput senderKeyringInput = CreateAwsKmsEcdhKeyringInput.builder() .kmsClient(KmsClient.create()) .curveSpec(ECDHCurveSpec.ECC_NIST_P256) .KeyAgreementScheme( KmsEcdhStaticConfigurations.builder() .KmsPrivateKeyToStaticPublicKey( KmsPrivateKeyToStaticPublicKeyInput.builder() .senderKmsIdentifier("arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab") .senderPublicKey(BobPublicKey) .recipientPublicKey(AlicePublicKey) .build()).build()).build();

Crear un llavero de AWS KMS ECDH descubrimiento

Al descifrar, se recomienda especificar las claves que SDK puede utilizar el cifrado de la AWS base de datos. Para seguir esta práctica recomendada, utilice un AWS KMS ECDH anillo de claves con el esquema de acuerdo de KmsPrivateKeyToStaticPublicKey claves. Sin embargo, también puede crear un conjunto de claves de AWS KMS ECDH detección, es decir, un conjunto de AWS KMS ECDH claves que pueda descifrar cualquier registro en el que la clave pública del par de claves especificado coincida con la KMS clave pública del destinatario almacenada en el campo de descripción del material del registro cifrado.

importante

Al descifrar los registros mediante el esquema de acuerdo de KmsPublicKeyDiscovery claves, acepta todas las claves públicas, independientemente de quién sea su propietario.

Para inicializar un conjunto de AWS KMS ECDH claves con el esquema de acuerdo de KmsPublicKeyDiscovery claves, proporcione los siguientes valores:

  • ID del destinatario AWS KMS key

    Debe identificar un ECC par de KMS claves NIST de curva elíptica () recomendado asimétrico con un KeyUsage valor de. KEY_AGREEMENT

  • Especificación de curva

    Identifica la especificación de la curva elíptica en el KMS key pair del destinatario.

    Valores válidos: ECC_NIST_P256, ECC_NIS_P384, ECC_NIST_P512

  • (Opcional) Una lista de tokens de concesión

    Si controlas el acceso a la KMS clave de tu AWS KMS ECDH llavero mediante concesiones, debes proporcionar todas las fichas de concesión necesarias al inicializar el llavero.

C# / .NET

En el siguiente ejemplo, se crea un llavero de AWS KMS ECDH detección con un par de KMS claves en la ECC_NIST_P256 curva. Debe tener los DeriveSharedSecret permisos kms: GetPublicKey y kms: en el KMS key pair especificado. Este conjunto de claves puede descifrar cualquier registro en el que la clave pública del par de KMS claves especificado coincida con la clave pública del destinatario almacenada en el campo de descripción del material del registro cifrado.

// Instantiate material providers var materialProviders = new MaterialProviders(new MaterialProvidersConfig()); // Create the AWS KMS ECDH discovery keyring var discoveryConfiguration = new KmsEcdhStaticConfigurations { KmsPublicKeyDiscovery = new KmsPublicKeyDiscoveryInput { RecipientKmsIdentifier = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" } }; var createKeyringInput = new CreateAwsKmsEcdhKeyringInput { CurveSpec = ECDHCurveSpec.ECC_NIST_P256, KmsClient = new AmazonKeyManagementServiceClient(), KeyAgreementScheme = discoveryConfiguration }; var keyring = materialProviders.CreateAwsKmsEcdhKeyring(createKeyringInput);
Java

En el siguiente ejemplo, se crea un llavero de AWS KMS ECDH detección con un par de KMS claves en la ECC_NIST_P256 curva. Debe tener los DeriveSharedSecret permisos kms: GetPublicKey y kms: en el KMS key pair especificado. Este conjunto de claves puede descifrar cualquier registro en el que la clave pública del par de KMS claves especificado coincida con la clave pública del destinatario almacenada en el campo de descripción del material del registro cifrado.

// Create the AWS KMS ECDH discovery keyring final CreateAwsKmsEcdhKeyringInput recipientKeyringInput = CreateAwsKmsEcdhKeyringInput.builder() .kmsClient(KmsClient.create()) .curveSpec(ECDHCurveSpec.ECC_NIST_P256) .KeyAgreementScheme( KmsEcdhStaticConfigurations.builder() .KmsPublicKeyDiscovery( KmsPublicKeyDiscoveryInput.builder() .recipientKmsIdentifier("arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321").build() ).build()) .build();