Conceitos no 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á.

Conceitos no AWS Encryption SDK

Esta seção apresenta os conceitos usados no AWS Encryption SDK e fornece um glossário e uma referência. Ele foi projetado para ajudar você a entender como o AWS Encryption SDK funciona e os termos que usamos para descrevê-lo.

Precisa de ajuda?

Criptografia de envelope

A segurança dos dados criptografados depende em parte da proteção da chave de dados que pode descriptografá-los. Uma prática recomendada aceita para proteger a chave de dados é criptografá-la. Para fazer isso, você precisa de outra chave de criptografia, conhecida como chave de criptografia de chave ou chave de encapsulamento. Essa prática de uso de uma chave de encapsulamento para criptografar chaves de dados é conhecida como criptografia envelopada.

Proteção de chaves de dados

O AWS Encryption SDK criptografa cada mensagem com uma chave de dados exclusiva. Em seguida, ele criptografa cada chave de dados sob a chave de encapsulamento especificada. Ele armazena as chaves de dados criptografadas junto com os dados criptografados na mensagem criptografada que as operações de criptografia retornam.

Para especificar sua chave de encapsulamento, use um token de autenticação ou umprovedor de chave mestra.

Criptografia envelopada com o AWS Encryption SDK
Criptografar os mesmos dados com várias chaves de encapsulamento

É possível criptografar a chave de dados sob várias chaves de encapsulamento. Talvez você queira fornecer chaves de encapsulamento distintas para usuários diferentes ou chaves de encapsulamento de tipos variados ou em locais diferentes. Cada uma das chaves de encapsulamento criptografa a mesma chave de dados. O AWS Encryption SDK armazena todas as chaves de dados criptografadas junto com os dados criptografados na mensagem criptografada.

Para descriptografar os dados, você precisa fornecer pelo menos uma chave de encapsulamento que possa descriptografar uma das chaves de dados criptografadas.

Cada chave de encapsulamento criptografa a mesma chave de dados, o que resulta em uma chave de dados criptografada para cada chave de encapsulamento
Combinação de pontos fortes de vários algoritmos

Para criptografar seus dados, por padrão, o AWS Encryption SDK usa um conjunto de algoritmos com criptografia simétrica AES-GCM, uma função de derivação de chave (HKDF) baseada em HMAC e assinatura ECDSA. Para criptografar a chave de dados, você pode especificar um algoritmo de criptografia simétrico ou assimétrico apropriado à sua chave de encapsulamento.

Em geral, os algoritmos de criptografia de chaves simétricas são mais rápidos e produzem textos cifrados menores que a criptografia de chave pública ou assimétrica. No entanto, os algoritmos de chave pública fornecem separação inerente de funções e gerenciamento de chaves mais fácil. Para combinar as forças de cada um, você pode criptografar dados brutos com criptografia de chave simétrica e, em seguida, criptografar a chave de dados com criptografia de chave pública.

Chave de dados

A chave de ados é uma chave de criptografia que o AWS Encryption SDK usa para criptografar os dados. Cada chave de dados é uma matriz de bytes que cumpre os requisitos para chaves criptográficas. A menos que você esteja usando armazenamento em cache de chaves de dados, o AWS Encryption SDK usará uma chave de dados exclusiva para criptografar cada mensagem.

Você não precisa especificar, gerar, implementar, estender, proteger ou usar chaves de dados. O AWS Encryption SDK faz esse trabalho para você quando você chama as operações de criptografia e descriptografia.

Para proteger suas chaves de dados, o AWS Encryption SDK as criptografa sob uma ou mais chaves de criptografia de chaves, conhecidas como chaves de encapsulamento ou chaves mestras. Depois que o AWS Encryption SDK usa suas chaves dados em texto simples para criptografar dados, ele as remove da memória assim que possível. Depois, ele armazena as chaves de dados criptografadas junto com os dados criptografados na mensagem criptografada que as operações de criptografia retornam. Para obter detalhes, consulte Como o AWS Encryption SDK funciona.

dica

No AWS Encryption SDK, diferenciamos chaves de dados de chaves de criptografia de dados. Vários dos pacotes de algoritmos, incluindo o pacote padrão, usam uma função de derivação de chaves que impede que a chave de dados atinja seus limites de criptografia. A função de derivação de chaves usa a chave de dados como entrada e retorna uma chave de criptografia de dados que é realmente usada para criptografar os dados. Por esse motivo, sempre dizemos que os dados são criptografados "sob" uma chave de dados em vez de "pela" chave de dados.

