Melhores práticas para a AWS Encryption SDK - 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á.

Melhores práticas para a AWS Encryption SDK

O AWS Encryption SDK foi projetado para facilitar a proteção de seus dados usando os padrões e as práticas recomendadas do setor. Embora muitas práticas recomendadas tenham sido selecionadas para você nos valores padrão, algumas delas são opcionais, mas recomendadas sempre que seja prático.

Use a versão mais recente

Ao começar a usar o AWS Encryption SDK, use a versão mais recente oferecida na linguagem de programação da sua preferência. Se estiver usando o AWS Encryption SDK, atualize para cada versão mais recente o mais rápido possível. Isso assegura que você esteja usando a configuração recomendada e aproveitando as novas propriedades de segurança para proteger seus dados. Para obter detalhes sobre as versões compatíveis, incluindo orientações para migração e implantação, consulte Suporte e manutenção e Versões do AWS Encryption SDK.

Se uma nova versão descontinuar elementos em seu código, substitua-os assim que possível. Os avisos de descontinuação e os comentários de código geralmente recomendam uma boa alternativa.

Para tornar as atualizações significativas mais fáceis e menos propensas a erros, ocasionalmente fornecemos uma versão temporária ou transitória. Use essas versões e a documentação que as acompanha para garantir que você possa atualizar a aplicação sem interromper seu fluxo de trabalho de produção.

Use os valores padrão

O AWS Encryption SDK projeta as práticas recomendadas em seus valores padrão. Sempre que possível, use-os. Para casos em que aplicar o padrão seja pouco prático, fornecemos alternativas, como pacotes de algoritmos sem assinatura. Também oferecemos oportunidades de personalização para usuários avançados, como tokens de autenticação, fornecedores de chaves mestras e gerenciadores de material criptográfico (CMMs) personalizados. Use essas alternativas avançadas com cuidado e faça com que um engenheiro de segurança verifique suas escolhas sempre que possível.

Usar um contexto de criptografia

Para melhorar a segurança de suas operações de criptografia, inclua um contexto de criptografia com um valor significativo em todas as solicitações para criptografar dados. O uso de um contexto de criptografia é opcional, mas é uma melhor prática de criptografia que recomendamos. Ele oferece dados autenticados adicionais (AAD) para criptografia autenticada no AWS Encryption SDK. Embora não seja secreto, o contexto de criptografia pode ajudar você a proteger a integridade e a autenticidade de seus dados criptografados.

No AWS Encryption SDK, você especifica um contexto de criptografia somente ao criptografar. Ao descriptografar, o AWS Encryption SDK usa o contexto de criptografia no cabeçalho da mensagem criptografada retornada pelo AWS Encryption SDK. Antes da aplicação retornar os dados de texto simples, verifique se o contexto de criptografia usado para criptografar a mensagem está incluído no contexto de criptografia usado ao descriptografar a mensagem. Para obter detalhes, consulte os exemplos na sua linguagem de programação.

Quando você usa a interface de linha de comando, o AWS Encryption SDK verifica o contexto de criptografia para você.

Proteja suas chaves de encapsulamento

O AWS Encryption SDK gera uma chave de dados exclusiva para criptografar cada mensagem de texto simples. Em seguida, ele criptografa a chave de dados com as chaves de encapsulamento fornecidas por você. Se suas chaves de encapsulamento forem perdidas ou excluídas, seus dados criptografados serão irrecuperáveis. Se suas chaves não estiverem protegidas, seus dados podem ficar vulneráveis.

Use chaves de encapsulamento protegidas por uma infraestrutura de chave segura, como o AWS Key Management Service (AWS KMS). Ao usar chaves AES ou RSA brutas, utilize uma fonte de randomização e armazenamento durável que atenda aos seus requisitos de segurança. A geração e o armazenamento de chaves de encapsulamento em um módulo de segurança de hardware (HSM) ou em um serviço que fornece HSMs, como o AWS CloudHSM, é uma prática recomendada.

Use os mecanismos de autorização da sua infraestrutura de chaves para limitar o acesso às chaves de encapsulamento somente aos usuários que exigem elas. Implemente princípios de práticas recomendadas, como privilégio mínimo. Ao usar as AWS KMS keys, use políticas de chave e políticas do IAM que implementem os princípios das práticas recomendadas.

Especifique suas chaves de encapsulamento

A especificação das chaves de encapsulamento de forma explícita ao descriptografar e criptografar é sempre um prática recomendada. Ao fazer isso, o AWS Encryption SDK usa somente as chaves ue especificadas por você. Essa prática garante que você use somente as chaves de criptografia que pretende utilizar. Para chaves de encapsulamento do AWS KMS, ela também melhora a performance ao impedir que você inadvertidamente use chaves em uma Conta da AWS ou região diferente ou tente descriptografar com chaves que não tem permissão para usar.

Ao criptografar, os tokens de autenticação e os provedores de chaves mestras fornecidos pelo AWS Encryption SDK exigem que você especifique as chaves de encapsulamento. Eles utilizam somente as chaves de encapsulamento que você especificar, nenhuma outra. Também é necessário especificar chaves de encapsulamento ao criptografar e descriptografar com tokens de autenticação do AES brutos, tokens de autenticação do RSA brutos e JCEmasterKeys.

