# Sécurité matérielle des cartes à puce

La sécurité matérielle des cartes à puce et des autres microcontrôleurs est l'un des éléments clefs de la sécurité des informations sensibles qu'ils manipulent. La littérature scientifique a produit un grand nombre de publications visant à étudier et à renforcer la sécurité des cartes à puce. L'étude des vulnérabilités est un préalable indispensable au renforcement des garanties de sécurité de ces matériels informatiques particuliers. Or parmi les sources potentielles de vulnérabilités, le matériel utilisé peut s'avérer, en lui-même, un élément prépondérant.
Trois familles de vulnérabilités matérielles sont distinguées. La première est la famille de vulnérabilités aux attaques non-invasives. Les attaques non-invasives sont les attaques qui n'entrainent pas la destruction du matériel (i.e. la carte à puce). La seconde famille est celles des vulnérabilités aux attaques invasives. Dans ce cas, l'attaque opérée permet effectivement de voler l'information, mais le matériel est détruit. Enfin, la troisième famille de vulnérabilité est celle des attaques semi-invasives. En réponse à ces problèmes de sécurité, il est possible de distinguer deux sortes de solutions, selon qu'elles reposent sur des procédés entièrement logiciels, ou qu'elles impliquent la conception et l'usage de matériels spécifiques.

## Problématique de sécurité matérielle

Les cartes à puces sont des cibles pour plusieurs raisons :
* elles sont faciles à obtenir et peu chères ; les attaquants peuvent facilement en acquérir un grand nombre pour s'entrainer ;
* elles sont portables : il est facile pour un attaquant de les soumettre à un environnement hostile en contrôlant certaines conditions physiques ;
* le succès d'une attaque peut permettre l'accès à des données particulièrement sensibles.
Les fabricants sont très conscients des enjeux et prêtent une attention particulière à la sécurité de leur produit. En pratique, une sécurité totale est inatteignable. Concepteurs et attaquants des systèmes de sécurité développent en permanence de nouvelles techniques. Les cartes à puces sont des dispositifs réalisés pour embarquer des données potentiellement critiques et sont donc destinées à être inviolables. Typiquement, un cas d'attaque sur une carte à puce consiste à déterminer la valeur d'une clé cryptographique qu'elle contient.
Il existe une taxinomie pour classer les attaquants :

### Classe 1 (étrangers intelligents)

    les membres de cette classe ont d'importantes connaissances générales mais ne disposent que d'une connaissance limitée du système technique. Par ailleurs ils n'ont accès qu'à des matériels modérément sophistiqués et ils se concentrent davantage sur la recherche de failles existantes plutôt que de chercher à en provoquer une.

### Classe 2 (initiés)

    les « initiés » ont les connaissances techniques et l'expérience acquise spécifiquement sur le matériel étudié. Ils ont potentiellement des degrés variables de compréhension des différentes parties du système mais disposent des moyens d'accès aux connaissances relatives à la plupart d'entre elles. Ils disposent de plus, généralement, d'outils sophistiqués et des matériels d'analyses.

### Classe 3 (organismes financés)

    les « organismes financés » peuvent créer des équipes de spécialistes possédant des compétences complémentaires, appuyés par d'importantes ressources financières. Ils sont capables de faire de l'analyse en profondeur du système, d'imaginer des attaques sophistiquées et utilisent les outils d'analyse les plus récents. Ils peuvent utiliser des attaquants de la classe 2 dans leurs équipes.
De même, qu'il existe différents types d'attaquants, il existe différents types d'attaques nécessitant des moyens plus ou moins importants :
| Classe d'attaque | Équipement | Coût | Chance de succès | Ordre de temps de développement | Ordre de temps d'exécution |
| Logique | PC | $1-10K | Faible | Semaines | Minutes |
| Non-invasives | PC, Oscilloscope | $10-100K | Moyenne | Mois | Heures |
| Invasives | PC, Station d'analyse, SEM, FIB, Microscope, Laboratoire chimique, etc. | $100K-1M | Élevée | Mois | Jours |

## Attaques non-invasives

Les attaques non-invasives consistent en l'analyse d'informations provenant de la carte sans affecter son intégrité. L'objectif de cette section est de décrire différents types d'attaques non-invasives : il peut s'agir soit d'attaque passive ou d'attaque active. Les attaques passives, aussi appelées attaques par canal auxiliaire (side-channel attacks) ne nécessitent aucune interaction avec le matériel attaqué mais consistent en l'observation des signaux et/ou des émissions électromagnétiques. Il s'agit par exemple des attaques par analyse de la puissance consommée ou par analyse de temps. Les attaques actives, comme par brute-force ou "glitch", nécessitent en revanche de modifier certains signaux comme par exemple la consommation de la carte.

### Attaque par analyse de temps
#### Principe

Apparu pour la première fois dans la littérature scientifique en 1998, ce type d'attaque consiste à analyser le temps que prennent certaines étapes d'un algorithme cryptographique afin de récupérer des informations de celui-ci.
De nombreux algorithmes cryptographiques ont été jugés vulnérables à ce type d'attaques.
Le fondement de cette attaque repose sur le fait que, à des fins d'optimisation de l'implémentation logicielle, certaines opérations d'algorithmes cryptographiques s'exécutent en un temps non-constant. Ces optimisations consistent par exemple, en l'évitement d'opération inutiles ou l'utilisation de mémoire cache$^,$. Les temps n'étant pas constants, pour mener cette attaque, l'attaquant a besoin de recueillir un ensemble de messages ainsi que leur délai de traitement (le délai entre la requête et la réponse par exemple).
Une fois que l'attaquant a obtenu un ensemble suffisant de messages, l'analyse précise du temps requis pour effectuer certaines opérations sur une clé privée permet de retrouver des informations comme des exposants de l'algorithme Diffie-Hellman, des facteurs d'une clé RSA ou de casser d'autres crypto-systèmes. Contre un système vulnérable, ce type d'attaque est très intéressant du point de vue du temps de calcul et ne nécessite qu'une connaissance de l'algorithme de cryptage.

