# Confidentialité persistante

La confidentialité persistante (forward secrecy en anglais), est une propriété en cryptographie qui garantit que la découverte par un adversaire de la clé privée d'un correspondant (secret à long terme) ne compromet pas la confidentialité des communications passées.
Elle peut être fournie, par exemple, par la génération des clefs de session au moyen du protocole d'échange de clés Diffie-Hellman. Ces clés de session (temporaires) ne pourront pas être retrouvées à partir des clés des participants, et inversement.
Lors d'une connexion TLS, le choix des algorithmes d'échange de clé permet ou ne permet pas de profiter d'une confidentialité persistante. Les méthodes « DH » (pour Diffie-Hellman) ou « Ephemeral DH », lorsqu'elles sont utilisées, fournissent une telle caractéristique.
Cela signifie que, même si vous avez obtenu la clé privée du serveur en soudoyant un administrateur, en la volant, ou même grâce à une décision de justice, vous ne serez pas en mesure de déchiffrer les échanges que vous auriez pu enregistrer dans le passé.
La clé privée n'est d'aucune aide dans ce cas, car elle n'a été utilisée que pour signer les paramètres DH lors du message « Server Key Exchange ».
Des mécanismes de dérivation de clé peuvent aussi garantir la confidentialité persistante, comme dans l'algorithme DUKPT (en) où l'on utilise une clé unique par transaction.

## Histoire

La confidentialité persistante a été décrite pour la première fois par Whitfield Diffie, Paul van Oorschot, et Michael James Wiener. Ils décrivaient cette propriété dans le protocole STS (station-to-station), dans lequel le secret à long terme est une clé privée,
Le terme de confidentialité persistante a aussi été utilisé pour décrire les propriétés d'un protocole d'échange de clé authentifié par mot de passe, dans lequel le secret à long terme est un mot de passe partagé.
Enfin, l'annexe D.5.1 de l'IEEE 1363-2000 évoque les propriétés de confidentialité persistante des divers standard d'échange de clé.

## Attaques

La confidentialité persistante est conçue pour empêcher que la compromission d'une clé de longue durée (clé privée) affecte la confidentialité des conversations passées. Cependant, cela ne protège pas d'une cryptanalyse de l'algorithme de chiffrement sous-jacent utilisé, puisqu'une cryptanalyse consiste à déchiffrer un message chiffré par un algorithme de chiffrement, sans avoir la clé à sa disposition, et que la confidentialité persistante ne fait que protéger les clés passées. Un attaquant patient peut mémoriser une conversation chiffrée par un algorithme à clé publique, et attendre que cet algorithme soit cassé à l'avenir. Cela permettrait de retrouver un message en clair d'une conversation ancienne ayant pourtant utilisé un échange de clé à confidentialité persistante.

## Protocoles

* La confidentialité persistante est une fonctionnalité optionnelle d'IPsec (RFC 2412).
* SSH
* Off-the-Record Messaging, un protocole cryptographique et une bibliothèque de code destinée aux clients de messagerie instantanée.
* En théorie, Transport Layer Security (TLS) permet de choisir un algorithme de chiffrement adéquat depuis SSLv3, mais en pratique, de nombreuses implémentations de TLS refusent de négocier ces algorithmes, ou avec des niveaux de chiffrement faibles. OpenSSL sait utiliser la confidentialité persistante grâce aux courbes elliptiques de Diffie–Hellman depuis la version 1.0, avec une augmentation de temps de calcul d'environ 15 %.
* OMEMO