Criptografia híbrida

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".