Perguntas frequentes - AWS Encryption 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á.

Perguntas frequentes

Como o AWS Encryption SDK é diferente dos SDKs da AWS?

Os AWSSDKs fornecem bibliotecas para interagir com a Amazon Web Services (AWS), incluindo AWS Key Management Service (AWS KMS). Algumas das implementações de linguagem do AWS Encryption SDK, como AWS Encryption SDK para .NET, sempre exigem o AWS SDK na mesma linguagem de programação. Outras implementações de linguagem somente exigem o SDK da AWS correspondente quando você usa chaves AWS KMS em seus tokens de autenticação ou provedores de chaves mestras. Para obter detalhes, consulte o tópico sobre sua linguagem de programação em Linguagens de programação do AWS Encryption SDK.

Você pode usar os AWS SDKs para interagir com o AWS KMS, incluindo criptografar e descriptografar pequenas quantidades de dados (até 4.096 bytes com uma chave de criptografia simétrica) e gerar chaves de dados para criptografia do lado do cliente. No entanto, ao gerar uma chave de dados, você deve gerenciar todo o processo de criptografia e descriptografia, o que inclui criptografar dados com a chave de dados fora do AWS KMS, descartar com segurança a chave de dados de texto simples, armazenar a chave de dados criptografada e, em seguida, descriptografar a chave de dados e descriptografar seus dados. O AWS Encryption SDK gerencia esse processo para você.

O AWS Encryption SDK fornece uma biblioteca que criptografa e descriptografa dados usando os padrões e as práticas recomendadas do setor. Ele gera a chave de dados, criptografa-a com as chaves de encapsulamento especificadas e retorna uma mensagem criptografada, um objeto de dados portátil que inclui os dados criptografados e as chaves de dados criptografadas necessárias para descriptografá-los. Na hora de descriptografar, você passa a mensagem criptografada e pelo menos uma das chaves de encapsulamento (opcional), e o AWS Encryption SDK retorna seus dados em texto sem formatação.

Você pode usar AWS KMS keys como chaves de encapsulamento no AWS Encryption SDK, mas isso não é obrigatório. Você pode usar as chaves de criptografia geradas por você e as do seu gerenciador de chaves ou módulo de segurança de hardware on-premises. Você pode usar o AWS Encryption SDK mesmo se não tem uma conta da AWS.

Qual a diferença entre o AWS Encryption SDK e o cliente de criptografia do Amazon S3?

O cliente de criptografia do Amazon S3 nos AWS SDKs fornece criptografia e descriptografia dos dados que você armazena no Amazon Simple Storage Service (Amazon S3). Esses clientes são totalmente acoplados ao Amazon S3 e são destinados para uso apenas com os dados armazenados ali.

O AWS Encryption SDK fornece criptografia e descriptografia de dados que você pode armazenar em qualquer lugar. Os clientes de criptografia do AWS Encryption SDK e do Amazon S3 não são compatíveis, pois eles produzem textos cifrados com diferentes formatos de dados.

Quais algoritmos de criptografia são compatíveis com o AWS Encryption SDK, e qual é o padrão?

O AWS Encryption SDK usa o algoritmo Advanced Encryption Standard (AES – Padrão avançado de criptografia) no Galois/Counter Mode (GCM), conhecido como AES-GCM, para criptografar dados brutos. Ele permite que você escolha entre vários algoritmos simétricos e assimétricos para criptografar as chaves de dados que criptografam seus dados.

Para o AES-GCM, o pacote de algoritmos padrão é o AES-GCM com chave de 256 bits, derivação de chave (HKDF), assinaturas digitais e confirmação de chave. O AWS Encryption SDK também oferece suporte a chaves de criptografia de 192 e 128 bits e algoritmos de criptografia sem assinaturas digitais e confirmação de chaves.

Em todos os casos, o tamanho do vetor de inicialização (IV) é de 12 bytes, e o tamanho da tag de autenticação é de 16 bytes. Por padrão, o SDK usa a chave de dados como entrada para a HKDF (HMAC-based extract-and-expand key derivation function - Função de derivação de chaves de extração e expansão com base em HMAC) para derivar a chave de criptografia do AES-GCM, e também adiciona uma assinatura Elliptic Curve Digital Signature Algorithm (ECDSA - Algoritmo de assinatura digital de curva elíptica).

Para obter informações sobre como escolher o algoritmo a ser usado, consulte Pacotes de algoritmos compatíveis.

Para obter detalhes sobre a implementação de algoritmos compatíveis, consulte Referência de algoritmos.

Como o vetor de inicialização (IV) é gerado e onde é armazenado?

O AWS Encryption SDK usa um método determinístico para construir um IV valor diferente para cada moldura. Esse procedimento garante que os IVs nunca sejam repetidos em uma mensagem. (Antes da versão 1.3.0 do AWS Encryption SDK for Java e do AWS Encryption SDK for Python, o AWS Encryption SDK gerava aleatoriamente um valor IV exclusivo para cada moldura.)

O SDK armazena o IV na mensagem criptografada que oAWS Encryption SDK retorna. Para obter mais informações, consulte AWS Encryption SDK referência de formato de mensagem.

Como cada chave de dados é gerada, criptografada e descriptografada?

O método depende do token de autenticação ou do provedor de chave mestra que você usa.

Os tokens de autenticação e provedores de chaves mestras do AWS KMS no AWS Encryption SDK usam a operação da API GenerateDataKey do AWS KMS para gerar cada chave de dados e criptografá-las sob sua chave de encapsulamento. Para criptografar cópias da chave de dados em chaves do KMS adicionais, eles usam a operação Criptografar do AWS KMS. Para descriptografar uma chave de dados, use a operação Descriptografar do AWS KMS. Para obter detalhes, consulte token de autenticação do AWS KMS na Especificação do AWS Encryption SDKno GitHub.

