basu_← Tous les billets
FIELD NOTES

Lire une fuite dans le bruit : ce que mesure une corrélation de consommation

Du modèle de Hamming à la validation sur des traces indépendantes : comprendre une analyse de canal auxiliaire sans confondre pic et preuve.

Un composant peut calculer un chiffrement correct et laisser fuiter de l'information pendant ce calcul. Sa consommation électrique dépend des commutations internes ; une mesure prise au bon moment peut donc contenir une petite contribution liée aux données manipulées. L'algorithme mathématique n'a pas besoin d'être faux pour que son implémentation parle.

L'analyse de consommation exploite cette séparation. Le travail fondateur de Kocher, Jaffe et Jun sur la Differential Power Analysis montre comment des mesures physiques peuvent révéler des secrets. Regardons ici un outil statistique voisin : la corrélation entre un modèle de fuite et des traces, dans un cadre pédagogique ou un laboratoire autorisé.

Remplacer le circuit par une hypothèse mesurable

Un modèle simple associe la consommation au nombre de bits à un d'une valeur intermédiaire : son poids de Hamming. Ainsi, le poids de 00101101 vaut quatre. Un autre modèle compte les bits qui changent entre deux états : la distance de Hamming. Le meilleur modèle dépend du circuit, de ses registres et des transitions effectivement observées.

Pour la trace ii et un instant tt, écrivons :

Pi(t)=a(t)Hi+b(t)+εi(t)P_i(t)=a(t)H_i+b(t)+\varepsilon_i(t)

HiH_i est la fuite prédite, a(t)a(t) une sensibilité inconnue, b(t)b(t) un décalage et εi(t)\varepsilon_i(t) le bruit. Le modèle ne dit pas que tout le courant vient de cette valeur : il cherche une petite composante qui varie avec elle.

Si une valeur intermédiaire dépend d'une hypothèse de clé kk, on peut calculer une prédiction Hi(k)H_i(k) pour chaque entrée connue. Chaque hypothèse produit un vecteur différent. On compare ces vecteurs aux mesures réelles, instant par instant.

Ce que normalise le coefficient de Pearson

La corrélation centre les deux séries et normalise leur covariance :

ρ=i(HiH)(PiP)i(HiH)2i(PiP)2\rho = \frac{\sum_i(H_i-\overline{H})(P_i-\overline{P})} {\sqrt{\sum_i(H_i-\overline{H})^2 \sum_i(P_i-\overline{P})^2}}

Le résultat appartient à l'intervalle de 1-1 à 11 lorsque les deux variances sont non nulles. Un gain d'amplification positif ou un décalage constant n'en change pas la valeur. Un signe négatif peut être pertinent si le montage inverse la relation mesurée.

Dans le modèle P=aH+εP=aH+\varepsilon, avec bruit indépendant, centré et de variance σε2\sigma_\varepsilon^2, on obtient :

ρ=aσHa2σH2+σε2|\rho|=\frac{|a|\sigma_H} {\sqrt{a^2\sigma_H^2+\sigma_\varepsilon^2}}

Avec a=1a=1, σH=1\sigma_H=1 et σε=2\sigma_\varepsilon=2, la corrélation théorique vaut environ 0,4470{,}447. Un pic inférieur à un n'invalide donc pas automatiquement l'hypothèse. La valeur attendue dépend du rapport signal sur bruit et du modèle.

Le bruit réduit la corrélation attendueLe bruit réduit la corrélation attendue000.2510.520.75314Modèle théoriqueÉcart-type du bruitCorrélation absolue
Modèle synthétique avec a = 1 et variance de H égale à 1. La courbe ne correspond pas à des traces mesurées sur un composant.

Fabriquer un témoin avant de traiter un secret

On peut tester la chaîne statistique sans aucun chiffrement. Générons des octets aléatoires, calculons leurs poids de Hamming, puis ajoutons du bruit. Le coefficient devrait se rapprocher de la valeur théorique correspondant à la variance de ces poids.

import numpy as np
 
rng = np.random.default_rng(42)
values = rng.integers(0, 256, size=5000)
h = np.array([int(v).bit_count() for v in values], dtype=float)
noise = rng.normal(0, 2, size=len(h))
p = h + noise
measured = np.corrcoef(h, p)[0, 1]
expected = np.sqrt(h.var() / (h.var() + 4))
print(measured, expected)  # proches, sans être exactement égaux

Cette expérience vérifie le centrage, les dimensions et le sens de la comparaison. Elle ne démontre pas qu'un poids de Hamming convient au composant réel. Une mesure réelle peut avoir des déclenchements décalés, des filtres analogiques et des opérations simultanées qui brouillent le modèle.

Le plus grand pic est parfois un accident

Comparer beaucoup d'hypothèses sur beaucoup d'instants revient à multiplier les occasions de trouver une corrélation fortuite. Le maximum sera rarement nul, même avec de mauvaises hypothèses. Choisir ensuite l'instant et annoncer ce maximum comme une preuve réutilise les mêmes données pour sélectionner et valider.

Une démarche plus solide réserve des traces indépendantes. On sélectionne l'hypothèse et la fenêtre sur un premier lot, puis on vérifie leur comportement sur un second. Mélanger aléatoirement l'association entre entrées et traces fournit aussi un témoin : la relation attendue devrait disparaître.

L'alignement mérite une attention particulière. Si l'opération glisse de quelques échantillons d'une trace à l'autre, comparer la même colonne temporelle peut comparer des opérations différentes. Un résultat faible peut donc signaler une acquisition mal alignée plutôt qu'une absence de fuite.

Ce qu’une absence de pic permet de conclure

Elle permet de dire que cette méthode, ce modèle, cette acquisition et ce volume de données n'ont pas révélé la relation recherchée. Elle ne constitue pas une preuve générale d'absence de fuite. Le masquage, par exemple, vise à empêcher qu'une observation simple dépende directement du secret, mais son évaluation exige des modèles et des tests adaptés.

Le réflexe utile est de garder une séparation nette entre trace mesurée, modèle supposé et conclusion statistique. C'est cette discipline qui transforme un graphique impressionnant en résultat reproductible.

← Tous les billets