#### Exemple algorithmique : les micro-contrôleurs à mot de passe

Cet exemple d'attaque est celui donné par S. Skorobogatov dans sa thèse dédiée aux attaques semi-invasives.
Les attaques par analyse de temps peuvent s'appliquer aux micro-contrôleurs dont la sécurité est basée sur des mots de passe ou pour accéder à des systèmes de contrôle qui utilisent des cartes ou des clés avec un numéro de série fixe comme les Dallas iButton.
Une erreur commune dans ce type de systèmes est la manière dont le numéro de série de la clé entrée est vérifié dans la base de données.
Très souvent, les systèmes comparent chaque octet de la clé avec une entrée dans la base de données et s'arrêtent dès qu'une différence est trouvée pour passer à l'entrée suivante de la base de données jusqu'à la fin de celle-ci.
De cette manière, l'attaquant peut mesurer la durée entre l'entrée de la dernière clé et la demande d'une autre clé et découvrir le nombre de correspondances trouvées. Après un nombre d'essais relativement faible, l'attaquant sera en mesure de trouver l'une des clés correspondantes.

#### Exemple cryptanalytique : analyse cryptographique d'un exponentiateur modulaire simple

Cet exemple d'attaque est celui donné par Kocher lorsqu'il a énoncé le principe de l'attaque. Les opérations sur les clés privées effectuées par les algorithmes RSA lors d'un schéma d'échange Diffie-Hellman consistent essentiellement à effectuer des opérations du type :
$R=y^{2}{\bmod {n}}\;$
Où n est public et où y peut être découvert par une écoute clandestine. Le but de l'attaquant étant de trouver x, la clé secrète. Pour que l'attaque fonctionne, l'attaquant nécessite que la victime calcule $y^{x}{\bmod {n}}$ pour plusieurs valeurs de y où y, n et le temps de calcul sont connus de l'attaquant. Ces informations peuvent être obtenues par l'écoute clandestine passive d'un protocole interactif étant donné que l'attaquant peut alors enregistrer les messages reçus par la victime et mesurer le temps nécessaire pour répondre à chaque y.
L'attaque peut être adaptée pour fonctionner avec virtuellement n'importe quelle implémentation qui ne fonctionne pas en un temps constant, mais est présentée ici en utilisant l'algorithme exponentiateur modulaire simple détaillé ci-dessous.
L'attaque permet à un attaquant connaissant les bits d'exposant allant de 0 à (b-1) de trouver b. Pour ce faire, il suffit de démarrer avec b ayant une valeur de 0, et de répéter l'attaque jusqu'à une connaissance complète de l'exposant.
Étant donné que les b premiers bits de l'exposant sont connus, l'attaquant peut calculer les b premières itérations de la boucle For pour trouver la valeur de $s_{b}$. L'itération suivante nécessite le premier bit inconnu de l'exposant. Si le bit a une valeur de 1, $R_{b}=(s_{b}-y)modn$ sera calculé, sinon l'opération sera ignorée.
Supposons que le système cible utilise une fonction de multiplication modulaire qui est normalement très rapide, mais qui dans certains cas, prend beaucoup plus de temps qu'une exponentiation modulaire complète. Pour quelques valeurs de $s_{b}$ et y, le temps de calcul de $R_{b}=(s_{b}-y)\mod {n}$ sera très long, et en utilisant sa connaissance du système cible, l'attaquant peut déterminer quelles sont ces valeurs.
Si le temps total de l'exponentiation modulaire est rapide alors que $R_{b}=(s_{b}-y)modn$ est lent, le bit d'exposant b doit être zéro. À l'inverse, si une opération $R_{b}=(s_{b}-y)modn$ lente conduit toujours à une exponentiation modulaire lente, le bit d'exposant est probablement à 1.
Une fois le bit d'exposant b connu, l'attaquant peut vérifier que le temps total nécessaire à l'opération est lent chaque fois que $s_{b+1}$ = $R_{b}^{2}{\bmod {n}}$ est attendu comme lent. Le même lot de mesures de temps peut être réutilisé pour trouver les bits suivants de l'exposant.

### Attaque par force brute
#### Principe

