Quantifier les fuites par théorie de l'information
- Accueil
- Fondations
- Theorie
- Quantifier les fuites par théorie de l'information
Quantifier les fuites par théorie de l’information
Section intitulée « Quantifier les fuites par théorie de l’information »Une fuite n’a pas besoin de livrer une base complète pour être exploitable : révéler un bit sur un secret peut suffire à orienter une attaque, puis à en révéler un autre. La théorie de l’information fournit un langage pour mesurer ce que l’observation apprend réellement, y compris quand le mécanisme visible paraît bénin. Elle ne remplace ni le modèle de menace ni la revue d’architecture, mais elle interdit de qualifier une fuite de « négligeable » parce qu’elle tient dans un champ de journalisation.
Une fuite discrète ressemble à une porte qui laisse passer non pas une personne, mais un indice à chaque ouverture : une lumière, un délai ou un ticket numéroté. Pris seul, l’indice semble anodin. Répété assez longtemps, il permet pourtant de reconstituer ce qui devait rester caché.
→ Lire l’explication complète de la marmotte
Information mutuelle et fuite mesurable
Section intitulée « Information mutuelle et fuite mesurable »Soit un secret aléatoire X, par exemple l’appartenance d’un compte à un groupe sensible, et une observation Y, par exemple le statut retourné par un service. La quantité d’information révélée par Y sur X se mesure par l’information mutuelle :
I(X ; Y) = H(X) - H(X | Y)H(X) est l’entropie de Shannon du secret avant observation. H(X | Y) est l’incertitude restante après observation. L’unité est le bit. Si I(X ; Y) = 0, l’observation ne réduit pas l’incertitude sur le secret. Si I(X ; Y) = 1, elle élimine l’équivalent d’un choix binaire équilibré.
Cette mesure impose une discipline souvent absente des analyses de fuite : définir la variable secrète et la distribution attendue. Un code de retour qui révèle si un identifiant existe peut transmettre un bit dans un univers théorique équilibré. En production, si 99,9 % des identifiants testés n’existent pas, l’information moyenne est faible, mais la valeur opérationnelle pour l’attaquant peut rester élevée s’il cible une liste issue d’une autre fuite. L’entropie moyenne ne dispense jamais d’étudier le scénario conditionné.
Le compromis central est net : réduire la capacité d’un canal coûte de la précision fonctionnelle, du débit, de l’observabilité ou de la différenciation des erreurs. La recommandation est de supprimer les distinctions observables aux frontières non fiables, puis de conserver le diagnostic dans une télémétrie interne séparée. Préserver des réponses riches « pour faciliter le support » revient fréquemment à installer une interface d’interrogation pour attaquant patient. Le support mérite mieux qu’un oracle déguisé en message d’erreur.
L’information mutuelle est une moyenne. Elle peut masquer un cas catastrophique : un événement rare qui divulgue un secret entier. Pour les secrets à forte valeur, compléter l’analyse par la fuite maximale, c’est-à-dire le gain maximal de probabilité qu’un attaquant obtient après une observation. Les jetons d’accès, clés privées et mots de passe ne tolèrent pas une moyenne rassurante construite sur des millions de réponses sans intérêt.
Les bases de la cryptographie appliquée restent nécessaires ici : le chiffrement protège un contenu, pas forcément sa taille, son existence, son rythme d’accès ni les erreurs émises autour. Un secret chiffré dans une requête dont la longueur varie avec sa valeur reste un secret bavard.
Capacité des canaux cachés et répétition
Section intitulée « Capacité des canaux cachés et répétition »Un canal caché transporte une information non prévue par l’interface de sécurité. Il ne faut pas le confondre avec un canal auxiliaire physique : ici, le vecteur peut être logique et applicatif, tel qu’un code HTTP (Hypertext Transfer Protocol), un délai de réponse, une taille de message, un ordre de résultats ou une consommation de quota. Les mécanismes physiques, comme les variations électromagnétiques ou de consommation, relèvent d’une autre surface et exigent d’autres contre-mesures.
La capacité d’un canal exprime son débit maximal théorique sous bruit. Pour un canal binaire symétrique où chaque bit est inversé avec une probabilité p, elle vaut :
C = 1 - H2(p)où H2 est l’entropie binaire. À p = 0, le canal livre un bit par observation. À p = 0,5, l’observation est du bruit pur et la capacité tombe à zéro. Entre les deux, l’attaquant peut répéter les mesures, voter majoritairement et coder l’information pour compenser les erreurs. Ajouter du jitter aléatoire sans borner le nombre de requêtes ne supprime donc généralement rien : il facture juste davantage de requêtes. C’est un péage, pas une fermeture.
La fréquence d’échantillonnage compte autant que la fuite unitaire. Un canal à 0,01 bit par réponse devient sérieux s’il accepte des millions de requêtes anonymes. À l’inverse, un canal de plusieurs bits par événement peut être acceptable si l’événement est authentifié, strictement limité et journalisé. La métrique exploitable est donc :
fuite totale estimée = capacité par observation × observations autoriséesCette borne doit intégrer les identités, adresses réseau, sessions, comptes créés, clés d’interface et fenêtres temporelles. Limiter un seul compteur est un classique : l’attaquant crée des identités, distribue les sources ou attend le prochain créneau. Le système découvre alors que son quota avait une vie sociale très riche.
Les canaux cachés intentionnels exigent une séparation plus stricte. Un champ libre signé, une valeur aléatoire contrôlée par un émetteur ou le choix parmi plusieurs réponses valides peut encoder des données sans modifier la fonction apparente. Les signatures probabilistes, par exemple, doivent utiliser une source aléatoire de qualité ou un schéma déterministe normalisé lorsque l’environnement l’autorise. Une signature qui laisse l’émetteur choisir son hasard peut devenir un canal de sortie. Le fait que la signature soit cryptographiquement valide ne prouve rien sur l’absence d’information embarquée.
Mesurer une fuite sur traces réelles
Section intitulée « Mesurer une fuite sur traces réelles »Mesurer commence par construire un jeu de tests où le secret varie de façon contrôlée et équilibrée. Sans cet équilibrage, la fréquence naturelle d’un cas peut être confondue avec la fuite. Pour une variable secrète binaire, produire autant de requêtes pour chaque valeur, relever toutes les sorties visibles, puis estimer la distribution jointe (X, Y).
La sortie Y ne doit pas être réduite au corps de réponse. Inclure le statut, les en-têtes, la taille, la latence quantifiée en classes, la fermeture de connexion, les redirections, les messages d’erreur, les compteurs de quota et les effets secondaires observables. Une fuite par différence de trois octets ne devient pas noble parce qu’elle voyage dans un en-tête. Elle reste une fuite, avec une cravate.
L’estimation empirique est fragile sur les sorties rares. Une valeur non vue n’est pas une valeur impossible. Réserver des données de validation, répéter les campagnes sous charge normale et dégrader volontairement le réseau évitent de mesurer le laboratoire au lieu du système. Si l’attaquant peut observer depuis Internet, les mesures doivent inclure les proxys, répartiteurs et caches du chemin. Un cache qui transforme un secret en variation de temps est un composant de sécurité, même si son équipe le classe sous « performance ».
Exemple reproductible : estimer l’information d’un code de réponse
Section intitulée « Exemple reproductible : estimer l’information d’un code de réponse »Le script suivant calcule l’information mutuelle empirique entre un secret binaire et une sortie catégorielle. Il utilise uniquement la bibliothèque standard de Python et accepte des observations issues d’un test contrôlé.
# Python 3 : chaque tuple contient (secret, observation).# Remplacer ces valeurs par des traces collectées à secret équilibré.samples = [ (0, "404"), (0, "404"), (0, "404"), (0, "404"), (1, "403"), (1, "403"), (1, "404"), (1, "403"),]
from collections import Counterfrom math import log2
joint = Counter(samples)px = Counter(x for x, _ in samples)py = Counter(y for _, y in samples)n = len(samples)
mutual_information = 0.0for (x, y), count in joint.items(): pxy = count / n p_x = px[x] / n p_y = py[y] / n mutual_information += pxy * log2(pxy / (p_x * p_y))
print(f"Information mutuelle estimée : {mutual_information:.4f} bit(s)")Le résultat ne doit pas être présenté comme une preuve de non-fuite. Il dépend du générateur de requêtes, de la granularité choisie pour la latence et de l’échantillon. En revanche, une valeur non nulle reproductible entre deux conditions secrètes justifie une correction. Il n’existe pas de seuil magique où une fuite devient philosophiquement acceptable.
Contre-mesures d’architecture et limites
Section intitulée « Contre-mesures d’architecture et limites »La première contre-mesure consiste à rendre les sorties indépendantes du secret. Répondre avec la même structure, le même statut externe et une taille bornée pour les cas sensibles supprime souvent le canal le plus rentable. Cette uniformisation doit couvrir les chemins d’échec : autorisation refusée, ressource absente, compte verrouillé, jeton expiré et format invalide. Égaliser seulement le chemin heureux est une décoration de sécurité.
Pour les canaux temporels, fixer des budgets de traitement, exécuter les comparaisons sensibles en temps constant et isoler les opérations lentes sont les bons leviers. Un délai artificiel fixe ne protège pas si les branches internes restent mesurables après suffisamment de répétitions. Un délai aléatoire peut compléter la protection, jamais la remplacer. La priorité reste la suppression de la dépendance entre secret et chemin d’exécution.
Le débit doit être limité à plusieurs niveaux : identité authentifiée, session, source réseau, ressource ciblée et fenêtre globale. Les alertes doivent suivre les séquences de requêtes à faible variance, les échecs distribués et les explorations de valeurs proches. Les journaux ne doivent pas enregistrer les secrets testés en clair, faute de quoi la contre-mesure devient une fuite centralisée avec rétention longue. La gestion des données et la rétention de traces font partie du modèle, pas de la paperasse décorative.
Les secrets de signature, clés de chiffrement et clés d’interface doivent être isolés dans un HSM (Hardware Security Module) lorsque leur compromission rendrait le canal indifférent : un attaquant qui possède la clé peut souvent produire des messages valides, donc encoder ce qu’il veut. La rotation limite l’exposition d’une clé compromise, mais ne retire pas les données déjà exfiltrées. Il faut prévoir la révocation, la relecture des journaux, la rotation des dérivés et la reconstruction des droits. Une sauvegarde chiffrée des clés sans contrôle d’accès séparé n’est qu’une seconde copie du problème.
Ce mécanisme ne garantit pas la confidentialité globale. Il ne détecte pas une exfiltration par accès légitime, ne corrige pas une autorisation trop large et ne protège pas une donnée que l’application affiche volontairement. Les contrôles d’identité, la segmentation réseau et la revue des autorisations restent nécessaires. La théorie de l’information mesure un lien entre un secret et une observation ; elle ne transforme pas une architecture permissive en forteresse parce qu’un graphique affiche moins de bits.
🐝 Ce qui arrive si on s’en passe
Section intitulée « 🐝 Ce qui arrive si on s’en passe »Sans mesure de la fuite, aucune correction n’est vérifiable : une modification de code, de proxy ou de cache peut réintroduire une distinction observable sans qu’aucun test ne la signale, et le correctif précédent reste considéré comme acquis. Les quotas sont alors dimensionnés au jugé, puisque la capacité par observation, seule donnée qui permet de calculer combien de requêtes un secret supporte, reste inconnue. La brèche « la question qui rend le module bavard » en montre l’issue : un oracle de remplissage qui livre moins d’un bit par réponse suffit, par accumulation de requêtes adaptatives, à déchiffrer un message RSA sans jamais toucher la clé privée. Faute de chiffre, la priorisation entre canaux se fait aussi à l’intuition, et le canal jugé bénin reste ouvert.
🦫 Explication de la marmotte 🍫
Section intitulée « 🦫 Explication de la marmotte 🍫 »Pour chercher une fuite, il faut d’abord choisir ce qui doit rester secret, par exemple savoir si un compte existe ou si une personne possède un droit particulier. Ensuite, il faut lister tout ce qu’une personne extérieure peut observer : le message reçu, son code de réponse, sa taille, le temps d’attente, le nombre d’essais acceptés et les effets visibles après la demande.
On réalise alors des essais où le secret change volontairement, en gardant le reste aussi constant que possible. Si les observations changent plus souvent que ce que le hasard explique, elles donnent une information sur le secret. Cette information se mesure en bits. Un bit correspond à la réduction d’un choix entre deux possibilités équilibrées. Une fuite faible à chaque essai devient dangereuse si les essais peuvent être répétés longtemps.
Pour réduire le problème, les réponses externes doivent se ressembler lorsque la différence dépend d’un secret. Les détails nécessaires au diagnostic doivent rester dans des traces internes protégées. Il faut aussi limiter le nombre d’essais selon plusieurs critères, surveiller les séries de requêtes suspectes et éviter que les journaux enregistrent des secrets.
Quand la mesure échoue à montrer une fuite, cela ne prouve pas qu’il n’en existe aucune : le test peut avoir oublié une observation ou manquer de données. Quand une fuite est détectée, ajouter du hasard ne suffit pas toujours, car la répétition peut annuler son effet. La correction durable consiste à supprimer la différence observable.
À lire aussi
- Sécurité par capacités contre ACLLa sécurité par capacités délègue des droits portables et restreints, en alternative au contrôle d'accès fondé sur des listes ACL.
- L'entropie au démarrageLes générateurs aléatoires des noyaux modernes ont largement réglé le manque d'entropie au démarrage d'une machine isolée. Le problème revient par les chemins de déploiement : images clonées, clés d'hôte figées dans un gabarit, graines copiées, instantanés restaurés, où ce n'est plus le hasard qui manque mais l'unicité.
- Ce qu'on gardeMesurer un corpus ne dit pas quoi en faire. Tout conserver et tout effacer sont deux manières de ne pas décider. Ce qui mérite d'être gardé est aussi ce qui expose le plus, et ce n'est pas une coïncidence.
- Attaques par canaux auxiliaires et secretsLes attaques par canaux auxiliaires extraient un secret en observant le temps, la consommation électrique ou les émissions électromagnétiques d’un calcul.
Pages voisines
La citent
- Non-interférence et contrôle de flux d'information en pratique
- Vérifier un protocole cryptographique avec Tamarin ou ProVerif
- Isolation multi-locataire face à un locataire hostile
- Rowhammer, Spectre et Meltdown, mécanismes et contre-mesures
- Comment fonctionne l'inférence d'un modèle de langage
Quantifier les fuites par théorie de l'information
Elle cite
: les deux pages se citent l’une l’autre.
