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á.
Detalhes do armazenamento em cache de chaves de dados
A maioria dos aplicativos pode usar a implementação padrão do armazenamento em cache de chave de dados sem escrever código personalizado. Esta seção descreve a implementação padrão e alguns detalhes sobre as opções.
Tópicos
Como o armazenamento em cache de chaves de dados funciona
Quando você usa o armazenamento em cache de chave de dados em uma solicitação para criptografar ou descriptografar dados, o AWS Encryption SDK primeiro pesquisa uma chave de dados no cache que corresponde à solicitação. Se localizar uma correspondência válida, ele usa a chave de dados armazenada em cache para criptografar os dados. Caso contrário, ele gerará uma nova chave de dados, da mesma forma como o faria sem o cache.
O armazenamento em cache da chave de dados não é usado para dados de tamanho desconhecido, como streaming de dados. Isso permite que o CMM de armazenamento em cache imponha o limite máximo de bytes corretamente. Para evitar esse comportamento, adicione o tamanho da mensagem à solicitação de criptografia.
Além de um cache, o armazenamento em cache de chaves de dados usa um gerenciador de armazenamento em cache de materiais criptográficos (CMM de armazenamento em cache). O CMM de armazenamento em cache é um gerenciador de materiais criptográficos (CMM) especializado que interage com um cache e um CMM subjacente. (Quando você especifica um provedor de chaves mestra ou um token de autenticação, o AWS Encryption SDK cria um CMM padrão para você.) O CMM de armazenamento em cache armazena em cache as chaves de dados que seu CMM subjacente retorna. Também impõe limites de segurança de cache definidos por você.
Para evitar que a chave de dados errada seja selecionada do cache, todo armazenamento em cache compatível CMMs exige que as seguintes propriedades dos materiais criptográficos em cache correspondam à solicitação de materiais.
-
Contexto de criptografia (mesmo quando vazio)
-
Nome da partição (uma string que identifica o CMM de armazenamento em cache)
-
(Somente descriptografia) chaves de dados criptografadas
nota
O AWS Encryption SDK cache das chaves de dados somente quando o conjunto de algoritmos usa uma função de derivação de chave
Os seguintes fluxos de trabalho mostram como uma solicitação para criptografar dados é processada com e sem armazenamento em cache da chave de dados. Eles mostram como o armazenamento em cache de componentes que você cria, incluindo o cache e o CMM de armazenamento em cache, são usados no processo.
Criptografar dados sem armazenamento em cache
Para obter materiais de criptografia sem armazenamento em cache:
-
Um aplicativo solicita que AWS Encryption SDK os dados sejam criptografados.
A solicitação especifica um provedor de chaves mestres ou um token de autenticação. O AWS Encryption SDK cria um CMM padrão que interage com a chave mestra ou com o token de autenticação.
-
Ele AWS Encryption SDK solicita ao CMM materiais de criptografia (obtenha materiais criptográficos).
-
O CMM solicita ao seu chaveiro (C e JavaScript) ou provedor de chave mestra (Java e Python) materiais criptográficos. Isso pode envolver uma chamada para um serviço criptográfico, como AWS Key Management Service (AWS KMS). O CMM retorna os materiais de criptografia para o AWS Encryption SDK.
-
O AWS Encryption SDK usa a chave de dados em texto simples para criptografar os dados. Ele armazena os dados criptografados e as chaves de dados criptografadas em uma mensagem criptografada, que ele retorna ao usuário.

Criptografar dados com armazenamento em cache
Para obter materiais de criptografia com armazenamento de chaves de dados em cache:
-
Um aplicativo solicita que AWS Encryption SDK os dados sejam criptografados.
A solicitação especifica um gerenciador de armazenamento em cache materiais criptográficos (CMM de armazenamento em cache) associado a um gerenciador de materiais criptográficos (CMM) subjacente. Quando você especifica um provedor de chaves mestras ou um token de autenticação, o AWS Encryption SDK cria um CMM padrão para você.
-
O SDK solicita ao CMM de armazenamento em cache especificado materiais de criptografia.
-
O CMM de armazenamento em cache solicita materiais de criptografia do cache.
-
Se encontrar uma correspondência, o cache atualizará a idade e usará os valores da entrada do cache correspondente, retornando os materiais de criptografia armazenados em cache ao CMM de armazenamento em cache.
Se a entrada do cache estiver em conformidade com os limites de segurança, o CMM de armazenamento em cache a retorna ao SDK. Caso contrário, ele instruirá o cache a remover a entrada e prosseguir como se não houvesse correspondência.
-
Se o cache não puder encontrar uma correspondência válida, o CMM de armazenamento em cache solicitará que CMM subjacente gere uma nova chave de dados.
O CMM subjacente obtém os materiais criptográficos de seu chaveiro (C e JavaScript) ou provedor de chave mestra (Java e Python). Isso pode envolver uma chamada a um serviço criptográfico, como o AWS Key Management Service. O CMM subjacente retorna o texto simples e cópias criptografadas da chave de dados ao CMM de armazenamento em cache.
O CMM de armazenamento em cache salva os novos materiais de criptografia no cache.
-
-
O CMM de armazenamento em cache retorna os materiais de criptografia para o AWS Encryption SDK.
-
O AWS Encryption SDK usa a chave de dados em texto simples para criptografar os dados. Ele armazena os dados criptografados e as chaves de dados criptografadas em uma mensagem criptografada, que ele retorna ao usuário.