En cryptographie, l'attaque par force brute peut se définir comme l'essai méthodique d'un grand nombre de clés afin de trouver la clé d'un système. En général, cette attaque est effectuée par une ou plusieurs machines, suivant un schéma défini et surveillant un éventuel succès.
Si elle s'applique en cryptographie, l'attaque par force brute peut également s'appliquer au matériel semi-conducteur. En effet, l'attaque par force brute peut par exemple s'appliquer à des architectures matérielles implémentées en un ASIC ou un CPLD. Dans ce cas de figure, l'attaquant essaye d'appliquer toutes les combinaisons logiques possibles en entrée du matériel et observe les sorties générées.
Une autre application possible de la force brute consiste à appliquer un voltage élevé (normalement le double de l'alimentation) aux broches de la puce et de vérifier si l'une d'elles a pour fonction de, par exemple, placer le matériel en mode test ou programmation. Dans les faits, ce genre de broche peut être rapidement trouvées à l'aide du multimètre digital car elles ne possèdent par de diode de protection sur l'alimentation.

#### Exemple cryptographique : la protection par mot de passe des micro-contrôleurs de la famille MSP430

Cet exemple d'attaque est celui donné par S. Skorobogatov dans sa thèse dédiée aux attaques semi-invasives.
Dans le schéma de protection des mots de passe utilisé dans la micro-contrôleurs de la famille MSP430 256 bits sont utilisés pour mémoriser le mot de passe, ce qui pourrait être suffisant pour se prémunir d'une attaque par force brute.
Cela dit, l'espace utilisé pour mémoriser le mot de passe est alloué aux mêmes adresses mémoire que les vecteurs d'interruption du processeur. Premièrement, cela réduit le domaine de recherche, étant donné que les vecteurs pointent toujours vers les mêmes adresses de la mémoire. Deuxièmement, quand le logiciel est mis à jour, seule une petite partie du mot de passe est mise à jour étant donné que la majorité des sous-routines d'interruption pointées par les vecteurs resteront probablement à la même adresse. Tout cela ayant pour résultat que si l'attaquant a connaissance d'un des mots de passe précédents, il peut facilement effectuer une recherche systématique et trouver le mot de passe en un temps raisonnable.

### Attaque par analyse de consommation
#### Principe général

L'attaque par "Analyse de consommation" consiste en l'étude de la consommation électrique de la carte à puce.
Les composants électroniques consomment de l'énergie durant leurs opérations. Le total de l'énergie consommée par une puce est très dépendant du processus en cours d'exécution. La mesure de la consommation électrique peut donc révéler des informations sur les opérations en cours. Pour mesurer la consommation du circuit, une petite résistance (50 ohm par exemple) est insérée en série avec l'arrivée électrique ou avec la terre. La différence de voltage à travers la résistance divisée par la résistance donne le courant.
Il existe deux principaux types d'attaques basés sur l'analyse de consommation de la carte à puce : les attaques par analyse de consommation simple, et les attaques par analyse de consommation différentielle. Les secondes sont généralement plus puissantes que les premières car elles ne nécessitent que peu d'informations pour être effectives.

#### Analyse de consommation simple (SPA)

L'analyse de puissance simple consiste en une observation directe de la consommation électrique durant des opérations de cryptages ou d'autres opérations sensibles de sécurité. Une attaque SPA peut révéler des informations aussi bien sur l'opération en cours d'exécution que sur les données traitées. Si un attaquant connaît l'algorithme cryptographique utilisé (et plus précisément son implémentation sur le matériel analysé), il peut facilement obtenir certains bits d'informations en observant les séquences d'instructions CPU, comme les boucles et les branchements conditionnels.
Une trace se réfère à un ensemble de mesures de consommation d'énergie relevées lors d'une opération de chiffrement. Par exemple, une opération de 1 milliseconde échantillonnés à 5 MHz donne une trace contenant 5000 points. La figure ci-contre montre une trace issue d'une carte à puce typique alors qu'elle effectue une opération de DES. Notez que le 16 tours DES sont clairement visibles.

#### Analyse de consommation différentielle (DPA)

Alors que les attaques de type SPA utilisent principalement l'inspection visuelle pour identifier les variations de consommation pertinentes, les attaques différentielles utilisent l'analyse statistiques et des techniques de correction d'erreur pour extraire les informations relatives aux clés secrètes.
L'attaque par analyse de consommation différentielle, inventée par P. Kocher et al. est plus puissante qu'une attaque SPA, car elle nécessite moins d'informations sur l'implémentation de l'algorithme de la part de l'attaquant. Par ailleurs, cette technique gagne en performance par l'utilisation d'analyses statistiques pour aider à retrouver des informations des canaux auxiliaires.
La mise en œuvre d'une attaque DPA implique deux phases :
* la collection des données ;
* l'analyse des données.

### Analyse électromagnétique (EMA)
#### Principe

Une puce peut laisser filtrer des informations de différentes façons. Les radiations électromagnétiques peuvent être l'une d'entre elles.
Étant donné que les transistors génèrent, lors de leur fonctionnement, des émissions électromagnétiques, il est donc possible d'effectuer une attaque par analyse des rayonnements électromagnétiques permettant d'obtenir des résultats similaires à une attaque par analyse de la puissance$^,$.
Les cartes à puces sont principalement concernées par ce type d'attaques car, si elles sont protégées contre beaucoup de types d'attaques non invasives, elles ne peuvent détecter du matériel d'écoute. De plus, celles-ci émettent beaucoup d'informations car les accès mémoire sont fréquents.
Dans un processeur synchrone, les modifications liées à l'évolution de l'horloge caractérisent le système. Les transferts de données sur le bus ont une consommation proportionnelle au nombre de bits ayant changé entre deux cycles. De ce fait, l'analyse électromagnétique est très fortement dépendante de l'architecture de la puce.
Si la signature spectrale est dépendante de l'architecture, certains comportements sont identiques d'un processeur à un autre. Un accès mémoire par exemple active une pompe de charge qui a pour effet de produire un pic spécifique dans le spectre électromagnétique et directement lié au contrôle de l'oscillateur.

#### Exemple de mise en pratique

La présente section détaille un exemple de mise en pratique réalisée par Jean-Jacques Quisquater et Davide Samyde.
Pour ce faire, un capteur sensible aux champs électromagnétiques a été placé près du processeur, sous la carte à puce. Dans le cadre de cette expérience, le capteur était une simple bobine plate, de cette manière, les variations du champ électromagnétique induisent un courant aux extrémités. Ce courant trahit directement les radiations électromagnétiques émises par la puce.
Le rayonnement électromagnétique peut alors être décomposé en deux composantes primaires :
* un champ électrique ;
* un champ magnétique.
Le champ électrique échoue pour les basses fréquences (moins de 10 MHz) mais transporte des informations différentes de celles transmises par le champ magnétique. De 10 à 80Mhz, la composante magnétique n'est pas filtrée par les fils de liaison.

##### Mise en place du système

Une fausse carte est insérée dans le lecteur comme une vraie le serait. Cette copie d'une carte, dont les contacts se trouvent au même endroit que ceux d'une vraie carte, peut faire ressortir les signaux de commande. De cette manière, les signaux sont transmis au lecteur via un connecteur de carte à puce traditionnel. La carte dont les radiations doivent être mesurées est, elle, placée dans un second lecteur contenant, lui, des bobines plates. Sous les connecteurs de la carte réelle, trois bobines sont présentes. Deux d'entre elles se trouvent 3 millimètres sous le micro module et sont positionnées comme spécifié dans les normes ISO et AFNOR, et la plus large se trouve en position centrale. De cette manière, les radiations émises par la carte doivent croiser l'une des 3 bobines. Le diamètre total des bobines n'excède pas 2 centimètres. Sur le côté du lecteur, on trouve un connecteur permettant de relier un analyseur de spectre ou un oscilloscope. Obtenue avec ce dispositif, une simple mesure avec de l'analyseur de spectre permet de percevoir un ordre de grandeur du champ rayonné par la puce.

### Attaques par perturbation ("glitch")

Le principe d'une attaque "glitch", est de générer délibérément des malfonctions afin de changer l'état de certains composants. Le but est généralement de remplacer une instruction machine critique avec une autre. Les attaques "glitch" peuvent aussi être utilisées afin de corrompre les données transférées entre les registres et la mémoire.
Si on effectue une attaque par perturbation sur l'horloge (une impulsion d'horloge plus lente) ou sur la puissance électrique délivrée (une variation rapide du voltage), cela n'affectera que certains transistors dans la puce. En variant les paramètres, le CPU peut être amené à exécuter un nombre complètement différent d'instructions, incluant parfois des instructions qui ne sont même pas supportées par le micro-code. Par ailleurs, si on ne sait pas à l'avance quelle variation peut causer quelle mauvaise instruction, il est particulièrement simple d'effectuer une recherche exhaustive. Une procédure que l'on retrouve couramment dans les crypto-processeurs consiste en une boucle qui écrit le contenu d'une mémoire limitée sur un port série :
Il est possible de chercher une perturbation qui augmente le compteur du programme normalement, mais soit transforme le saut conditionnel de la ligne 3, ou la variable de décrémentation de la ligne 6 en autre chose.
Trouver la bonne perturbation nécessite de répéter l'opération un grand nombre de fois. Tous les signaux envoyés doivent arriver exactement au même moment après le reset pour que les tests fonctionnent. Un grand nombre de perturbations peut être testé pour chaque cycle d'horloge, alors qu'une seule peut générer l'envoi d'un bit supplémentaire sur le port série. Le fait de répéter cette perturbation, une fois celle-ci trouvée, va permettre de boucler dans la mémoire qui, avec un peu de chance, inclura la clé que l'on cherche.
Généralement, les perturbations sont effectuées au niveau de la puissance électrique ou de l'horloge, cependant il peut également s'agir d'un champ électrique externe, ou encore d'une pulsation électromagnétique.

