Cryptographie embarquée
La cryptologie se définit étymologiquement comme la science du secret. Elle regroupe deux disciplines liées : la cryptographie, étudiant l’écriture de messages secrets, et la cryptanalyse, visant au déchiffrement de messages secrets sans posséder la clé de chiffrement. La cryptographie est utilisée depuis l’antiquité, bien qu’elle soit restée principalement dans le domaine militaire jusqu’au milieu du vingtième siècle (STERN, 1998). A titre d’exemple, en France la cryptographie a été considérée comme une arme jusqu’à très récemment : il a fallu attendre 1999 pour que son usage soit autorisé aux particuliers. La deuxième moitié du vingtième siècle a vu l’émergence de nouveaux principes cryptographiques sur lesquels reposent les algorithmes modernes. Parmi ceux-ci, on peut notamment citer la sécurité théorique absolue (SHANNON, 1949), les protocoles d’échanges de clés (DIFFIE et HELLMAN, 1976) ou la cryptographie à clé publique (RIVEST et al., 1978). La cryptographie moderne utilise plusieurs types de briques de base qui sont utilisées dans des cryptosystèmes plus complexes. Parmi ces briques de base, on peut mentionner les fonctions de hachage, les générateurs de nombres aléatoires, les algorithmes de chiffrements dits à clé secrète (également appelés algorithmes symétriques) et ceux dits à clé publique (également appelés algorithmes asymétriques). Certains algorithmes ont acquis à la suite de concours internationaux le statut de standard (DES, AES, DSA, SHA-3), mais beaucoup d’autres algorithmes non-standardisés ont été publiés et sont couramment utilisés (RC4, RSA, MD5, SHA-1, . . . ). Néanmoins, un grand nombre d’algorithmes propriétaires dont la sécurité repose en partie sur la non-connaissance de l’algorithme par un attaquant sont encore largement utilisés.
Canaux auxiliaires et grandeurs observables
Les attaques physiques exploitent les failles dans le circuit sur lequel est implémenté un algorithme. Pour cela, elles se basent sur la mesure par un attaquant d’une grandeur relative aux données manipulées par le circuit. Dans la suite de cette thèse, on utilisera pour désigner cette grandeur les termes de grandeur observable ou de grandeur mesurable. La consommation de courant ou encore un résultat fauté après une injection de fautes peuvent par exemple être des grandeurs observables. De même, les données internes au circuit auquel l’attaquant n’a pas d’accès direct seront appelées grandeurs internes. La notion de canal auxiliaire indique l’existence d’une relation entre une grandeur interne visée par un attaquant et une grandeur observable. Cette relation n’a pas forcément une expression mathématique et peut être dépendante du circuit visé ou des conditions expérimentales dans lesquelles l’attaque est réalisée. Elle peut néanmoins être approchée à l’aide de modèles. Ces modèles sont utilisés par un attaquant pour représenter le lien entre les grandeurs observables à sa disposition et les grandeurs internes visées par l’attaque. Ensuite, une technique d’exploitation du canal auxiliaire basée sur ce modèle est utilisée afin d’extraire les grandeurs internes visées.
Rayonnements électromagnétiques
Les rayonnements électromagnétiques émis par un circuit peuvent être mesurés en champ proche. (GANDOLFI et al., 2001) et (QUISQUATER et SAMYDE, 2001) ont été les premiers articles à obtenir des résultats expérimentaux qui utilisent ce type de canal auxiliaire. La mesure des rayonnements électromagnétiques permet d’obtenir des mesures physiques plus localisées par rapport à la mesure de courant, mais cet effet localisé de l’analyse ajoute une contrainte liée au positionnement de la sonde électromagnétique. Pour définir quelles parties du circuit émettent des rayonnements électromagnétiques pouvant être utilisés pour une attaque, l’attaquant doit réaliser des cartographies spatiales en faisant varier la position de la sonde (DEHBAOUI, ORDAS et al., 2010), comme illustré sur la figure 1.2. Cette figure représente une cartographie des rayonnements électromagnétiques pour différents circuits intégrés. Elle montre également que les rayonnements mesurés sont liés à la position des blocs fonctionnels du circuit visé. L’émission de rayonnement électromagnétique est une conséquence de plusieurs phénomènes, notamment la commutation des portes logiques. Celle-ci suit la loi de Lenz-Faraday. La rapide variation du courant s’accompagne d’une variation du champ magnétique (qui entraîne elle-même une variation du champ électrique) mesurable par l’attaquant en champ proche. Pour réaliser ces mesures, la littérature scientifique propose l’utilisation de sondes électromagnétiques qui peuvent être des boucles (PEETERS et al., 2007) ou des solénoïdes (MOUNIER et al., 2012).
Préchargement d’instructions depuis la mémoire
Comme précisé précédemment, le microcontrôleur utilisé dans cette thèse peut fonctionner avec une fréquence allant jusqu’à 72 MHz. La mémoire Flash du microcontrôleur, qui est utilisée pour stocker les instructions, possède un temps de réponse de 35 ns. Ainsi, si la période d’horloge du microcontrôleur est inférieure à 35 ns (ce qui correspond à une fréquence d’environ 28 MHz), il devient impossible d’envoyer une donnée depuis la mémoire Flash sur le bus en un seul cycle d’horloge et un ou deux cycles supplémentaires deviennent nécessaires selon la fréquence du processeur. Pour éviter ainsi de sous-exploiter le processeur et pour maximiser sa vitesse de traitement des instructions, le fabricant du microcontrôleur utilisé dans cette thèse a mis en place une mémoire tampon (différente de celle présentée en 2.2.5) dont le but est de précharger des instructions depuis la mémoire Flash. Cette mémoire tampon se place donc avant le pipeline, et une fois activée celle-ci est transparente pour le programmeur. Il est en réalité composé de deux mémoires de 64 bits qui peuvent chacun lire directement 64 bits de mémoire Flash. Ces 64 bits peuvent donc correspondre au maximum à 4 instructions, qui seront chargées dans cette mémoire tampon.
|
Table des matières
Introduction générale
1 Contexte et motivations
1.1 Introduction
1.2 Principes généraux des attaques physiques
1.2.1 Cryptographie embarquée
1.2.2 Canaux auxiliaires et grandeurs observables
1.2.3 Canaux auxiliaires utilisés pour la réalisation d’attaques
1.3 Attaques par observation et contre-mesures
1.3.1 Données observables par un attaquant
1.3.2 Modèles de consommation
1.3.3 Exploitation des données obtenues
1.3.4 Rétro-ingéniérie
1.3.5 Contre-mesures
1.4 Attaques par injection de faute et contre-mesures
1.4.1 Moyens d’injection de faute
1.4.2 Modèles de fautes
1.4.3 Exploitation des données obtenues
1.4.4 Contre-mesures
1.5 Objectifs de la thèse et approche choisie
1.5.1 Objectifs
1.5.2 Approche choisie
1.6 Conclusion
2 Conception d’un banc d’injection de fautes pour processeur ARM CortexM3
2.1 Introduction
2.2 Processeur ARM Cortex-M3
2.2.1 Jeu d’instructions
2.2.2 Registres
2.2.3 Modes d’exécution
2.2.4 Exceptions matérielles
2.2.5 Pipeline et exécution des instructions
2.2.6 Mémoires d’instructions et de données
2.2.7 Bus de données et d’instructions
2.2.8 Préchargement d’instructions depuis la mémoire
2.2.9 Chaîne de compilation
2.3 Dispositif expérimental d’injection de fautes
2.3.1 Montage expérimental d’injection
2.3.2 Processus expérimental
2.3.3 Bilan sur le dispositif expérimental utilisé
2.4 Expérimentations sur une implémentation de l’algorithme AES
2.4.1 Advanced Encryption Standard (AES)
2.4.2 Attaque sur l’incrémentation du compteur de ronde
2.4.3 Attaque sur la fonction d’addition de clé de ronde
2.5 Conclusion
3 Validation d’un modèle de fautes au niveau assembleur
3.1 Introduction
3.2 Étude expérimentale des paramètres d’injection de fautes
3.2.1 Répétabilité des fautes injectées
3.2.2 Instant d’injection
3.2.3 Position de l’antenne d’injection
3.2.4 Tension d’injection
3.3 Corruptions de données et d’instructions
3.3.1 Simulation de corruption d’instructions
3.3.2 Résultats expérimentaux
3.3.3 Besoin d’une analyse à un niveau RTL (Register-Transfer Level)
3.4 Modèle de fautes au niveau RTL
3.4.1 Chargement d’instructions
3.4.2 Chargement de données
3.4.3 Validation expérimentale de ce modèle RTL
3.5 Modèle de fautes au niveau assembleur
3.5.1 Validité du modèle de saut d’instruction
3.5.2 Hypothèses pour expliquer les effets de sauts d’instructions
3.6 Conclusion et perspectives
4 Définition et vérification d’une contre-mesure logicielle
4.1 Introduction
4.2 Présentation du schéma de contre-mesure
4.2.1 Classes d’instructions
4.2.2 Séquences de remplacement par classe d’instructions
4.2.3 Bilan sur les classes d’instructions définies
4.3 Vérification formelle du schéma de contre-mesure
4.3.1 Préambule sur la vérification formelle
4.3.2 Modélisation et spécification à prouver
4.3.3 Vérification formelle de séquences de remplacement
4.4 Application automatique de la contre-mesure
4.4.1 Algorithme d’application automatique
4.4.2 Résultats en termes de surcoût
4.5 Conclusion et perspectives
5 Évaluation expérimentale de la contre-mesure proposée
5.1 Introduction
5.2 Évaluation expérimentale face aux injections de faute
5.2.1 Contre-mesure de détection de fautes
5.2.2 Définition d’une métrique de robustesse
5.2.3 Paramètres expérimentaux utilisés pour l’évaluation
5.2.4 Évaluation expérimentale de la robustesse sur une instruction
5.2.5 Évaluation expérimentale sur une implémentation de FreeRTOS
5.2.6 Bilan sur l’évaluation des contre-mesures
5.3 Application combinée des deux contre-mesures
5.3.1 Présentation de l’implémentation à renforcer
5.3.2 Évaluation préliminaire de l’implémentation non renforcée
5.3.3 Application de la contre-mesure de tolérance au saut d’une instruction
5.3.4 Renforcement à l’aide de la contre-mesure de détection de fautes
5.3.5 Bilan sur l’application combinée des deux contre-mesures
5.4 Étude de vulnérabilité face aux attaques par observation
5.4.1 Paramètres utilisés
5.4.2 Résultats expérimentaux
5.4.3 Bilan
5.5 Conclusion et perspectives
6 Conclusion et perspectives
6.1 Conclusion
6.2 Perspectives
Télécharger le rapport complet