Entretanto, ao descriptografar com tokens de autenticação e provedores de chaves mestras do AWS KMS, você não precisa especificar chaves de encapsulamento. O AWS Encryption SDK pode obter o identificador da chave a partir dos metadados da chave de dados criptografada. No entanto, recomendamos que você especifique as chaves de encapsulamento, já que esta é uma prática recomendada.

Para apoiar essa prática recomendada ao trabalhar com chaves de encapsulamento do AWS KMS, recomendamos o seguinte:

  • Use tokens de autenticação do AWS KMS que especifiquem as chaves de encapsulamento. Ao criptografar e descriptografar, esses tokens de autenticação usam somente as chaves de encapsulamento especificadas por você.

  • Ao usar chaves mestras e provedores de chaves mestras do AWS KMS, use os construtores de modo estrito introduzidos na versão 1.7.x do AWS Encryption SDK. Eles criam provedores que criptografam e descriptografam somente com as chaves de encapsulamento que você especificar. Os construtores de provedores de chave mestra que sempre descriptografam com qualquer chave de encapsulamento foram descontinuados na versão 1.7.x e excluídos na versão 2.0.x.

Quando a especificação de chaves de encapsulamento do AWS KMS para descriptografar for impraticável, você pode usar provedores de descoberta. O AWS Encryption SDK em C e JavaScript é compatível tokens de autenticação de descoberta do AWS KMS. Os provedores de chaves mestras com um modo de descoberta estão disponíveis para Java e Python nas versões 1.7.x e posteriores. Esses provedores de descoberta, usados somente para descriptografar com chaves de encapsulamento do AWS KMS, direcionam explicitamente o AWS Encryption SDK para usar qualquer chave de encapsulamento que tenha criptografado uma chave de dados.

Se você precisar usar um provedor de descoberta, use os atributos de filtro de descoberta para limitar as chaves de encapsulamento que eles usam. Por exemplo, o token de autenticação de descoberta regional do AWS KMS usa somente as chaves de encapsulamento em uma determinada Região da AWS. Você também pode configurar tokens de autenticação do AWS KMS e provedores de chaves mestras do AWS KMS para usar somente as chaves de encapsulamento em Contas da AWS específicas. Além disso, como sempre, use políticas de chave e políticas do IAM para controlar o acesso às suas chaves de encapsulamento do AWS KMS.

Use assinaturas digitais

É uma prática recomendada usar um pacote de algoritmos com assinatura. Assinaturas digitais confirmam que o remetente da mensagem foi autorizado a enviá-la e protegem a integridade da mensagem. Todas as versões do AWS Encryption SDK usam pacotes de algoritmos com assinatura por padrão.

Se seus requisitos de segurança não incluírem assinaturas digitais, você pode selecionar um pacote de algoritmos sem assinaturas digitais. No entanto, recomendamos o uso de assinaturas digitais, especialmente quando um grupo de usuários criptografa dados e um grupo diferente de usuários descriptografa esses dados.

Use o confirmação de chave

É uma prática recomendada usar o atributo de segurança de confirmação de chave. Ao verificar a identidade da chave de dados exclusiva que criptografou seus dados, a confirmação de chave impede que você descriptografe qualquer texto cifrado que possa resultar em mais de uma mensagem de texto simples.

O AWS Encryption SDK fornece suporte completo para criptografia e descriptografia com confirmação de chave a partir da versão 2.0.x.. Por padrão, todas as suas mensagens são criptografadas e decriptografadas com confirmação de chave. A versão 1.7.x do AWS Encryption SDK pode descriptografar textos cifrados com confirmação de chave. Ela foi projetada para ajudar os usuários de versões anteriores a implantar a versão 2.0.x com sucesso.

O suporte para confirmação de chaves inclui novos pacotes de algoritmos e um novo formato de mensagem que produz um texto cifrado apenas 30 bytes maior do que um texto cifrado sem confirmação de chave. O design minimiza seu impacto na performance para que a maioria dos usuários possa aproveitar os benefícios da confirmação de chave. Se sua aplicação for muito sensível ao tamanho e à performance, você poderá decidir usar a configuração da política de compromisso para desabilitar o compromisso da chave ou permitir que o AWS Encryption SDK descriptografe mensagens sem compromisso, mas somente faça isso se realmente for necessário.

Limite o número de chaves de dados criptografadas

É uma prática recomendada limitar o número de chaves de dados criptografadas nas mensagens que você descriptografa, especialmente mensagens de fontes não confiáveis. Descriptografar uma mensagem com várias chaves de dados criptografadas que você não pode descriptografar pode gerar atrasos prolongados, aumentar despesas, limitar a capacidade da aplicação e de outros que compartilham sua conta e potencialmente esgotar sua infraestrutura de chaves. Uma mensagem criptografada pode conter até 65.535 (2^16 - 1) chaves de dados criptografadas. Para obter mais detalhes, consulte Limitar as chaves de dados criptografadas.

Para obter mais informações sobre os atributos de segurança do AWS Encryption SDK subjacentes a essas práticas recomendadas, consulte Criptografia do lado do cliente: aprimorada: IDs de chave explícitos e confirmação de chave no Blog de segurança da AWS.