### Rémanence des données

Les processeurs de sécurité stockent habituellement leur clé matérielle dans une RAM statique, qui n'est plus alimentée si le dispositif est violé. Il est largement connu qu'à une température de -20 °C le contenu d'une SRAM peut être "gelé" ; cependant, beaucoup de dispositifs considèrent une température en dessous de cette limite comme une condition de violation du matériel. Des expériences ont été effectuées pour établir la relation entre la température et la conservation des données dans des mémoires SRAM modernes.
Skorobogatov montre dans sa thèse que contrairement à ce qui est communément admis, de nombreuses puces retiennent les données pendant une période de temps relativement longue à une température supérieure à -20 °C. La température à laquelle 80 % des données restent en mémoire pendant une minute varie énormément entre les puces. Certaines nécessitent d'être refroidies à -50 °C, alors que d'autres conservent leurs données pendant cette période à température ambiante. La durée de rémanence des données peut être réduite de manière importante si on connecte la prise Vcc à la terre au lieu de la laisser juste déconnectée.

## Attaques Invasives

Les attaques invasives sont généralement les attaques les plus coûteuses, tant sur le plan du temps que des matériels. Elles consistent à pénétrer physiquement le système afin d'opérer des observations directes ou encore des modifications. Il s'agit d'attaques extrêmement performantes, qui présentent cependant l'inconvénient majeur d'être destructives : une fois l'attaque effectuée, le matériel est modifié de manière irréversible.

### Préparation de l'attaque

Les attaques invasives nécessitent un accès physique aux composants internes à la carte pour être réalisées. Il est donc nécessaire, avant de pouvoir réaliser une attaque de ce type, de révéler les circuits de la puce. Le processus de "préparation" d'une attaque invasive ne nécessite que peu de matériel et d'expérience, et peut donc être effectué par n'importe qui, pour peu qu'il dispose du matériel nécessaire. En outre, il est bien entendu que ces opérations nécessitant l'utilisation d'acide fortement concentré requièrent de prendre certaines précautions : utilisation d'une hotte ventilée, de lunettes de protections, etc.

#### Décapsulation

La première opération consiste à enlever la puce de son emballage. Pour cela, on chauffe la carte en plastique jusqu'à ce qu'elle devienne flexible : la colle ramollit et le module de la puce peut alors être enlevé par pliage de la carte. Il faut ensuite réaliser un creux par érosion mécanique de la puce, afin que l'acide n'agisse que sur une zone bien délimitée.
L'acide utilisé pour dissoudre le package est de l'acide nitrique fumant soit une solution de NO$_2$ dans de l'acide nitrique concentré HNO$_3$ (> 95 %) . Il s'agit d'un puissant agent oxydant qui dissout rapidement le plastique et agit aussi sur le cuivre et l'argent présent dans les circuits de la puce. Parfois un mélange à base d'acide nitrique fumant et d'acide sulfurique H$_2$SO$_4$ est utilisé pour accélérer la réaction avec certains types de plastique. La solution acide est normalement appliquée en petite quantité avec une pipette dans le trou formé dans la puce qui a été préchauffée à environ 60 °C. Après 10 à 30 secondes la puce est nettoyée à l'acétone afin d'enlever les produits de la réaction. Le processus est ensuite répété autant que nécessaire jusqu'à ce que la résine d'epoxy noire qui renferme la puce de silicium soit dissoute. Par ailleurs, il est possible de chauffer l'acide pour accélérer la réaction.
En outre, il est important de réaliser cette opération dans un environnement très sec, car la présence d'eau pourrait corroder les circuits en aluminium exposés.
Les résidus d'acide peuvent ensuite être enlevés de la surface de la puce par un bain à ultrason. Pour cela, la puce est placée dans un bac avec de l'acétone et ensuite soumise à un traitement à ultrason pendant 1 à 3 minutes.
La puce est donc maintenant nettoyée et pleinement opérationnelle.

