ECDHChaveiros Raw - 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á.

ECDHChaveiros Raw

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 ECDH chaveiro Raw só está disponível na versão 1.5.0 da Material Providers Library.

O ECDH chaveiro Raw usa os pares de chaves públicas-privadas de curva elíptica que você fornece para derivar uma chave de empacotamento compartilhada entre duas partes. Primeiro, o chaveiro obtém um segredo compartilhado usando a chave privada do remetente, a chave pública do destinatário e o algoritmo de acordo de chave Elliptic Curve Diffie-Hellman (). ECDH 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 for de um AWS KMS key par, Bob poderá criar um AWS KMS ECDHchaveiro para decifrar o registro.

O ECDH chaveiro Raw 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 ECDH chaveiro Raw pode ter apenas uma chave de embrulho compartilhada, mas você pode incluir vários ECDH chaveiros Raw, sozinhos ou com outros chaveiros, em um chaveiro múltiplo.

Você é responsável por gerar, armazenar e proteger suas chaves privadas, preferencialmente em um módulo de segurança de hardware (HSM) ou sistema de gerenciamento de chaves. Os pares de chaves do remetente e do destinatário devem estar na mesma curva elíptica. A criptografia AWS de banco de dados SDK suporta as seguintes especificações de curva elíptica:

  • ECC_NIST_P256

  • ECC_NIST_P384

  • ECC_NIST_P512

Criando um ECDH chaveiro Raw

O ECDH chaveiro Raw suporta três esquemas de contrato principais: RawPrivateKeyToStaticPublicKeyEphemeralPrivateKeyToStaticPublicKey, e. PublicKeyDiscovery O esquema de contrato de chave selecionado determina quais operações criptográficas você pode realizar e como os materiais de chaveamento são montados.

RawPrivateKeyToStaticPublicKey

Use o esquema de contrato de RawPrivateKeyToStaticPublicKey chave para configurar estaticamente a chave privada do remetente e a chave pública do destinatário no chaveiro. Esse esquema de contrato de chave pode criptografar e descriptografar registros.

Para inicializar um ECDH chaveiro Raw com o esquema de contrato de RawPrivateKeyToStaticPublicKey chave, forneça os seguintes valores:

C# / .NET
// Instantiate material providers var materialProviders = new MaterialProviders(new MaterialProvidersConfig()); var BobPrivateKey = new MemoryStream(new byte[] { }); var AlicePublicKey = new MemoryStream(new byte[] { }); // Create the Raw ECDH static keyring var staticConfiguration = new RawEcdhStaticConfigurations() { RawPrivateKeyToStaticPublicKey = new RawPrivateKeyToStaticPublicKeyInput { SenderStaticPrivateKey = BobPrivateKey, RecipientPublicKey = AlicePublicKey } }; var createKeyringInput = new CreateRawEcdhKeyringInput() { CurveSpec = ECDHCurveSpec.ECC_NIST_P256, KeyAgreementScheme = staticConfiguration }; var keyring = materialProviders.CreateRawEcdhKeyring(createKeyringInput);
Java

O exemplo Java a seguir usa o esquema de contrato de RawPrivateKeyToStaticPublicKey chave para configurar estaticamente a chave privada do remetente e a chave pública do destinatário. Ambos os pares de chaves estão na ECC_NIST_P256 curva.