Cada chave de dados criptografada inclui metadados, incluindo o identificador da chave de encapsulamento que a criptografou. Esses metadados facilitam a identificação de chaves de encapsulamento válidas durante a descriptografia pelo AWS Encryption SDK.

Chave de encapsulamento

Uma chave de encapsulamento é uma chave de criptografia que o AWS Encryption SDK usa para criptografar a chave de dados que criptografa seus registros. Cada chave de dados em texto simples pode ser criptografada sob uma ou mais chaves mestras. Você determina quais chaves de encapsulamento serão usadas para proteger seus dados ao configurar um token de autenticação ou um provedor de chave mestra.

nota

A chave de encapsulamento refere-se às chaves em um token de autenticação ou provedor de chave mestra. A chave mestra geralmente está associada à classe MasterKey que você instancia ao usar um provedor de chave mestra.

O AWS Encryption SDK é compatível com várias ou chaves de encapsulamento usadas comumente, como a AWS KMS keys simétricas do AWS Key Management Service (AWS KMS) (incluindo chaves KMS multirregionais), chaves brutas do AES-GCM (Advanced Encryption Standard/Galois Counter Mode) e chaves RSA brutas. Você também pode estender ou implementar suas próprias chaves de encapsulamento.

Quando você usa a criptografia envelopada, precisa proteger suas chaves de encapsulamento contra acesso não autorizado. É possível fazer isso de uma das seguintes maneiras:

Se você não tiver um sistema de gerenciamento de chaves, recomendamos o AWS KMS. O AWS Encryption SDK se integra com o AWS KMS para ajudar a proteger e usar suas chaves de encapsulamento. No entanto, o AWS Encryption SDK não requer o AWS nem qualquer outro serviço da AWS.

Tokens de autenticação e provedores de chaves mestras

