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