# Attaque par faute

En cryptanalyse, les attaques par faute sont une famille de techniques qui consistent à produire volontairement des erreurs dans le cryptosystème. Ces attaques peuvent porter sur des composants matériels (cryptoprocesseur) ou logiciels. Elles ont pour but de provoquer un comportement inhabituel des opérations cryptographiques dans le but d'en extraire des informations secrètes (comme une clé de chiffrement). Une attaque par faute peut être couplée à d'autres méthodes comme l'analyse de la consommation ou une attaque temporelle.
Les attaques sont possibles sous l'hypothèse que l'attaquant peut affecter l'état interne du système en écrivant des valeurs par exemple en mémoire ou sur un bus informatique.

## Attaque sur RSA

Un exemple classique d'attaque par faute concerne RSA et en particulier le produit des deux nombres premiers ($p$, $q$) qui composent en partie la clé (le secret, donc) du système. Le principe est de faire en sorte qu'un de ces deux nombres soit modifié juste avant leur produit $p\times q$. Il est en effet très difficile de retrouver $p$ ou $q$ en fonction de $n=p\times q$. Or, si on arrive à transformer $p$ en $p'$ (non premier), on peut retrouver beaucoup plus facilement $q$ en décomposant en nombres premiers $n=(a0\times ...\times an)\times q$ avec $p'=(a0\times ...\times an)$ connu.

## Attaque par fautes impossibles

Le principe est de réussir à obtenir des états normalement impossibles. Ce type d'attaque a été utilisée contre le chiffrement de flot RC4. En 1994, Finney a montré que certains états étaient impossibles. L'attaque consiste à introduire une erreur dans le tableau des permutations pour tomber dans cette impossibilité et obtenir en sortie l'état interne complet du chiffrement.

## Attaque par corruption/perturbation
### Glitch Attack

L'idée est de procéder à une perturbation au niveau de l'alimentation électrique du système, afin de provoquer une erreur pouvant révéler des informations sur le système cryptographique. Il peut aussi s'agir d'une modification de la fréquence de l'horloge faite directement sur le composant ou induite par logiciel.
Le genre d'effet qu'une telle attaque peut produire est la non-exécution (ou bien une exécution erronée) d'une instruction dans un algorithme d'authentification, souvent due à une violation des contraintes temporelles de propagation des signaux électriques.

### Injection de faute

L'attaque par injection de faute consiste à perturber les transistors responsables des activités de chiffrement par une impulsion électromagnétique. Le comportement de la puce est alors scruté pour observer les conséquences de cette perturbation. Si ces conséquences sont variables, on peut procéder à une analyse statistique ou par machine learning pour remonter potentiellement jusqu'à la clef de chiffrement de la puce.
L'injection de faute consiste à utiliser une sonde électromagnétique reliée à un pulseur ou un laser générant une perturbation de l'ordre du temps de cycle du processeur (la nanoseconde). L'énergie transférée peut endommager certains composants de la puce, aussi la tension du pulseur (quelques centaines de volts) et le positionnement de la sonde doivent être finement calibrés. Pour plus de précision, les puces sont souvent décapsulées (érodées chimiquement pour mettre le silicium à nu).

## Attaque sur AES

En ce qui concerne l'algorithme de chiffrement symétrique AES (Advanced Encryption Standard), une attaque par faute peut être utilisée pour retrouver la clé secrète. En injectant une faute dans l'état intermédiaire (M9) de l'algorithme AES, un attaquant peut utiliser une attaque différentielle pour obtenir des informations sur la clé. Par exemple, en modifiant un octet de M9, l'attaquant peut déduire des parties de la clé en observant les différences dans les sorties chiffrées.
Dans le contexte de l'algorithme de chiffrement symétrique AES (Advanced Encryption Standard), l'état intermédiaire M9 fait référence à l'état du bloc de données chiffrées après l'application des opérations du 9ème tour, juste avant l'application de la clé de tour du 10ème tour (K10). L'AES fonctionne en appliquant une série de transformations (appelées "tours" ou "rounds") à un bloc de 16 octets (appelé "state" ou "état") en utilisant une clé de chiffrement. Chaque tour consiste en plusieurs opérations : SubBytes, ShiftRows, MixColumns, et AddRoundKey. À la fin de chaque tour, l'état du bloc de données est modifié par ces opérations.
Cet état intermédiaire est crucial pour les attaques par faute, car en injectant une faute à ce stade, un attaquant peut observer les différences dans les sorties chiffrées et potentiellement déduire des informations sur la clé secrète utilisée dans l'algorithme. M9 représente une cible stratégique pour les attaques visant à compromettre la sécurité de l'algorithme.
Ces attaques peuvent être répétées avec différents textes pour affiner les résultats et retrouver la clé complète. Cela souligne la vulnérabilité potentielle de l'AES face à des attaques par faute, malgré sa robustesse théorique. Bien que l'AES soit un algorithme de chiffrement très sécurisé, les attaques par faute représentent une menace sérieuse, surtout pour les systèmes accessibles physiquement par les attaquants. Des mesures de protection, telles que la redondance et les techniques de Control Flow Integrity (CFI), sont nécessaires pour atténuer ces risques.