#### Deprocessing

Le processus à l'opposé de la fabrication de la puce est appelé "deprocessing". Une puce CMOS standard possède de nombreuses couches. La couche la plus profonde du substrat constitue le transistor. Une couche d'oxyde isole la porte de la zone active des transistors. Une couche de polysilicium en haut de celle-ci forme les portes et les interconnexions. Une couche intercalaire d'oxyde isole les couches conductrices. Les couches métalliques, généralement faites d'aluminium (Al), forment les circuits et sont connectées avec les autres couches par des broches (Al, W Ti). Enfin, une couche de passivation faite d'oxyde de silicium SiO$_2$ ou de nitrure protège l'ensemble de la structure de l'humidité et de l'air qui pourrait endommager la puce. Dans un emballage en plastique, la couche de passivation est recouverte d'une couche de polymère, habituellement polyimide, pour la protéger durant la création de l'emballage.
Il existe deux principales applications au deprocessing d'une puce. La première est d'enlever la couche de passivation, et d'exposer la couche de métal supérieure pour une attaque par microsonde. La seconde est d'accéder aux couches les plus profondes afin d'étudier la structure interne de la puce.
Il existe différentes manières de procéder : par gravure chimique, par gravure plasma, ou encore par érosion mécanique. Dans le cas de l'attaque chimique, chaque couche est enlevée avec un produit spécifique, et le procédé effectue des coupures non souhaitées.
La méthode au plasma utilise des radicaux pour créer un gaz dans une chambre spéciale. Ils réagissent avec le matériau à la surface en créant des produits volatils qui sont aspirés hors de la chambre. Seules les surfaces touchées par les ions sont enlevées, les côtés perpendiculaires à leurs chemins ne sont pas touchés.
Enfin, l'érosion manuelle est réalisée en utilisant un matériau abrasif. C'est un procédé gourmand en temps qui nécessite des machines spéciales pour maintenir une surface plane. L'avantage de cette méthode est sa capacité à enlever couche par couche et à voir les fonctionnalités dans une zone d'intérêt qui se situe dans le même plan.
Concernant les gravures au plasma ou chimique, chaque type de matériau nécessite un produit différent pour la gravure. Le tableau suivant les résume :
| Matériau de la couche | Produit utilisé pour une gravure chimique | Produit utilisé pour une gravure plasma |
| Si | HF+HNO$_3$+KOH | CF$_4$, C$_2$F$_6$, SF$_6$ |
| PolySi | HF+CH$_3$COOH+HNO$_3$ | CF$_4$, SF$_6$ |
| SiO$_2$ | HF,HF+NH$_4$OH | CF$_4$,CF$_4$+O$_2$,CHF$_3$ |
| Al | HCl,H$_2$O$_2$+H$_2$SO$_4$,HPO$_3$+HNO$_3$+CH$_3$COOH,KOH | CCl$_4$, BCL$_3$ |
| W, Ti | HF+HNO$_3$, H$_2$O$_2$+H$_2$SO$_4$,H$_2$O$_2$ | CF$_4$ |
| Si$_3$N$_4$ | HF+HNO$_3$, HPO$_3$, Nitrietch | CF$_4$ |
| Polyimide | H$_2$O$_2$,H$_2$O$_2$+H$_2$SO$_4$ | CF$_4$, CF$_4$+O$_2$ |

#### Suppression de la couche de passivation

Une fois la puce décapsulée, la couche supérieure d'interconnexion en aluminium est encore recouverte par une couche de passivation (généralement en oxyde de silice ou en nitrure), qui protège la puce de l'environnement et de la dissipation des ions. Cette couche doit être enlevée avec précaution avant que des sondes puissent établir un contact. La technique de dépassivation la plus simple consiste à utiliser un cutter laser. Correctement dosés, les flash laser enlèvent la matière de la couche de passivation. Le trou résultant dans la couche peut être suffisamment petit pour qu'un seul fil du bus soit exposé. Cela évite des contacts accidentels avec les fils voisins et le trou stabilise également la position de la sonde, la rendant moins sensibles aux vibrations et aux variations de température.

### Rétro-ingénierie

La rétro-ingénierie consiste à analyser et comprendre la structure et la fonction des dispositifs internes à un système. Dans le cas d'une attaque sur une carte à puce, il s'agit de déterminer l'architecture de la puce. Celle-ci a été fabriquée en superposant des couches de composants, il est donc nécessaire d'enlever les couches une par une et de les photographier afin de pouvoir déterminer la structure générale.
Les structures basiques comme les circuits de données et d'adresse, peuvent être identifiées rapidement en étudiant les schémas de connexions et en traçant les lignes qui relient de manière visible les différents modules (ROM, RAM, EEPROM, ALU, décodeur d'instruction, etc). Tous les modules sont généralement connectés au bus principal par des bus facilement reconnaissables. L'attaquant doit connaître les architectures des circuits intégrés, mais cette information se retrouve facilement dans de nombreux ouvrages.

### Micro-sondage ("microprobing")

Un autre type d'attaque invasive consiste à utiliser des micro-sondes pour se connecter aux circuits internes de la puce afin de recevoir certaines données, ou encore d'en envoyer.

#### Station de micro-sondage

