Fundamentos de criptografia do AWS KMS
O AWS KMS usa algoritmos criptográficos configuráveis para que o sistema possa migrar rapidamente de um algoritmo ou modo aprovado para outro. O conjunto padrão inicial de algoritmos criptográficos foi selecionado a partir de algoritmos do Padrão Federal de Processamento de Informações (aprovados pelo Federal Information Processing Standard – FIPS) para suas propriedades de segurança e performance.
Entropia e geração de números aleatórios
A geração de chaves do AWS KMS é executada nos HSMs do AWS KMS. Os HSMs implementam um gerador de números aleatórios híbridos que usa o NIST SP800-90A Gerador de bits aleatórios determinísticos (DRBG) CTR_DRBG usando AES-256
Operações de chave simétrica (somente criptografia)
Todos os comandos de criptografia de chave simétrica usados nos HSMs usam os Padrões avançados de criptografia (AES)
AES-GCM é um esquema de criptografia autenticado. Além de criptografar texto sem formatação para produzir texto cifrado, ele calcula uma tag de autenticação sobre o texto cifrado e quaisquer dados adicionais para os quais a autenticação é necessária (dados autenticados adicionalmente – AAD). A tag de autenticação ajuda a garantir que os dados são da fonte suposta e que o texto cifrado e os AAD não foram modificados.
Frequentemente, o AWS omite a inclusão dos AAD em nossas descrições, especialmente quando se refere à criptografia de chaves de dados. Fica implícito pelo texto circundante nesses casos que a estrutura a ser criptografada é particionada entre o texto sem formatação a ser criptografado e o AAD de texto não criptografado a ser protegido.
A AWS KMS fornece uma opção para você importar material de chave para uma AWS KMS key em vez de depender do AWS KMS para gerar o material de chave. É possível criptografar esse material de chave importado usando o RSAES-OAEP
Operações de chave assimétrica (criptografia, assinatura digital e verificação de assinatura)
O AWS KMS é compatível com o uso de operações de chave assimétrica para operações de criptografia, assinatura digital e acordo de chave. Operações de chave assimétrica contam com um par de chave pública e chave privada relacionadas matematicamente que pode ser usado para criptografia e descriptografia, assinatura e verificação de assinatura ou derivação de segredos compartilhados. A chave privada nunca deixa o AWS KMS descriptografado. É possível usar a chave pública no AWS KMS chamando as operações de API do AWS KMS ou baixando a chave pública e usando-a fora do AWS KMS.
O AWS KMS é compatível com as seguintes cifras assimétricas.
-
RSA-OAEP (para criptografia) & RSA-PSS e RSA-PKCS- #1 -v1_5 (para assinatura e verificação): Suporta comprimentos de chave RSA (em bits): 2048, 3072 e 4096 para diferentes requisitos de segurança.
-
Elliptic Curve (ECC): usada para assinar e verificar ou derivar segredos compartilhados, mas não para ambos. Suporta curvas ECC: NIST P256, P384, P521, SECP 256k1.
-
SM2 (somente regiões da China): usada para criptografia e descriptografia, assinatura e verificação ou derivação de segredos compartilhados, mas você deve escolher um uso de chave. Compatível com SM2PKE para criptografia e SM2DSA para assinatura.
Funções de derivação de chave
Uma função de derivação de chave é usada para derivar chaves adicionais com base em um segredo ou chave inicial. O AWS KMS usa uma função de derivação de chave (KDF) para derivar chaves por chamada para cada criptografia sob uma AWS KMS key. Todas as operações de KDF usam a KDF no modo contador
Uso interno de assinaturas digitais no AWS KMS
Assinaturas digitais também são usadas para autenticar comandos e comunicações entre entidades do AWS KMS. Todas as entidades de serviço têm um par de chaves de algoritmo de assinatura digital de curva elíptica (ECDSA). Elas executam o ECDSA conforme definido na Uso de algoritmos de criptografia de curva elíptica (ECC) na sintaxe de mensagem criptográfica (CMS)
Criptografia de envelope
Quando você criptografa seus dados, os dados são protegidos, mas é necessário proteger a chave de criptografia. Uma estratégia é para criptografá-la. Criptografia de envelope é a prática de criptografar dados de texto simples com uma chave de dados e criptografar a chave de dados em outra chave.
Você pode até mesmo criptografar a chave de criptografia dos dados em outra chave de criptografia e criptografar essa chave de criptografia em outra chave de criptografia. Mas em algum momento deverá manter uma chave em texto simples para que possa descriptografar as chaves e seus dados. Essa chave de criptografia em texto simples de nível superior é chamada de chave raiz.
O AWS KMS ajuda você a proteger suas chaves de criptografia armazenando-as e gerenciando-as com segurança. Conhecidas como AWS KMS keys, a chave-raiz armazenada no AWS KMS nunca sai descriptografada dos módulos de segurança de hardware com validação FIPS
Uma construção básica usada em muitos sistemas criptográficos é a criptografia de envelope. A criptografia de envelope usa duas ou mais chaves criptográficas para proteger uma mensagem. Normalmente, uma chave é derivada a partir de uma chave estática de longo prazo k, e outra chave é uma chave por mensagem msgKey, que é gerada para criptografar a mensagem. O envelope é formado criptografando a mensagem: texto cifrado = Criptografia(msgKey, mensagem). Em seguida, a chave de mensagem é criptografada com a chave estática de longo prazo:encKey = Criptografia(k, msgKey). Por fim, os dois valores (encKey, texto cifrado) são empacotados em uma única estrutura, ou mensagem criptografada de envelope.
O destinatário, com acesso a k, pode abrir a mensagem envolta primeiro descriptografando a chave criptografada e depois descriptografando a mensagem.
O AWS KMS fornece a capacidade de gerenciar essas chaves estáticas de longo prazo e automatizar o processo de criptografia de envelope dos seus dados.
Além dos recursos de criptografia fornecidos no serviço AWS KMS, o AWSSDK de criptografia fornece bibliotecas de criptografia de envelope do lado do cliente. Você pode usar essas bibliotecas para proteger os seus dados e as chaves de criptografia usadas para criptografar esses dados.
A criptografia de envelope oferece vários benefícios:
-
Proteção de chaves de dados
Quando você criptografa uma chave de dados, não precisa se preocupar em armazenar a chave de dados criptografada porque a chave de dados é inerentemente protegida pela criptografia. A chave de dados criptografada pode ser armazenada com segurança junto com os dados criptografados.
-
Criptografar os mesmos dados com várias chaves
As operações de criptografia podem ser demoradas, especialmente quando os dados que estão sendo criptografados são objetos grandes. Em vez de recriptografar dados brutos várias vezes com diferentes chaves, você pode recriptografar somente as chaves de dados que protegem os dados brutos.
-
Combinação de pontos fortes de vários algoritmos
Em geral, os algoritmos de chave simétrica são mais rápidos e geram textos cifrados menores do que os algoritmos de chave pública. No entanto, os algoritmos de chave pública fornecem separação inerente de funções e gerenciamento de chaves mais fácil. A criptografia de envelope permite associar os pontos fortes de cada estratégia.
Operações criptográficas
No AWS KMS, operações de criptografia são operações de API que usam chaves do KMS para proteger dados. Como as chaves do KMS permanecem no AWS KMS, é necessário chamar o AWS KMS para usar uma chaves do KMS em uma operação criptográfica.
Para executar operações de criptografia com chaves do KMS, use os AWS SDKs, a AWS Command Line Interface (AWS CLI) ou o AWS Tools for PowerShell. Não é possível executar operações de criptografia no console do AWS KMS. Para obter exemplos de chamadas de operações de criptografia em várias linguagens de programação, consulte Exemplos de código para o AWS KMS usando AWS SDKs.
A tabela a seguir lista as operações de criptografia do AWS KMS. Ela também mostra os requisitos de tipo de chave e uso de chave para chaves do KMS usadas na operação.
Operation | Tipo de chave | Uso da chave |
---|---|---|
Decrypt | Simétrico ou assimétrico | ENCRYPT_DECRYPT |
DeriveSharedSecret | Assimétrica | KEY_AGREEMENT |
Encrypt | Simétrico ou assimétrico | ENCRYPT_DECRYPT |
GenerateDataKey | Simétrica | ENCRYPT_DECRYPT |
GenerateDataKeyPair | Simétrica [1] Não é compatível com chaves do KMS em armazenamentos de chaves personalizados. |
ENCRYPT_DECRYPT |
GenerateDataKeyPairWithoutPlaintext | Simétrica [1] Não é compatível com chaves do KMS em armazenamentos de chaves personalizados. |
ENCRYPT_DECRYPT |
GenerateDataKeyWithoutPlaintext | Simétrica | ENCRYPT_DECRYPT |
GenerateMac | HMAC | GENERATE_VERIFY_MAC |
GenerateRandom | N/D. Essa operação não usa uma chave do KMS. | N/D |
ReEncrypt | Simétrico ou assimétrico | ENCRYPT_DECRYPT |
Sign | Assimétrica | SIGN_VERIFY |
Verificar | Assimétrica | SIGN_VERIFY |
VerifyMac | HMAC | GENERATE_VERIFY_MAC |
[1] Gera um par de chaves de dados assimétricas que é protegido por uma chave do KMS de criptografia simétrica.
Para obter informações sobre as permissões para operações de criptografia, consulte a Permissões AWS KMS.
Para tornar o AWS KMS responsivo e altamente funcional para todos os usuários, o AWS KMS estabelece cotas para o número de operações de criptografia chamadas em cada segundo. Para obter mais detalhes, consulte Cotas compartilhadas para operações de criptografia.