Criar um cache de material de criptografia
AWS Encryption SDK Define os requisitos para um cache de materiais criptográficos usado no cache de chaves de dados. Também fornece um cache local, que é um cache least recently used (LRU - menos usado recentemente)LocalCryptoMaterialsCache
construtor em Java e Python, getLocalCryptographic MaterialsCache a função JavaScript em ou aws_cryptosdk_materials_cache_local_new
o construtor em C.
O cache local contém lógica para gerenciamento básico do cache, incluindo adição, remoção e correspondência de entradas armazenadas em cache e manutenção do cache. Você não precisa escrever nenhuma lógica de gerenciamento de cache personalizado. O cache local pode ser usado como está, ser personalizado ou substituído por cache compatível.
Quando cria um cache local, você define sua capacidade, isto é, o número máximo de entradas que o cache pode conter. Essa configuração ajuda a criar um cache eficiente com reutilização limitada de chaves de dados.
O AWS Encryption SDK for Java e o AWS Encryption SDK for Python também fornecem um cache de materiais criptográficos nulo ()NullCryptoMaterialsCache. O NullCryptoMaterialsCache retorna um erro para todas GET
as operações e não responde às PUT
operações. Você pode usar o NullCryptoMaterialsCache em testes ou para desativar temporariamente o armazenamento em cache em um aplicativo que inclui código de armazenamento em cache.
No AWS Encryption SDK, cada cache de materiais criptográficos é associado a um gerenciador de materiais criptográficos em cache (CMM). O CMM de armazenamento em cache obtém chaves de dados do cache, coloca chaves de dados no cache e impõe os limites de segurança que você define. Ao criar umCMM de armazenamento em cache, você especifica o cache que ele usa e o CMM subjacente ou o provedor de chaves mestras que gera as chaves de dados que ele armazena em cache.
Criar um gerenciador de material de criptografia de armazenamento em cache
Para habilitar o armazenamento em cache da chave de dados, você cria um cache e um gerenciador de armazenamento em cache (CMM de armazenamento em cache). Em seguida, em suas solicitações para criptografar ou descriptografar dados, você especifica um CMM de armazenamento em cache em vez de um gerenciador de materiais criptográficos (CMM) pardão, um provedor de chaves mestras ou um token de autenticação.
Existem dois tipos de CMMs. Os dois obtêm chaves de dados (e o material criptográfico relacionado), mas de diferentes maneiras, da seguinte forma:
-
Uma CMM está associada a um chaveiro (C ou JavaScript) ou a um provedor de chave mestra (Java e Python). Quando o SDK solicita ao CMM materiais de criptografia ou descriptografia, o CMM obtém os materiais de seu token de autenticação ou do provedor de chaves mestras. Em Java e Python, o CMM usa as chaves mestras para gerar, criptografar ou descriptografar as chaves de dados. Em C e JavaScript, o chaveiro gera, criptografa e retorna os materiais criptográficos.
-
Um CMM de armazenamento em cache está associado a um cache, como um cache local e a um CMM subjacente. Quando o SDK solicita materiais criptográficos ao CMM de armazenamento em cache, o CMM de armazenamento em cache tenta obtê-los do cache. Se não conseguir encontrar uma correspondência, o CMM de armazenamento em cache solicitará os materiais ao seu CMM subjacente. Depois, ele armazenará os novos materiais criptográficos antes de retorná-los ao chamador.
O CMM de armazenamento em cache também impõe limites de segurança que você define para cada entrada do cache. Como os limites de segurança são definidos e impostos pelo CMM de armazenamento em cache, você pode usar qualquer cache compatível, mesmo que o cache não esteja projetado para material confidencial.
O que é uma entrada de chave de dados em cache?
O cache de chaves de dados armazena chaves de dados e o material criptográfico relacionado em um cache. Cada entrada inclui os elementos listados a seguir. Você pode considerar essas informações úteis ao decidir se deseja usar o atributo de armazenamento em cache de chave de dados e ao configurar os limites de segurança em um gerenciador de armazenamento em cache de materiais criptográficos (CMM de armazenamento em cache).
Entradas armazenadas em cache para solicitações de criptografia
As entradas adicionadas a um cache de chave de dados como resultado de uma operação de criptografia incluem os seguintes elementos:
-
Chave de dados de texto não criptografado
-
Chaves de dados criptografadas (uma ou mais)
-
Chave de assinatura de mensagem (se uma for usada)
-
Metadados, incluindo contadores de uso para impor limites de segurança
Entradas armazenadas em cache para solicitações de descriptografia
As entradas adicionadas a um cache de chave de dados como resultado de uma operação de descriptografia incluem os seguintes elementos:
-
Chave de dados de texto não criptografado
-
Chave de verificação de assinatura (se uma for usada)
-
Metadados, incluindo contadores de uso para impor limites de segurança
Contexto de criptografia: como selecionar entradas do cache
Você pode especificar um contexto de criptografia em qualquer solicitação para criptografar dados. No entanto, o contexto de criptografia desempenha uma função especial no armazenamento em cache de chaves de dados. Ele permite criar subgrupos de chaves de dados em seu cache, mesmo quando as chaves de dados forem originárias do mesmo CMM de armazenamento em cache.
Um contexto de criptografia é um conjunto de pares de chave-valor que contêm dados arbitrários não secretos. Durante a criptografia, o contexto de criptografia é associado de maneira criptográfica aos dados criptografados de forma que o mesmo contexto de criptografia é necessário para descriptografar os dados. No AWS Encryption SDK, o contexto de criptografia é armazenado na mensagem criptografada com os dados criptografados e as chaves de dados.
Ao usar um cache de chave de dados, você também pode usar o contexto de criptografia para selecionar chaves de dados armazenadas em cache específicas para suas operações de criptografia. O contexto de criptografia é salvo na entrada do cache com a chave de dados (ele faz parte do ID de entrada do cache). As chaves de dados armazenadas em cache só são reutilizadas quando os contextos de criptografia correspondem. Se desejar reutilizar determinadas chaves de dados para uma solicitação de criptografia, especifique o mesmo contexto de criptografia. Para evitar essas chaves de dados, especifique outro contexto de criptografia.
O contexto de criptografia é sempre opcional, mas é recomendado. Se você não especificar um contexto de criptografia na solicitação, um contexto de criptografia vazio será incluído no identificador de entrada do cache e correspondido a cada solicitação.
Meu aplicativo está usando chaves de dados armazenadas em cache?
O armazenamento em cache de chaves de dados é uma estratégia de otimização muito eficaz para determinados aplicativos e cargas de trabalho. No entanto, como isso implica algum risco, é importante determinar o quão eficaz é provável que seja para a sua situação e decidir se os benefícios superam os riscos.
Como o armazenamento em cache de chaves de dados reutiliza chaves de dados, o efeito mais óbvio é a redução do número de chamadas para gerar novas chaves de dados. Quando o armazenamento em cache da chave de dados é implementado, ele AWS Encryption SDK chama a AWS KMS GenerateDataKey
operação somente para criar a chave de dados inicial e quando o cache falha. Mas, o armazenamento em cache melhora o desempenho de forma perceptível somente em aplicativos que geram várias chaves de dados com as mesmas características, incluindo o mesmo contexto de criptografia e pacote de algoritmos.
Para determinar se sua implementação do AWS Encryption SDK está realmente usando chaves de dados do cache, experimente as técnicas a seguir.
-
Nos logs da infraestrutura de sua chave mestra, verifique a frequência de chamadas para criar novas chaves de dados. Quando o armazenamento em cache de chaves de dados está efetivo, o número de chamadas para criar novas chaves deve cair de forma perceptível. Por exemplo, se você estiver usando um provedor de chave AWS KMS mestra ou um chaveiro, pesquise GenerateDataKeychamadas nos CloudTrail registros.
-
Compare as mensagens criptografadas que o AWS Encryption SDK retorna em resposta a diferentes solicitações de criptografia. Por exemplo, se você estiver usando o AWS Encryption SDK for Java, compare o ParsedCiphertext
objeto de diferentes chamadas de criptografia. No AWS Encryption SDK para JavaScript, compare o conteúdo da encryptedDataKeys
propriedade do MessageHeader. Quando as chaves de dados são reutilizadas, as chaves de dados criptografadas na mensagem criptografada são idênticas.