Outros tokens de autenticação geram a chave de dados, criptografam e descriptografam usando os métodos das práticas recomendadas para cada linguagem de programação. Para obter detalhes, consulte a especificação do fornecedor do token de autenticação ou da chave mestra na seção Estrutura da Especificação AWS Encryption SDK no GitHub.

Como faço para controlar as chaves de dados que foram usadas para criptografar meus dados?

O AWS Encryption SDK faz isso para você. Ao criptografar dados, o SDK criptografa a chave de dados e armazena a chave criptografada junto com os dados criptografados na mensagem criptografada que retorna. Ao descriptografar dados, o AWS Encryption SDK extrai a chave de dados criptografada da mensagem criptografada, descriptografa-a usa-a para descriptografar os dados.

Como o AWS Encryption SDK armazena chaves de dados criptografadas com seus dados criptografados?

As operações de criptografia no AWS Encryption SDK retornam uma mensagem criptografada, uma única estrutura de dados que contém os dados criptografados e suas chaves de dados criptografadas. O formato da mensagem consiste em pelo menos duas partes: um cabeçalho e um corpo. O cabeçalho da mensagem contém as chaves de dados criptografadas e informações sobre como o corpo da mensagem é formado. O corpo da mensagem contém os dados criptografados. Se o pacote de algoritmos incluir uma assinatura digital, o formato da mensagem incluirá um rodapé que contém a assinatura. Para obter mais informações, consulte AWS Encryption SDK referência de formato de mensagem.

Quanto de sobrecarga o formato da mensagem do AWS Encryption SDK adiciona a meus dados criptografados?

A quantidade de sobrecarga adicionada pelo AWS Encryption SDK depende de vários fatores, incluindo o seguinte:

  • O tamanho dos dados de texto descriptografado

  • Qual dos algoritmos compatíveis é usado

  • Se dados autenticados adicionais (AAD) são fornecidos e o tamanho desse AAD

  • O número e o tipo de chave de encapsulamento ou chave mestra

  • O tamanho da moldura (quando dados com moldura são usados)

Quando você usa o AWS Encryption SDK com a configuração padrão (um AWS KMS key como chave de encapsulamento (ou chave mestra), sem AAD, dados sem moldura e com um algoritmo de criptografia com assinatura), a sobrecarga é de aproximadamente 600 bytes. Em geral, você pode pressupor de forma razoável que o AWS Encryption SDK adiciona uma sobrecarga de 1 KB ou menos, sem incluir o AAD fornecido. Para obter mais informações, consulte AWS Encryption SDK referência de formato de mensagem.

Posso usar meu próprio provedor de chaves mestras?

Sim. Os detalhes da implementação variam dependendo das linguagens de programação compatíveis que você usa. No entanto, todas as linguagens compatíveis permitem que você defina gerenciadores de material de criptografia (CMMs), provedores de chaves mestras e chaves mestras personalizados.

Posso criptografar dados com mais de uma chave de encapsulamento?

Sim. Você pode criptografar a chave de dados com chaves de encapsulamento (ou chaves mestras) adicionais para adicionar redundância, no caso de uma estar em uma região diferente ou não estar disponível para a descriptografia.

Para criptografar dados com várias chaves de encapsulamento, crie um provedor de tokens de chave ou de chaves mestras com várias chaves de encapsulamento. Ao trabalhar com tokens de autenticação, você pode criar um único token de autenticação com várias chaves de empacotamento ou um multitoken de autenticação.

Quando você criptografa dados com várias chaves de encapsulamento, o AWS Encryption SDK usa uma chave de encapsulamento para gerar uma chave de dados em texto simples. A chave de dados é exclusiva e matematicamente não está relacionada à chave de encapsulamento. A operação retorna a chave de dados em texto simples e uma cópia da chave de dados criptografada pela chave de encapsulamento. Em seguida, o método de criptografia criptografa a chave de dados com as outras chaves de encapsulamento. A mensagem criptografada resultante inclui os dados criptografados e uma chave de dados criptografada para cada chave de encapsulamento.

A mensagem resultante pode ser descriptografada usando qualquer uma das chaves de encapsulamento usadas na operação de criptografia. O AWS Encryption SDK usa a chave de encapsulamento para descriptografar a chave de dados criptografada. Em seguida, usa a chave de dados de texto simples para descriptografar os dados.

Quais tipos de dados posso criptografar com o AWS Encryption SDK?

A maioria das implementações de linguagem de programação do AWS Encryption SDK pode criptografar bytes brutos (matrizes de bytes), streams de E/S (streams de bytes) e strings. O AWS Encryption SDK para .NET não é compatível com fluxos de E/S. Fornecemos um código de exemplo para cada uma das linguagens de programação compatíveis.

Como o AWS Encryption SDK criptografa e descriptografa streams de entrada/saída (E/S)?

O AWS Encryption SDK cria um stream de criptografia ou de descriptografia que empacota um stream de E/S subjacente. O fluxo de criptografia ou descriptografia executa uma operação de criptografia em uma chamada de leitura ou de gravação. Por exemplo, ele pode ler dados de texto não criptografado no fluxo subjacente e criptografá-los antes de retornar o resultado. Ou pode ler texto cifrado de um fluxo subjacente e descriptografá-lo antes de retornar o resultado. Fornecemos um código de exemplo para criptografar e descriptografar fluxos para cada uma das linguagens de programação compatíveis que oferecem suporte a streaming.

O AWS Encryption SDK para .NET não é compatível com fluxos de E/S.