Chiffrement hybride

La primitive de chiffrement hybride combine l'efficacité du chiffrement symétrique au caractère pratique de la cryptographie à clé publique (asymétrique). Tout le monde peut chiffrer des données à l'aide de la clé publique, mais seuls les utilisateurs disposant de la clé privée peuvent déchiffrer les données.

Pour le chiffrement hybride, l'expéditeur génère une nouvelle clé symétrique pour chiffrer le texte brut de chaque message et produire un texte chiffré. Cette clé symétrique est encapsulée avec la clé publique du destinataire. Pour le déchiffrement hybride, la clé symétrique est décapsulée par le destinataire, puis utilisée pour déchiffrer le texte chiffré afin de récupérer le texte brut d'origine. Pour en savoir plus sur le stockage ou la transmission du texte chiffré avec l'encapsulation de la clé, consultez la page Format des fils de chiffrement hybride Tink.

Le chiffrement hybride présente les propriétés suivantes:

  • Confidentialité: personne ne peut obtenir d'informations sur le texte brut chiffré (à l'exception de sa longueur), à moins d'avoir accès à la clé privée.
  • Asymétrie: le chiffrement du texte chiffré peut être effectué à l'aide de la clé publique, mais pour le déchiffrement, la clé privée est requise.
  • Randomisation: le chiffrement est aléatoire. Deux messages comportant le même texte brut ne renverront pas le même texte chiffré. Cela empêche les pirates informatiques d'identifier le texte chiffré correspondant à un texte brut donné.

Le chiffrement hybride est représenté dans Tink par une paire de primitives:

  • HybridEncrypt pour le chiffrement.
  • HybridDecrypt pour le déchiffrement

Paramètre d'informations contextuelles

En plus du texte brut, le chiffrement hybride accepte un paramètre supplémentaire, context_info. Il s'agit généralement de données publiques implicites d'après le contexte, mais qui doivent être liées au texte chiffré obtenu. Cela signifie que le texte chiffré vous permet de confirmer l'intégrité des informations de contexte, mais qu'il n'y a aucune garantie de confidentialité ou d'authenticité. Les informations de contexte réelles peuvent être vides ou nulles, mais pour que le texte chiffré obtenu soit correctement déchiffré, la même valeur d'informations contextuelles doit être fournie pour le déchiffrement.

Une implémentation concrète du chiffrement hybride peut lier des informations contextuelles au texte chiffré de différentes manières, par exemple:

  • Utilisez context_info comme entrée de données associée pour le chiffrement symétrique AEAD (voir le document RFC 5116).
  • Utilisez context_info comme entrée "CtxInfo" pour HKDF (si l'implémentation utilise HKDF comme fonction de dérivation de clé, voir RFC 5869).

Choisir un type de clé

Nous vous recommandons d'utiliser le type de clé DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM dans la plupart des cas d'utilisation. Ce type de clé implémente la norme HPKE (Hybrid Public Key Encryption), comme spécifié dans le document RFC 9180. Le HPKE se compose d'un mécanisme d'encapsulation de clé (KEM), d'une fonction de dérivation de clé (KDF) et d'un algorithme de chiffrement authentifié avec les données associées (AEAD).

DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM utilise spécifiquement:

  • KEM: Diffie-Hellman sur Curve25519 avec HKDF-SHA-256 pour dériver le secret partagé.
  • KDF: HKDF-SHA-256 pour dériver le contexte de l'expéditeur et du destinataire.
  • AEAD: AES-256-GCM avec des nonces de 12 octets générés conformément à la norme HPKE.

Les autres types de clés HPKE compatibles incluent, sans s'y limiter, les suivants:

  • 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

Consultez la RFC 9180 pour en savoir plus sur les choix d'algorithmes pour les protocoles KEM, KDF et AEAD.

Bien qu'il ne soit plus recommandé, Tink accepte également certaines variantes d'ECIES, comme décrit dans la norme ISO 18033-2 de Victor Shoup. Certains types de clés ECIES compatibles sont listés ci-dessous:

  • 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

Propriétés minimales

  • Les informations de texte brut et de contexte peuvent avoir une longueur arbitraire (dans la plage de 0...232 octets)
  • Protection contre les attaques à texte chiffré choisi adaptative
  • Sécurité 128 bits pour les schémas basés sur les courbes elliptiques

Exemples de cas d'utilisation

Consultez la section "Je souhaite échanger des données".