Gestion des clés
ECDH-ES : Elliptic Curve Diffie-Hellman Ephemeral-Static. « Diffie-Hellman sur courbes elliptiques, éphémère côté émetteur, statique côté destinataire », par analogie avec une boîte aux lettres fixe dans laquelle chaque expéditeur glisse un colis fermé par un cadenas neuf. C'est l'algorithme d'accord de clé de JOSE (JSON Object Signing and Encryption) utilisé dans les JWE (JSON Web Encryption) pour obtenir la clé de chiffrement du contenu.
Fonctionnement : L'émetteur génère une paire de clés éphémère, la combine par ECDH à la clé publique statique du destinataire, puis dérive une clé avec la Concat KDF (Key Derivation Function, fonction de dérivation de clé). La clé publique éphémère voyage dans l'en-tête sous le paramètre epk.
Deux modes : En accord direct, la clé dérivée sert elle-même de CEK et le champ de clé chiffrée reste vide. Avec les variantes suivies d'un AES Key Wrap, la clé dérivée sert de KEK pour emballer une CEK aléatoire, ce qui permet plusieurs destinataires.
Ce que le mode ne fait pas : Rien n'authentifie l'émetteur : n'importe qui connaissant la clé publique du destinataire peut produire un JWE valide. Pour savoir qui parle, il faut signer, par exemple avec un JWS imbriqué.
Confidentialité dans le temps : Le côté statique signifie que la compromission de la clé privée du destinataire rend lisibles tous les messages passés qui lui étaient adressés. L'argument « léger, idéal pour le mobile » des comparatifs ne change rien à cette arithmétique.
Ce qui arrive si on s'en passe
Sans ce mécanisme ou un équivalent, le contenu d'un jeton chiffré devrait reposer sur une clé symétrique partagée à l'avance entre toutes les parties, dont la fuite chez un seul participant expose tout le monde. Mal configuré, il n'offre pas davantage : une bibliothèque qui ne vérifie pas que la clé éphémère reçue appartient à la courbe attendue permet une attaque par courbe invalide qui extrait la clé privée du destinataire. Accepter l'algorithme annoncé dans l'en-tête sans liste blanche ouvre aussi la voie aux substitutions d'algorithme. Enfin, ce mode ne dit rien de l'expéditeur : sans signature en plus, un attaquant peut fabriquer des messages chiffrés parfaitement valides à destination du service.
Explication de la marmotte
Imaginer une boîte aux lettres dont seul le propriétaire possède la clé, et dont le plan de la serrure est affiché publiquement. Pour chaque lettre, l'expéditeur fabrique un petit cadenas jetable, le combine avec le plan affiché pour obtenir un code secret unique, ferme sa lettre avec ce code et joint la moitié publique de son cadenas. Le propriétaire, avec sa clé à lui, retrouve le même code et ouvre la lettre. Chaque envoi a son propre code. En revanche, rien ne prouve qui a posté la lettre, et si la clé du propriétaire est un jour volée, toutes les anciennes lettres deviennent lisibles.
