O primitivo de criptografia híbrida combina a eficiência da criptografia simétrica com a conveniência da criptografia de chave pública (assimétrica). Qualquer pessoa pode criptografar dados com a chave pública, mas somente os usuários com a chave privada podem descriptografar os dados.
Na criptografia híbrida, o remetente gera uma nova chave simétrica para criptografar o texto simples de cada mensagem e produzir um texto criptografado. Essa chave simétrica é encapsulada com a chave pública do destinatário. Na descriptografia híbrida, a chave simétrica é descapsulada pelo destinatário e usada para descriptografar o texto criptografado e recuperar o texto simples original. Consulte Formato de condutor de criptografia híbrida do Tink para ver detalhes sobre como armazenar ou transmitir o texto criptografado com o encapsulamento da chave.
A criptografia híbrida tem as seguintes propriedades:
- Confidencialidade: ninguém pode conseguir informações sobre o texto simples criptografado (exceto o tamanho), a menos que tenha acesso à chave privada.
- Assimetria: a criptografia do texto criptografado pode ser feita com a chave pública, mas, para descriptografia, a chave privada é necessária.
- Ordem aleatória: a criptografia é aleatória. Duas mensagens com o mesmo texto simples não vão gerar o mesmo texto criptografado. Isso impede que invasores saibam qual texto criptografado corresponde a um determinado texto simples.
A criptografia híbrida é representada no Tink como um par de primitivos:
- HybridEncrypt (em inglês) para criptografia
- HybridDecrypt para descriptografia
Parâmetro de informações de contexto
Além do texto simples, a criptografia híbrida aceita um parâmetro extra,
context_info
, que geralmente são dados públicos implícitos do contexto, mas
precisam ser vinculados ao texto criptografado resultante. Isso significa que o texto criptografado
permite confirmar a integridade das informações do contexto, mas não há
garantias de confidencialidade ou autenticidade. As informações reais de contexto podem ser vazias
ou nulas, mas, para garantir a descriptografia correta do texto criptografado resultante, o
mesmo valor das informações de contexto precisa ser fornecido para descriptografia.
Uma implementação concreta da criptografia híbrida pode vincular informações de contexto ao texto criptografado de várias maneiras. Por exemplo:
- Use
context_info
como entrada de dados associados para criptografia simétrica AEAD (ver RFC 5116, link em inglês). - Use
context_info
como entrada "CtxInfo" para HKDF (se a implementação usar HKDF como função de derivação de chaves, consulte RFC 5869).
Escolha um tipo de chave
Recomendamos o uso do tipo de chave DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM
na maioria dos casos de uso. Esse tipo de chave implementa o padrão de criptografia de chave pública híbrida (HPKE, na sigla em inglês), conforme especificado no RFC 9180. A HPKE consiste
em um mecanismo de encapsulamento de chaves (KEM, na sigla em inglês), uma função de derivação de chaves (KDF, na sigla em inglês) e um
algoritmo autenticado de dados associados (AEAD, na sigla em inglês).
DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM
emprega especificamente:
- KEM: Diffie–Hellman sobre Curve25519 com HKDF-SHA-256 para derivar o secret compartilhado.
- KDF: HKDF-SHA-256 para derivar o contexto do remetente e do destinatário.
- AEAD: AES-256-GCM com valores de uso único de 12 bytes gerados de acordo com o padrão HPKE.
Outros tipos de chaves HPKE com suporte incluem, entre outros:
DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_128_GCM
DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_CHACHA20_POLY1305
DHKEM_P256_HKDF_SHA256_HKDF_SHA256_AES_128_GCM
DHKEM_P521_HKDF_SHA512_HKDF_SHA512_AES_256_GCM
Consulte a RFC 9180 (link em inglês) para mais detalhes sobre as opções de algoritmos para KEM, KDF e AEAD.
Embora não seja mais recomendado, o Tink também é compatível com algumas variações do ECIES, conforme descrito no padrão ISO 18033-2 de Victor Shoup (em inglês). Veja abaixo alguns tipos de chave ECIES compatíveis:
ECIES_P256_HKDF_HMAC_SHA256_AES128_GCM
ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_GCM
ECIES_P256_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256
ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256
Propriedades mínimas
- As informações de texto simples e contexto podem ter tamanho arbitrário (dentro do intervalo de 0 a 232 bytes).
- Seguro contra ataques de texto criptografado selecionados
- Segurança de 128 bits para esquemas baseados em curva elíptica
Exemplos de casos de uso
Consulte "Quero trocar dados".