Une attaque de ce type nécessite beaucoup de matériel, typiquement : un microscope, des micro-manipulateurs, différents types de sondes, un dispositif de test. Le microscope doit avoir 3-4 objectifs pour pouvoir obtenir différents grossissements et profondeurs de champs. Un faible grossissement avec un champ important est utilisé pour une localisation globale de la sonde, alors qu'un fort grossissement et utilisé pour placer précisément la pointe sur le fil conducteur. La puce est normalement placée sur un dispositif de test qui est contrôlé par ordinateur.
Des micro-contrôleurs sont installés sur une plateforme autour de la platine de test. Ils permettent de bouger la pointe d'une sonde avec une précision de l'ordre du micron. La sonde peut soit être passive ou active.
Une sonde passive peut être utilisée soit pour détecter un signal, soit pour en injecter un, mais elle doit être reliée à un oscilloscope ce qui lui conférence une impédance faible et une haute capacité électrique. On ne peut donc pas utiliser une sonde passive sur les circuits internes la puce, excepté les bus qui sont généralement bufferisés. Une autre application de ces sondes consiste à les relier aux plots de connexion de la puce décapsulée.
Une sonde active possède un transistor à effet de champ près de la pointe. Elle offre une large bande passante avec peu de capacité électrique et une forte résistance.
Les pointes des sondes sont fabriquées en fil de tungstène taillés à un diamètre inférieur à 0.1 µm pour la fin de la pointe, afin de pouvoir être connectées sur de très petits circuits.

#### Description de l'attaque

Généralement pour l'extraction d'informations, comme le contenu de la mémoire ou la clé secrète, un micro-sondage est effectué sur le bus de donnée du CPU. Il est difficile d'observer le bus entier à un instant donné et certaines techniques sont utilisées pour surmonter ce problème. Par exemple, la même transaction ou lecture de mémoire peut être répété plusieurs fois et deux à quatre sondes sont utilisés pour observer les signaux qui sont combinés pour offrir une trace complète du bus.

#### Sonde Ionique Focalisée (FIB)

Pour les semi-conducteurs de 0.5 µm, ou des technologies encore plus fines, des outils plus sophistiqués sont nécessaires pour établir des contacts sur les fils de connexion. L'outil idéal pour cela est une sonde ionique focalisée (FIB). Elle peut être utilisée non seulement pour créer des points de sondage, mais également pour afficher et réparer, voir créer de nouveaux circuits.
Un FIB consiste en une chambre à vide avec un canon à particules comparable à un microscope électronique à balayage, à l'exception près qu'au lieu des électrons, des ions de gallium sont accélérés et envoyés à partir d'une cathode en métal liquide dans un faisceau qui peut être de 5 à 10 nm de diamètre. Les FIB peuvent afficher des images des échantillons avec une résolution de 10 nm. En augmentant le faisceau, une puce peut être enlevée avec une résolution identique. Il est également possible d'obtenir des gravures plus profondes en injectant un gaz comme l'iode par une aiguille qui est disposée à environ 0.5 mm de la surface de la puce. Le gaz est absorbé par la surface et réagit avec le matériel à enlever pour former un composé volatil qui peut être pompé. En utilisant cette technique, des trous peuvent être creusés pour permettre l'accès aux couches plus profondes métalliques, sans endommager les structures alentour. Par ailleurs, en injectant un gaz organométallique à base de platine qui se décompose, sur la surface de la puce par le faisceau, le platine se redépose pour établir de nouveaux contacts. En utilisant d'autres gaz, même des isolants peuvent être déposés pour établir des contacts entre la surface et la couche métallique, sans contact avec les couches de protection.
Le technicien utilisant le FIB peut naviguer en aveugle à la surface de la puce avec une précision inférieure à 0.1 µm même si la puce a été planarisée et ne possède aucune structure reconnaissable. Les puces peuvent également être polies par la face arrière jusqu'à une épaisseur de 10-20 µm. L'utilisation de l'imagerie infra-rouge permet de localiser individuellement les transistors et d'établir des contacts avec à travers le silicium.
Enfin, bien que les FIB soient extrêmement chères, il est relativement facile pour un attaquant de louer l'utilisation d'une station dans différents laboratoires ou entreprises.

### Instantanée de la mémoire

Une réaction chimique avec la couche de métal supérieure d'une puce décapsulée peut être utilisée pour identifier les lignes connectées à l'alimentation. À partir de cette information, il est possible d'obtenir le contenu des cellules de mémoire, comme la clé secrète d'un système cryptographique.

#### Architecture d'une cellule de mémoire

Une cellule standard de mémoire statique est constituée de six transistors. Quatre d'entre eux construisent une fonction non. Chaque sortie des fonctions est connectée à l'entrée d'une autre. Les fonctions de lecture et d'écriture des cellules sont réalisées par les deux transistors restants. Pour réaliser une valeur particulière dans une cellule, la valeur est placée dans un bus, son inverse dans le bus inverse. La programmation se fait en choisissant le bus. Comme le transmetteur du circuit d'écriture est plus puissant que les transistors dans la cellule, l'ancien état est remplacé par celui inséré dans le bus. Des amplificateurs sont utilisés pour lire une cellule. Ils reconnaissent l'état d'une cellule, par le bus sélectionné.
Si la cellule contient un 1, le bus est connecté au pôle positif de l'alimentation (VCC) et le bus inverse à la terre (GND) ; inversement si la cellule contient 0. Sur certaines puces, les lignes de bus contenant les valeurs et l'inverse de la cellule, sont réalisés sur la couche métallique supérieure, ainsi donc que les lignes indiquant si la cellule contient 0 ou 1. Si la couche métallique est exposée, on peut donc obtenir l'information par électrolyse.

#### Description de l'attaque