Para especificar as chaves de agrupamento que você usa para criptografia e descriptografia, use um chaveiro (C, C# /.NET e JavaScript) ou um provedor de chave mestra (Java, Python, CLI). Você pode usar os tokens de autenticação e os provedores de chaves mestras que o AWS Encryption SDK fornece ou criar suas próprias implementações. O AWS Encryption SDK fornece tokens de autenticação e provedores de chaves mestras compatíveis entre si, sujeitos a restrições de linguagem. Para obter detalhes, consulte Compatibilidade dos tokens de autenticação.

Um token de autenticação gera, criptografa e descriptografa chaves de dados. Ao definir um token de autenticação, você pode especificar as chaves de encapsulamento que criptografam suas chaves de dados. A maioria dos tokens de autenticação especificam pelo menos uma chave de encapsulamento ou um serviço que fornece e protege chaves de encapsulamento. Você também pode definir um token de autenticação sem chaves de encapsulamento ou um token de autenticação mais complexo com opções de configuração adicionais. Para obter ajuda para escolher e usar os tokens de autenticação definidos pelo AWS Encryption SDK, consulteUsar tokens de autenticação. Os chaveiros são compatíveis com C, C# /.NET e versão 3. JavaScript x doAWS Encryption SDK for Java.

Um provedor de chave mestra é uma alternativa a um token de autenticação. O provedor de chave mestra retorna as chaves de encapsulamento (ou chaves mestras) que você especificar. Cada chave mestra é associada a um provedor de chaves mestras, mas um provedor de chaves mestras normalmente fornece várias chaves mestras. Os provedores de chaves mestras são compatíveis com Java, Python e com a CLI de criptografia da AWS.

Você deve especificar um token de autenticação (ou provedor de chave mestra) para criptografia. Você pode especificar o mesmo token de autenticação (ou provedor de chave mestra), ou um diferente, para descriptografia. Ao criptografar, o AWS Encryption SDK usa todas as chaves de encapsulamento que você especifica para criptografar a chave de dados. Ao descriptografar, o AWS Encryption SDK usa somente as chaves de encapsulamento que você especificar para descriptografar uma chave de dados criptografada. Especificar chaves de encapsulamento para decodificação é opcional, mas é uma prática recomendada. do AWS Encryption SDK.

Para obter detalhes sobre como especificar chaves de encapsulamento, consulte. Seleção de chaves de encapsulamento

Contexto de criptografia

Para melhorar a segurança de suas operações de criptografia, inclua um contexto de criptografia 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.

Um contexto de criptografia é um conjunto de pares de chave-valor que contêm dados autenticados adicionais arbitrários e não secretos. O contexto de criptografia pode conter todos os dados que você escolher, mas geralmente consiste em dados que são úteis para registro em log e rastreamento, como dados sobre o tipo de arquivo, a finalidade ou a propriedade. Quando você criptografa dados, o contexto de criptografia é associado de maneira criptográfica aos dados criptografados de forma que o mesmo contexto de criptografia seja necessário para descriptografar os dados. O AWS Encryption SDK inclui o contexto de criptografia em texto simples no cabeçalho da mensagem criptografada retornada por ele.

O contexto de criptografia usado pelo AWS Encryption SDK consiste no contexto de criptografia especificado e um par de chaves públicas adicionado pelo gerenciador de materiais criptográficos (CMM). Especificamente, sempre que você usar um algoritmo de criptografia com assinatura, o CMM adicionará um par de nome/valor ao contexto de criptografia consistindo em um nome reservado, aws-crypto-public-key, e um valor representando a chave de verificação pública. O nome aws-crypto-public-key no contexto de criptografia é reservado pelo AWS Encryption SDK e não pode ser usado como um nome em nenhum outro par no contexto de criptografia. Para obter detalhes, consulte AAD na Referência do formato de mensagens.

O exemplo de contexto de criptografia a seguir consiste nos dois pares de contexto de criptografia especificados na solicitação e no par de chaves públicas adicionado pelo CMM.

"Purpose"="Test", "Department"="IT", aws-crypto-public-key=<public key>

Para descriptografar os dados, você passa a mensagem criptografada. Como o AWS Encryption SDK pode extrair o contexto de criptografia do cabeçalho da mensagem criptografada, não é necessário fornecer o contexto separadamente. No entanto, o contexto de criptografia pode ajudar a confirmar se você está descriptografando a mensagem criptografada correta.

  • Na interface de linha de comando do AWS Encryption SDK (CLI), se você fornecer um contexto de criptografia em um comando de descriptografia, a CLI verificará se os valores estão presentes no contexto da mensagem criptografada antes de retornar os dados em texto simples.

  • Em outras implementações de linguagens de programação, a resposta de descriptografia inclui o contexto de criptografia e os dados em texto simples. A função de descriptografia em seu aplicativo sempre deve verificar se o contexto de criptografia na resposta de descriptografia inclui o contexto de criptografia na solicitação de criptografia (ou um subconjunto) antes de retornar os dados em texto simples.

nota

Com a versão 4. x do AWS Encryption SDK para .NET e versão 3. x do AWS Encryption SDK for Java, você pode exigir um contexto de criptografia em todas as solicitações de criptografia com o contexto de criptografia necessário CMM.

Ao escolher um contexto de criptografia, lembre-se de que ele não é um segredo. O contexto de criptografia é exibido em texto não criptografado no cabeçalho da mensagem criptografada retornada pelo AWS Encryption SDK. Se você estiver usando o AWS Key Management Service, o contexto de criptografia também poderá ser exibido em texto não criptografado em registros e logs de auditoria, como o AWS CloudTrail.

Para obter exemplos de envio e verificação de um contexto de criptografia no seu código, consulte os exemplos da linguagem de programação de sua preferência.

Mensagem criptografada

Quando você criptografa dados com o AWS Encryption SDK, ele retorna uma mensagem criptografada.

Uma mensagem criptografada é uma estrutura de dados formatados portátil que inclui os dados criptografados junto com as cópias criptografadas das chaves de dados, o ID do algoritmo e, opcionalmente, um contexto de criptografia e uma assinatura digital. As operações de criptografia no AWS Encryption SDK retornam uma mensagem criptografada, e as operações de descriptografia usam uma mensagem criptografada como entrada.

A combinação de dados criptografados e de suas chaves de dados criptografadas simplifica a operação e elimina a necessidade de armazenar e gerenciar chaves de dados criptografadas independentemente dos dados que elas criptografam.

Para obter informações técnicas sobre a mensagem criptografada, consulte Formato da mensagem criptografada.

Pacote de algoritmos

O AWS Encryption SDK usa um pacote de algoritmos para criptografar e assinar os dados na mensagem criptografada que as operações de criptografia e descriptografia retornam. O AWS Encryption SDK é compatível com vários pacotes de algoritmos. Todos os conjuntos compatíveis usam o Advanced Encryption Standard (AES) como o algoritmo principal e o combinam com outros algoritmos e valores.

O AWS Encryption SDK estabelece um pacote de algoritmos recomendado como o padrão para todas as operações de criptografia. O padrão pode ser alterado conforme os padrões e as práticas recomendadas são aprimoradas. Você pode especificar um pacote de algoritmos alternativo em solicitações de criptografia de dados ou ao criar um gerenciador de materiais criptográficos (CMM), mas, a menos que um alternativo seja necessário para sua situação, é melhor usar o padrão. O padrão atual é AES-GCM com uma função de derivação de extract-and-expand chave (HKDF) baseada em HMAC, compromisso de chave, uma assinatura de algoritmo de assinatura digital de curva elíptica (ECDSA) e uma chave de criptografia de 256 bits.

Se sua aplicação exigir alta performance e os usuários que criptografam dados e aqueles que os descriptografam forem igualmente confiáveis, considere especificar um pacote de algoritmos sem uma assinatura digital. No entanto, recomendamos fortemente um pacote de algoritmos que inclua confirmação de chave e uma função de derivação de chave. Os pacotes de algoritmos que não têm esses atributos são compatíveis apenas para compatibilidade com versões anteriores.

Gerenciador de material de criptografia

O gerenciador de material de criptografia (CMM) monta o material criptográfico usado para criptografar e descriptografar dados. O material criptográfico inclui texto não criptografado e chaves de dados criptografadas e uma chave de assinatura de mensagem opcional. Você nunca interage diretamente com o CMM. Os métodos de criptografia e descriptografia o processam para você.

Você pode usar o CMM padrão ou o CMM de armazenamento em cache fornecido pelo AWS Encryption SDK ou escrever um CMM personalizado. E é possível especificar explicitamente um CMM, mas isso não é obrigatório. Quando você especifica um token de autenticação ou um provedor de chaves mestras, o AWS Encryption SDK cria um CMM padrão para você. O CMM padrão obtém o material de criptografia ou de descriptografia do token de autenticação ou do provedor de chave mestra que você especificar. Isso pode envolver uma chamada a um serviço criptográfico, como o AWS Key Management Service (AWS KMS).

Como o CMM atua como uma ligação entre o AWS Encryption SDK e um token de autenticação (ou um provedor de chaves mestras), ele é um ponto ideal para personalização e extensão, como suporte para a aplicação de políticas e o armazenamento em cache. O AWS Encryption SDK fornece um CMM de armazenamento em cache para oferecer suporte ao armazenamento em cache de chaves de dados.

Criptografia simétrica e assimétrica

A criptografia simétrica usa a mesma chave para criptografar e descriptografar dados.

A criptografia assimétrica usa um par de chaves de dados matematicamente relacionado. Uma chave no par criptografa os dados; somente a outra chave no par pode descriptografá-los. Para obter detalhes, consulte Algoritmos criptográficos no Guia de ferramentas e serviços criptográficos da AWS.

O AWS Encryption SDK usa a criptografia envelopada. Ele criptografa os dados com uma chave de dados simétrica. Ele criptografa a chave de dados simétrica com uma ou mais chaves de encapsulamento simétricas ou assimétricas. Ele retorna uma mensagem criptografada que inclui os dados criptografados e pelo menos uma cópia criptografada da chave de dados.

Criptografar dados (criptografia simétrica)

Para criptografar os dados, o AWS Encryption SDK usa uma chave de dados simétrica e um pacote de algoritmos que inclui um algoritmo de criptografia simétrica. Para descriptografar os dados, o AWS Encryption SDK usa a mesma chave de dados e o mesmo pacote de algoritmos.

Criptografar chave de dados (criptografia simétrica ou assimétrica)

O token de autenticação ou o provedor de chave mestra que você fornece para uma operação de criptografia e descriptografia determina como a chave de dados simétrica será criptografada e descriptografada. Você pode escolher um token de autenticação ou provedor de chave mestra que use criptografia simétrica, como um token de autenticação do AWS KMS, ou um que use criptografia assimétrica, como um token de autenticação bruto do RSA ou JceMasterKey.

Confirmação de chave

O AWS Encryption SDK oferece suporte à confirmação de chaves (às vezes conhecido como robustez), uma propriedade de segurança que garante que cada texto cifrado possa ser descriptografado somente em um único texto simples. Para fazer isso, a confirmação de chave garante que somente a chave de dados que criptografou sua mensagem seja usada para descriptografá-la. Criptografar e descriptografar com o confirmação de chave é uma prática recomendada do AWS Encryption SDK.

A maioria das cifras simétricas modernas (incluindo AES) criptografa um texto simples com uma única chave secreta, como a chave de dados exclusiva que o AWS Encryption SDK usa para criptografar cada mensagem de texto simples. Descriptografar esses dados com a mesma chave de dados retorna um texto sem formatação idêntico ao original. A decodificação com uma chave diferente geralmente falhará. No entanto, é possível decifrar um texto cifrado com duas chaves diferentes. Em casos raros, é possível encontrar uma chave que possa descriptografar alguns bytes do o texto cifrado em um texto simples diferente, mas ainda inteligível.

O AWS Encryption SDK sempre criptografa cada mensagem de texto simples em uma chave de dados exclusiva. Ele pode criptografar essa chave de dados em várias chaves de encapsulamento, mas as chaves de encapsulamento (ou chaves mestras) sempre criptografam a mesma chave de dados. No entanto, uma mensagem criptografada sofisticada e criada manualmente pode, na verdade, conter chaves de dados diferentes, cada uma criptografada por uma chave de encapsulamento diferente. Por exemplo, se um usuário descriptografar a mensagem criptografada, ela retornará 0x0 (falso), enquanto outro usuário descriptografando a mesma mensagem criptografada obterá 0x1 (verdadeiro).

Para evitar esse cenário, o AWS Encryption SDK é compatível com confirmação de chave ao criptografar e descriptografar. Quando o AWS Encryption SDK criptografa uma mensagem com confirmação de chave, ele vincula criptograficamente a chave de dados exclusiva que produziu o texto cifrado ao string de compromoisso de chave, um identificador de chave de dados não secreto. Em seguida, ele armazena o string de compromisso chave nos metadados da mensagem criptografada. Ao descriptografar uma mensagem com confirmação de chave, o AWS Encryption SDKverifica se a chave de dados é a única chave para essa mensagem criptografada. Se a verificação da chave de dados falhar, a operação de descriptografia falhará.

O suporte para confirmação de chaves foi apresentado na versão 1.7. x, que pode descriptografar mensagens com confirmação de chave, mas não pode criptografar com confirmação de chave. Você pode usar essa versão para implantar totalmente a capacidade de descriptografar texto cifrado com confirmação de chave. A versão 2.0.x inclui suporte total para os compromissos de chave. Por padrão, ela criptografa e descriptografa somente com confirmação de chave. Essa é uma configuração ideal para aplicações que não precisam descriptografar texto cifrado criptografado por versões anteriores do AWS Encryption SDK.

Embora criptografar e descriptografar com confirmação de chave seja uma prática recomendada, deixamos que você decida quando ela será usada e ajustamos o ritmo em que você a adota. A partir da versão 1.7.x, o AWS Encryption SDK suporta uma política de compromisso que define o pacote de algoritmos padrão e limita os pacotes de algoritmos que podem ser usados. Essa política determina se seus dados são criptografados e descriptografados com confirmação de chave.

A confirmação de chave resulta em uma mensagem criptografada um pouco maior (+ 30 bytes) e que leva mais tempo para ser processada. Se sua aplicação for muito sensível ao tamanho ou à performance, você poderá optar por não aceitar a confirmação de chave. Mas faça isso somente se for necessário.

Para obter mais informações sobre a migração para as versões 1.7.x e 2.0.x, incluindo seus atributos de confirmação de chave, consulte Como migrar seu AWS Encryption SDK. Para obter informações técnicas sobre confirmação de chave, consulte AWS Encryption SDK referência de algoritmos eAWS Encryption SDK referência de formato de mensagem.

Política de compromisso

Uma política de compromisso é uma definição de configuração que determina se a aplicação criptografa e descriptografa com confirmação de chave. Criptografar e descriptografar com o confirmação de chave é uma prática recomendada do AWS Encryption SDK.

A política de compromisso tem três valores.

nota

Talvez seja necessário rolar horizontalmente ou verticalmente para ver a tabela inteira.

Valores da política de compromisso
Valor Criptografa com confirmação de chave Criptografa sem confirmação de chave Descriptografa com confirmação de chave Descriptografa sem confirmação de chave
ForbidEncryptAllowDecrypt
RequireEncryptAllowDecrypt
RequireEncryptRequireDecrypt

A configuração da política de compromisso foi introduzida na versão 1.7.x. do AWS Encryption SDK. Ela é válida em todas as linguagens de programação suportadas.

  • O ForbidEncryptAllowDecrypt descriptografa com ou sem confirmação de chave, mas não criptografa com confirmação de chave. Este é o único valor válido para a política de compromisso na versão 1.7. x, e ele é usado para todas as operações de criptografia e descriptografia. Ele foi projetado para preparar todos os hosts que executam sua aplicação para descriptografar com confirmação de chave antes mesmo de encontrarem um texto cifrado criptografado com confirmação de chave.

  • O RequireEncryptAllowDecrypt sempre criptografa com confirmação de chave. Ele pode descriptografar textos cifrados criptografados com ou sem confirmação de chave. Este valor, introduzido na versão 2.0.x, permite que você comece a criptografar com confirmação de chave, mas ainda descriptografe textos cifrados herdados sem confirmação de chave.

  • RequireEncryptRequireDecrypt: criptografa e descriptografa somente com confirmação de chave. Esse valor é o padrão para a versão 2.0x. Use-o valor quando tiver certeza de que todos os seus textos cifrados estão criptografados com a confirmação de chave.

A configuração da política de compromisso determina quais pacotes de algoritmos você pode usar. A partir da versão 1.7.x, o AWS Encryption SDK suporta pacotes de algoritmos para confirmação de chave; com e sem assinatura. Se você especificar um pacote de algoritmos que entre em conflito com sua política de compromisso, o AWS Encryption SDK retornará um erro.

Para obter ajuda para definir sua política de compromisso, consulte Como definir sua política de compromisso.

Assinaturas digitais

Para garantir a integridade de uma mensagem digital à medida que ela passa entre os sistemas, você pode aplicar uma assinatura digital à mensagem. As assinaturas digitais são sempre assimétricas. Use a chave privada para criar a assinatura e anexá-la à mensagem original. O destinatário usa uma chave pública para verificar se a mensagem não foi modificada desde que você o assinou.

O AWS Encryption SDK criptografa seus dados usando um algoritmo de criptografia autenticado, o AES-GCM, e o processo de descriptografia verifica a integridade e a autenticidade de uma mensagem criptografada sem usar uma assinatura digital. Mas como o AES-GCM usa chaves simétricas, qualquer pessoa que possa descriptografar a chave de dados usada para descriptografar o texto cifrado também pode criar manualmente um novo texto cifrado, causando uma possível preocupação de segurança. Por exemplo, se você usar uma chave do AWS KMS como chave de encapsulamento, isso significa que é possível para um usuário com permissões do KMS Decrypt criar textos cifrados criptografados sem chamar o KMS Encrypt.

Para evitar esse problema, o AWS Encryption SDK suporta a adição de uma assinatura do Algoritmo de Assinatura Digital de Curva Elíptica (ECDSA) ao final das mensagens criptografadas. Quando um pacote de algoritmos de assinatura é usado, o AWS Encryption SDK gera uma chave privada temporária e um par de chaves públicas para cada mensagem criptografada. O AWS Encryption SDK armazena a chave pública no contexto de criptografia da chave de dados e descarta a chave privada, e ninguém pode criar outra assinatura que verifique com a chave pública. Como o algoritmo vincula a chave pública à chave de dados criptografada como dados autenticados adicionais no cabeçalho da mensagem, um usuário que só pode descriptografar mensagens não pode alterar a chave pública.

A verificação de assinatura adiciona um custo significativo de performance à descriptografia. Se os usuários que criptografam dados e os usuários que decifram os dados forem igualmente confiáveis, considere usar um pacote de algoritmos que não inclua assinatura.