Tokens de autenticação do AWS KMS ECDH - AWS Criptografia de banco SDK

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Tokens de autenticação do AWS KMS ECDH

Nossa biblioteca de criptografia do lado do cliente foi renomeada para Database Encryption. AWS SDK Este guia do desenvolvedor ainda fornece informações sobre o DynamoDB Encryption Client.
Importante

O AWS KMS ECDH chaveiro só está disponível na versão 1.5.0 da Material Providers Library.

Um AWS KMS ECDH chaveiro usa um acordo de chave assimétrica AWS KMS keyspara derivar uma chave de embalagem simétrica compartilhada entre duas partes. Primeiro, o chaveiro usa o algoritmo de acordo de chave Elliptic Curve Diffie-Hellman (ECDH) para derivar um segredo compartilhado da chave privada no par de chaves do remetente e da chave pública do destinatário. KMS Em seguida, o chaveiro usa o segredo compartilhado para derivar a chave de empacotamento compartilhada que protege suas chaves de criptografia de dados. A função de derivação de chave que a criptografia AWS de banco de dados SDK usa (KDF_CTR_HMAC_SHA384) para derivar a chave de encapsulamento compartilhada está em conformidade com NISTas recomendações para derivação de chave.

A função de derivação de chave retorna 64 bytes de material de chaveamento. Para garantir que ambas as partes usem o material de codificação correto, a criptografia AWS de banco de dados SDK usa os primeiros 32 bytes como chave de compromisso e os últimos 32 bytes como chave de encapsulamento compartilhada. Na descriptografia, se o chaveiro não puder reproduzir a mesma chave de compromisso e chave de empacotamento compartilhada armazenadas no campo de descrição do material do registro criptografado, a operação falhará. Por exemplo, se você criptografar um registro com um chaveiro configurado com a chave privada de Alice e a chave pública de Bob, um chaveiro configurado com a chave privada de Bob e a chave pública de Alice reproduzirá a mesma chave de compromisso e chave de encapsulamento compartilhada e poderá descriptografar o registro. Se a chave pública de Bob não for de um par de KMS chaves, Bob poderá criar um ECDHchaveiro Raw para decifrar o registro.

O AWS KMS ECDH chaveiro criptografa registros com uma chave simétrica usando -. AES GCM A chave de dados é então criptografada em envelope com a chave de empacotamento compartilhada derivada usando AES -. GCM Cada AWS KMS ECDH chaveiro pode ter apenas uma chave de embrulho compartilhada, mas você pode incluir vários AWS KMS ECDH chaveiros, sozinhos ou com outros chaveiros, em um chaveiro múltiplo.

Permissões necessárias para tokens de autenticação do AWS KMS ECDH

A criptografia AWS de banco de dados SDK não exige uma AWS conta e não depende de nenhum AWS serviço. No entanto, para usar um AWS KMS ECDH chaveiro, você precisa de uma AWS conta e das seguintes permissões mínimas AWS KMS keys no seu chaveiro. As permissões variam de acordo com o esquema de contrato de chaves que você usa.

  • Para criptografar e descriptografar registros usando o esquema de contrato de KmsPrivateKeyToStaticPublicKey chave, você precisa de kms: GetPublicKey e kms: no par de chaves assimétricas do DeriveSharedSecret remetente. KMS Se você fornecer diretamente a chave pública DER codificada pelo remetente ao instanciar seu chaveiro, precisará apenas da DeriveSharedSecret permissão kms: no par de chaves assimétricas do remetente. KMS

  • Para descriptografar registros usando o esquema de contrato de KmsPublicKeyDiscovery chaves, você precisa das GetPublicKey permissões kms: DeriveSharedSecret e kms: no par de chaves assimétricas especificado. KMS

Criação de um token de autenticação do AWS KMS ECDH

Para criar um AWS KMS ECDH chaveiro que criptografe e descriptografe dados, você deve usar o esquema do contrato de chaves. KmsPrivateKeyToStaticPublicKey Para inicializar um AWS KMS ECDH chaveiro com o esquema de contrato de KmsPrivateKeyToStaticPublicKey chave, forneça os seguintes valores:

C# / .NET

O exemplo a seguir cria um AWS KMS ECDH chaveiro com a KMS chave do remetente, a chave pública do remetente e a chave pública do destinatário. Este exemplo usa o senderPublicKey parâmetro opcional para fornecer a chave pública do remetente. Se você não fornecer a chave pública do remetente, o chaveiro liga AWS KMS para recuperar a chave pública do remetente. Os pares de chaves do remetente e do destinatário estão na 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

O exemplo a seguir cria um AWS KMS ECDH chaveiro com a KMS chave do remetente, a chave pública do remetente e a chave pública do destinatário. Este exemplo usa o senderPublicKey parâmetro opcional para fornecer a chave pública do remetente. Se você não fornecer a chave pública do remetente, o chaveiro liga AWS KMS para recuperar a chave pública do remetente. Os pares de chaves do remetente e do destinatário estão na 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();

Criando um chaveiro AWS KMS ECDH Discovery

Ao descriptografar, é uma prática recomendada especificar as chaves que a criptografia SDK de AWS banco de dados pode usar. Para seguir essa prática recomendada, use um AWS KMS ECDH chaveiro com o esquema de contrato de KmsPrivateKeyToStaticPublicKey chaves. No entanto, você também pode criar um chaveiro de AWS KMS ECDH descoberta, ou seja, um AWS KMS ECDH chaveiro que possa descriptografar qualquer registro em que a chave pública do par de chaves especificado corresponda à KMS chave pública do destinatário armazenada no campo de descrição do material do registro criptografado.

Importante

Ao descriptografar registros usando o esquema de contrato de KmsPublicKeyDiscovery chave, você aceita todas as chaves públicas, independentemente de quem as possua.

Para inicializar um AWS KMS ECDH chaveiro com o esquema de contrato de KmsPublicKeyDiscovery chave, forneça os seguintes valores:

  • AWS KMS key ID do destinatário

    Deve identificar um ECC par de chaves assimétrico NIST de curva elíptica () recomendado com um KMS valor de. KeyUsage KEY_AGREEMENT

  • Especificação da curva

    Identifica a especificação da curva elíptica no par KMS de chaves do destinatário.

    Valores válidos: ECC_NIST_P256, ECC_NIS_P384, ECC_NIST_P512

  • (Opcional) Uma lista de Tokens de Concessão

    Se você controlar o acesso à KMS chave em seu AWS KMS ECDH chaveiro com concessões, deverá fornecer todos os tokens de concessão necessários ao inicializar o chaveiro.

C# / .NET

O exemplo a seguir cria um chaveiro de AWS KMS ECDH descoberta com um par de KMS chaves na ECC_NIST_P256 curva. Você deve ter as DeriveSharedSecret permissões kms: GetPublicKey e kms: no par de KMS chaves especificado. Esse chaveiro pode descriptografar qualquer registro em que a chave pública do par de chaves especificado corresponda à KMS chave pública do destinatário armazenada no campo de descrição do material do registro criptografado.

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

O exemplo a seguir cria um chaveiro de AWS KMS ECDH descoberta com um par de KMS chaves na ECC_NIST_P256 curva. Você deve ter as DeriveSharedSecret permissões kms: GetPublicKey e kms: no par de KMS chaves especificado. Esse chaveiro pode descriptografar qualquer registro em que a chave pública do par de chaves especificado corresponda à KMS chave pública do destinatário armazenada no campo de descrição do material do registro criptografado.

// 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();