Une électrolyse est réalisée pour attaquer le dispositif. Comme la distance entre les lignes métalliques, qui agiront comme des anodes et cathodes, est très petite, un liquide faiblement conducteur est nécessaire. Cela réduira les dégâts causés par l'écoulement du liquide. De l'eau pure est faiblement conductrice, c'est pourquoi de l'eau distillée est utilisée. La conductivité de l'eau courante est bien plus importante car elle contient des sels minéraux dissous et des ions libres. Par ailleurs, pour que l'électrolyse ait lieu correctement, il est nécessaire que le liquide entre en contact direct avec la surface métallique de la puce, la couche de passivation doit donc être enlevée.
Avec une petite pipette, de l'eau distillée est déposée sur la surface d'une puce alimentée. Pour éviter des interférences, l'eau ne doit pas toucher les connecteurs. En agissant ainsi, le micro-contrôleur de la puce pourra encore écrire et lire des valeurs pendant quelques minutes, après quoi des erreurs apparaîtront dans certaines cellules.
Immédiatement après que l'eau ait atteint la surface, une réaction chimique commence qui est détectable par la libération d'un gaz. Si une valeur ne change pas durant la procédure, la coloration de la cellule ne change pas, même si les lignes métalliques sont exposées à l'eau quelques secondes ou même quelques minutes. Cependant, dans les cellules dont les valeurs ont changé alors qu'elles étaient touchées par l'eau, les deux bus ont agi comme une anode et une cathode : ils présentent tous les deux la même coloration.
Si le programme effectue un calcul, il est donc possible de distinguer les cellules mémoires dont les données ont été modifiées, de celles qui sont restées statiques. En outre, le changement de couleur est un processus irréversible, une fois que la couleur d'une ligne a changé, il est impossible d'inverser le processus. L'attaque ne peut donc être effectuée qu'une seule fois.

## Attaques Semi-Invasives

Les attaques semi-invasives nécessitent d'avoir accès à la surface de la puce, donc d'effectuer un "depackaging" de la puce, mais aucune connexion directe à la surface métallique n'est nécessaire. Elles sont donc moins coûteuses que les attaques invasives, nécessitent moins de matériel, et permettent d'obtenir des résultats rapidement.

### Attaque par injection de fautes

Quand un attaquant possède un accès physique à un dispositif, il peut essayer d'introduire directement des erreurs matérielles. Il est possible, par exemple, d'extraire la clé secrète d'un dispositif en introduisant des erreurs (par exemple une signature RSA erronée) dans la puce cryptographique.
Or, l'éclairage au laser d'un transistor cible peut permettre de lui faire introduire des erreurs. Ce type d'attaque est intéressant et ne nécessite pas d'équipement laser coûteux.

#### Exemple d'attaque de RSA par injection de faute