private static void StaticRawKeyring() { // Instantiate material providers final MaterialProviders materialProviders = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); KeyPair senderKeys = GetRawEccKey(); KeyPair recipient = GetRawEccKey(); // Create the Raw ECDH static keyring final CreateRawEcdhKeyringInput rawKeyringInput = CreateRawEcdhKeyringInput.builder() .curveSpec(ECDHCurveSpec.ECC_NIST_P256) .KeyAgreementScheme( RawEcdhStaticConfigurations.builder() .RawPrivateKeyToStaticPublicKey( RawPrivateKeyToStaticPublicKeyInput.builder() // Must be a PEM-encoded private key .senderStaticPrivateKey(ByteBuffer.wrap(senderKeys.getPrivate().getEncoded())) // Must be a DER-encoded X.509 public key .recipientPublicKey(ByteBuffer.wrap(recipient.getPublic().getEncoded())) .build() ) .build() ).build(); final IKeyring staticKeyring = materialProviders.CreateRawEcdhKeyring(rawKeyringInput); }

EphemeralPrivateKeyToStaticPublicKey

Os chaveiros configurados com o esquema de contrato de EphemeralPrivateKeyToStaticPublicKey chaves criam um novo par de chaves localmente e derivam uma chave de empacotamento compartilhada exclusiva para cada chamada criptografada.

Esse esquema de contrato de chave só pode criptografar registros. Para descriptografar registros criptografados com o esquema de contrato de EphemeralPrivateKeyToStaticPublicKey chave, você deve usar um esquema de contrato de chave de descoberta configurado com a mesma chave pública do destinatário. Para descriptografar, você pode usar um ECDH chaveiro bruto com o algoritmo de acordo de PublicKeyDiscoverychave ou, se a chave pública do destinatário for de um KMS par de chaves de acordo de chave assimétrico, você pode usar AWS KMS ECDH um chaveiro com o esquema de contrato de chave. KmsPublicKeyDiscovery

Para inicializar um ECDH chaveiro Raw com o esquema de contrato de EphemeralPrivateKeyToStaticPublicKey chave, forneça os seguintes valores:

C# / .NET

O exemplo a seguir cria um ECDH chaveiro Raw com o esquema de contrato de EphemeralPrivateKeyToStaticPublicKey chave. Ao criptografar, o chaveiro criará um novo par de chaves localmente na curva especificadaECC_NIST_P256.

// Instantiate material providers var materialProviders = new MaterialProviders(new MaterialProvidersConfig()); var AlicePublicKey = new MemoryStream(new byte[] { }); // Create the Raw ECDH ephemeral keyring var ephemeralConfiguration = new RawEcdhStaticConfigurations() { EphemeralPrivateKeyToStaticPublicKey = new EphemeralPrivateKeyToStaticPublicKeyInput { RecipientPublicKey = AlicePublicKey } }; var createKeyringInput = new CreateRawEcdhKeyringInput() { CurveSpec = ECDHCurveSpec.ECC_NIST_P256, KeyAgreementScheme = ephemeralConfiguration }; var keyring = materialProviders.CreateRawEcdhKeyring(createKeyringInput);
Java

O exemplo a seguir cria um ECDH chaveiro Raw com o esquema de contrato de EphemeralPrivateKeyToStaticPublicKey chave. Ao criptografar, o chaveiro criará um novo par de chaves localmente na curva especificadaECC_NIST_P256.

private static void EphemeralRawEcdhKeyring() { // Instantiate material providers final MaterialProviders materialProviders = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); ByteBuffer recipientPublicKey = getPublicKeyBytes(); // Create the Raw ECDH ephemeral keyring final CreateRawEcdhKeyringInput ephemeralInput = CreateRawEcdhKeyringInput.builder() .curveSpec(ECDHCurveSpec.ECC_NIST_P256) .KeyAgreementScheme( RawEcdhStaticConfigurations.builder() .EphemeralPrivateKeyToStaticPublicKey( EphemeralPrivateKeyToStaticPublicKeyInput.builder() .recipientPublicKey(recipientPublicKey) .build() ) .build() ).build(); final IKeyring ephemeralKeyring = materialProviders.CreateRawEcdhKeyring(ephemeralInput); }

PublicKeyDiscovery

Ao descriptografar, é uma prática recomendada especificar as chaves de encapsulamento que a criptografia de AWS banco de dados pode usar. SDK Para seguir essa prática recomendada, use um ECDH chaveiro que especifique a chave privada do remetente e a chave pública do destinatário. No entanto, você também pode criar um chaveiro Raw ECDH Discovery, ou seja, um ECDH chaveiro Raw que pode descriptografar qualquer registro em que a chave pública da chave especificada corresponda à chave pública do destinatário armazenada no campo de descrição do material do registro criptografado. Esse esquema de contrato de chave só pode descriptografar registros.

Importante

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

Para inicializar um ECDH chaveiro Raw com o esquema de contrato de PublicKeyDiscovery chave, forneça os seguintes valores:

C# / .NET

O exemplo a seguir cria um ECDH chaveiro Raw com o esquema de contrato de PublicKeyDiscovery chave. Esse chaveiro pode descriptografar qualquer registro em que a chave pública da chave privada especificada corresponda à 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()); var AlicePrivateKey = new MemoryStream(new byte[] { }); // Create the Raw ECDH discovery keyring var discoveryConfiguration = new RawEcdhStaticConfigurations() { PublicKeyDiscovery = new PublicKeyDiscoveryInput { RecipientStaticPrivateKey = AlicePrivateKey } }; var createKeyringInput = new CreateRawEcdhKeyringInput() { CurveSpec = ECDHCurveSpec.ECC_NIST_P256, KeyAgreementScheme = discoveryConfiguration }; var keyring = materialProviders.CreateRawEcdhKeyring(createKeyringInput);
Java

O exemplo a seguir cria um ECDH chaveiro Raw com o esquema de contrato de PublicKeyDiscovery chave. Esse chaveiro pode descriptografar qualquer registro em que a chave pública da chave privada especificada corresponda à chave pública do destinatário armazenada no campo de descrição do material do registro criptografado.

private static void RawEcdhDiscovery() { // Instantiate material providers final MaterialProviders materialProviders = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); KeyPair recipient = GetRawEccKey(); // Create the Raw ECDH discovery keyring final CreateRawEcdhKeyringInput rawKeyringInput = CreateRawEcdhKeyringInput.builder() .curveSpec(ECDHCurveSpec.ECC_NIST_P256) .KeyAgreementScheme( RawEcdhStaticConfigurations.builder() .PublicKeyDiscovery( PublicKeyDiscoveryInput.builder() // Must be a PEM-encoded private key .recipientStaticPrivateKey(ByteBuffer.wrap(sender.getPrivate().getEncoded())) .build() ) .build() ).build(); final IKeyring publicKeyDiscovery = materialProviders.CreateRawEcdhKeyring(rawKeyringInput); }