AWS KMS Llaveros ECDH - AWS SDK de cifrado de bases de datos

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.

AWS KMS Llaveros ECDH

Se cambió el nombre de nuestra biblioteca de cifrado del lado del cliente por el de SDK de cifrado de bases de AWS datos. En esta guía para desarrolladores, se sigue proporcionando información sobre el cliente de cifrado de DynamoDB.
importante

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

Un anillo de claves AWS KMS ECDH utiliza una concordancia de claves asimétricas AWS KMS keyspara obtener una clave envolvente simétrica compartida entre dos partes. En primer lugar, el conjunto de claves utiliza el algoritmo de acuerdo de claves Elliptic Curve Diffie-Hellman (ECDH) para obtener un secreto compartido a partir de la clave privada del par de claves KMS del remitente y la 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 utiliza el SDK de cifrado de AWS bases de datos (KDF_CTR_HMAC_SHA384) para derivar la clave de empaquetado compartida cumple con las recomendaciones del NIST para la derivación de claves.

La función de derivación de claves devuelve 64 bytes de material de creación de claves. Para garantizar que ambas partes utilicen el material de codificación correcto, el SDK de cifrado de AWS bases de datos 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 claves KMS, entonces Bob puede crear un conjunto de claves ECDH sin procesar para descifrar el registro.

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

AWS KMS Permisos necesarios para los llaveros ECDH

El SDK AWS de cifrado de bases de datos no requiere una AWS cuenta y no depende de ningún AWS servicio. Sin embargo, para usar un AWS KMS conjunto de claves ECDH, 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 utilice.

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

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

Crear un conjunto de claves ECDH AWS KMS

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

  • ID del remitente AWS KMS key

    Debe identificar un par de claves KMS de curva elíptica (ECC) asimétrica recomendado por el NIST con un valor de. KeyUsage 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 codificada en DER, también conocida como SubjectPublicKeyInfo (SPKI), según se define en el RFC 5280.

    La AWS KMS GetPublicKeyoperación devuelve la clave pública de un par de claves KMS asimétricas en el formato codificado DER 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 codificada en DER del destinatario, también conocida como SubjectPublicKeyInfo (SPKI), tal como se define en el RFC 5280.

    La AWS KMS GetPublicKeyoperación devuelve la clave pública de un par de claves KMS asimétricas en el formato codificado DER 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 controla el acceso a la clave KMS de su conjunto de claves AWS KMS ECDH mediante concesiones, debe proporcionar todos los símbolos de concesión necesarios al inicializar el conjunto de claves.

Java

En el siguiente ejemplo, se crea un anillo de claves AWS KMS ECDH con la clave KMS 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();

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

Al descifrar, se recomienda especificar las claves que puede utilizar el SDK de cifrado de AWS bases de datos. Para seguir esta práctica recomendada, utilice un anillo de claves AWS KMS ECDH con el esquema de acuerdo de KmsPrivateKeyToStaticPublicKey claves. Sin embargo, también puede crear un conjunto de claves de detección de AWS KMS ECDH, es decir, un conjunto de claves de AWS KMS ECDH que pueda descifrar cualquier registro en el que la clave pública del par de claves KMS especificado coincida con la 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 claves del AWS KMS ECDH con el esquema de acuerdo de KmsPublicKeyDiscovery claves, proporcione los siguientes valores:

  • ID del destinatario AWS KMS key

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

  • Especificación de curva

    Identifica la especificación de la curva elíptica en el par de claves KMS del destinatario.

    Valores válidos: ECC_NIST_P256, ECC_NIS_P384, ECC_NIST_P512

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

    Si controla el acceso a la clave KMS de su conjunto de claves AWS KMS ECDH mediante concesiones, debe proporcionar todos los símbolos de concesión necesarios al inicializar el conjunto de claves.

Java

En el siguiente ejemplo, se crea un anillo de claves de detección de AWS KMS ECDH con un par de claves KMS en la ECC_NIST_P256 curva. Debe tener los DeriveSharedSecret permisos kms: GetPublicKey y kms: en el key pair de claves KMS especificado. Este conjunto de claves puede descifrar cualquier registro en el que la clave pública del par de claves KMS 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();