Exemple directement inspiré de On the Importance of Eliminating Errors in Cryptographic par Boneh et al.
Considérons un système utilisant RSA pour générer des signatures de manière naïve. Soit $N=pq$ le produit de deux grands entiers premiers. Pour signer un message $x$ en utilisant RSA, le système calcule $x^{s}\;{\bmod {\;}}N$ où $s$ est un exposant secret. Le message $x$ est supposé être un entier compris entre 1 et $N$. La sécurité d'un tel système consiste en la difficulté, pour un attaquant de factoriser $N$.
La partie coûteuse du calcul d'une signature RSA, est l'exponentiation modulaire de $x$. Pour éviter ça, certaines implémentations effectuent le calcul comme suit : elles effectuent d'abord le calcul $E1=x^{s}\;{\bmod {\;}}p$ et $E2=x^{s}\;{\bmod {\;}}q$. En ayant d'abord calculé deux nombres $a,b$ tels que :
${\begin{cases}a\equiv 1{\pmod {p}}\\a\equiv 0{\pmod {q}}\end{cases}}$ et ${\begin{cases}b\equiv 0{\pmod {p}}\\b\equiv 1{\pmod {q}}\end{cases}}$
on peut calculer : $E=aE_{1}+bE_{2}\;{\bmod {\;}}N$.
L'attaque sur les signatures RSA présentées ici, consiste à obtenir les facteurs de N. Une fois que le modulus est factorisé, le système est considéré comme cassé. L'attaque est basée sur l'obtention de deux signatures du même message. La première est une signature correcte, la seconde une signature comportant une erreur.
Soit $M$ le message et $E=M^{s}\;{\bmod {\;}}N$ la signature correcte du message. Soit ${\check {E}}$ la signature erronée. Rappelons que $E=aE_{1}+bE_{2}\;{\bmod {\;}}N$ et ${\check {E}}=a{\check {E_{1}}}+b{\check {E_{2}}}\;{\bmod {\;}}N$.
Supposons que par un quelconque événement une erreur ait lieu durant le calcul de ${\check {E_{1}}}$ ou ${\check {E_{2}}}$. Pour l'exemple, supposons que l'erreur ait lieu dans ${\check {E_{1}}}$ (soit $E_{1}\neq {\check {E_{1}}}\;{\bmod {\;}}b$) et pas dans ${\check {E_{2}}}$ (soit $E_{2}={\check {E_{2}}}\;{\bmod {\;}}b$. Alors :
$\gcd(E-{\check {E}},N)=\gcd(a(E_{1}-{\check {E_{1}}}),N)=q$
et donc $N$ peut être facilement factorisable.
Pour résumer, l'utilisation d'une signature erronée et d'une correcte permet la factorisation du modulus de RSA.

### Attaque par rayonnement ultraviolet

Une attaque par rayonnement ultraviolet peut être divisée en deux phases : localiser le fusible et le réinitialiser à l'aide d'un rayon ultraviolet.

## Contre-Mesures
### Contre-mesures logicielles
#### Génération d'aléa dans l'horloge

Beaucoup de techniques d'attaques non-invasives nécessitent que l'attaquant prédise le temps que va mettre une instruction à s'exécuter. Un processeur strictement déterministe qui exécute la même instruction c cycles d'horloge après chaque reset - si on lui fournit la même entrée à chaque cycle - permet cela facilement.
Une contre-mesure évidente est d'insérer des délais aléatoires entre chaque réaction observable et chaque opération critique qui peut être la cible d'une attaque. Si le port série constitue le seul canal observable, alors quelques appels à des délais aléatoires contrôlés par un générateur matériel de bruit devrait suffire. Cependant, si les attaquants peuvent utiliser des techniques de références croisées pour déterminer en temps réel à quelle instruction correspond quelle fluctuation, presque toutes les instructions deviennent observables et peuvent être localisées, les délais ne suffiront pas alors.
Il est fortement recommandé d'introduire des temps aléatoires au niveau des cycles d'horloge. Un générateur de séquence de bits aléatoire qui agit au niveau du signal d'une horloge externe devrait être utilisé pour générer un signal interne.

#### Dispersion des informations

Cette technique est basée sur le principe bien connu du partage de secret où chaque bit du calcul original est divisé de manière probabiliste entre différentes parties de manière que chaque sous-ensemble de ces parties soit statistiquement indépendant du bit en cours d'encodage, et donc ne comporte aucune information sur ce bit. Le calcul des primitives cryptographiques s'effectue uniquement en accédant de manière aléatoires aux différentes parties à chaque moment, avec des étapes intermédiaires de calcul du partage du résultat. Répartir le bit entre différents lots partagés de manière probabiliste renforce l'incertitude de l'attaquant et le force à prendre en compte le signal de l'ensemble des points de distribution à partir desquels les lots sont accessibles.

#### Compteur d'erreur

On suppose que le nombre de fautes « naturelles » qui apparaissent dans la durée de vie d'un système est très inférieur au nombre de cryptogrammes erronés requis pour une attaque par faute. La désactivation du circuit peut être réalisée par un simple compteur qui compte le nombre d'erreurs détectées. Quand une limite prédéterminée est atteinte, le dispositif supprime la clé secrète de sa mémoire pour prévenir de nouvelles attaques. La limite du compteur peut être ajustée en fonction du système et de la durée de vie attendue du dispositif. Un des critères les plus importants pour cette méthode consiste à ce que la couverture d'erreur du code soit la plus importante possible tout en maintenant un coût matériel raisonnable.

#### Redondance des calculs

Une autre possibilité pour lutter contre les attaques par fautes consiste à vérifier les parties critiques du programme et les résultats cryptographiques. Effectuer deux fois les calculs et comparer les résultats obtenus est une manière de vérifier la validité des résultats. Il est cependant possible que la même erreur ait été injectée deux fois et ne soit pas détectée.
Il est plus fiable (lorsque c'est possible) d'effectuer le calcul des données entrantes à partir du résultat et de les comparer avec les données entrantes d'origine. Une opération inverse est généralement différent est plus difficile à manipuler dans la direction opposée. Afin de garantir le maximum de sécurité, il est important de regarder attentivement quelle partie du code est critique du point de vue de la sécurité.

### Contre-Mesures matérielles
#### Sécurité par l'obscurité

Il existe de nombreuses contre-mesures contre la rétro-ingénierie, la principale réside dans le principe de sécurité par l'obscurité : pour qu'un attaquant ait le moins d'information possible sur un système, on dissimule les informations. Dans le cas des cartes à puce, cela passe par différentes mesures.

##### Glue logique

Tout d'abord, tout le matériel électronique des cartes à puces est désormais embarqué dans une seule et unique puce, ce qui limite les possibilités de rétro-ingénierie à l'œil nu. On parle alors de glue logique : tous les composants sont regroupés, "collés" ensemble.
Cela augmente la difficulté pour un attaquant souhaitant faire de la rétro-ingénierie, mais également pour les attaques nécessitant la mise en place de sondes, ou encore la destruction d'un fusible de sécurité.

##### Démarquage des puces

Par ailleurs, une contre-mesure évidente dans le cas de circuits mettant en jeu des puces électroniques consiste à enlever les informations permettant d'identifier les puces en question, soit leur numéro de série, la référence du fabricant, etc. L'attaquant a donc moins d'informations sur lesquelles se baser pour identifier la nature du circuit à compromettre.

##### Miniaturisation

Grâce aux progrès de la miniaturisation, il est désormais possible d'agglomérer un grand nombre de transistors sur une surface extrêmement petite. Cette capacité permet aux fabricants de cartes à puces, de réaliser des puces en plusieurs couches, chaque couche contenant un certain nombre de composants différents, les couches étant interconnectées les unes aux autres. L'architecture de la puce est alors en trois dimensions, ce qui rend la tâche de rétro-ingénierie d'un attaquant beaucoup plus ardue, ainsi que toutes les attaques invasives ou même semi-invasives.

##### Mélange des circuits et de la mémoire

Une autre possibilité pour embrouiller l'attaquant consiste à mélanger les circuits, à réaliser un labyrinthe avec les différents chemins de connexions. L'attaquant aura plus de mal à comprendre quels sont les entrées et les sorties des différents modules et donc, comment fonctionne le système. Par ailleurs, il sera beaucoup plus difficile de modifier le circuit s'il est mélangé.
En outre, il est possible de disperser aléatoirement les transistors associés aux registres mémoires dans la puce de silicium. Ainsi, effectuer un instantané de la mémoire devient plus difficile pour un attaquant, et si jamais il y arrive il ne saura pas forcément dans quel ordre il doit lire les données récupérées.

#### Ajout de sondes

Les techniques d'attaques par perturbations et autres attaques par canal auxiliaire essaient toutes de changer l'environnement de la carte. La stratégie développée contre ces attaques consiste dans l'utilisation de sondes sur le voltage, la fréquence et la température des circuits. Malheureusement, des paramètres de sonde strictement définis affectent l'utilisation et peuvent causer des mauvais fonctionnements dans certains terminaux, ou sous certains climats. Par ailleurs, il n'est pas possible pour des sondes de détecter tous les signaux injectés.

#### Ajout d'une couche protectrice

L'ajout d'une couche métallique faisant office de bouclier au-dessus de la puce peut permettre de contourner la plupart des attaques invasives ou semi-invasives.