Automatiser le masquage des programmes contre les attaques par canal caché

Même les logiciels les mieux verrouillés ont un talon d’Achille : en auscultant de près les microprocesseurs qui les exécutent, un attaquant peut mesurer certaines données physiques comme la consommation électrique ou les variations du champ magnétique. Ces indices renseignent indirectement sur l’information circulant dans les circuits. On appelle cela une attaque par canal caché. Une des parades consiste à masquer la clé de chiffrement dans son code assembleur. Mais ce travail manuel s’avère fastidieux et source d’erreurs. Partenaires du projet européen Secode, des scientifiques du centre Inria Rennes – Bretagne Atlantique viennent de parvenir à automatiser cette tâche durant la phase de compilation. Ce qui va permettre d’étendre l’usage de cette méthode de protection.


 

“La sécurité n’est pas notre cœur de métier historique, prévient Erven Rohou, responsable de Pacap, une équipe rennaise  spécialisée dans les processeurs et les compilateurs. En revanche, il nous arrive de collaborer avec des gens dont c’est la compétence. Nous leur apportons alors des éclairages sur la façon d’implémenter certaines idées. Et c’est ce qui s’est passé avec Secode.” Ce projet européen (1) qui vient de s’achever réunissait Télécom ParisTech, l’Université Paris 8, l’Université Catholique de Louvain, Inria et l’Université Sabancı, en Turquie.

L’affaire démarre par un coup de fil venu de Télécom ParisTech. “Les mathématiciens développent des idées très intéressantes pour masquer les programmes de cryptographie à l’exécution. Mais, en pratique, il s’avère assez difficile de réaliser une preuve de concept car il faut écrire le code à la main dans du langage assembleur. D’où l’intérêt de pouvoir automatiser cette étape. Et c’est qu’ils nous ont proposé d’essayer de faire.” En l’occurrence, l’expérience est réalisée sur AES (Advanced Encryption Standard), l’algorithme de chiffrement qui fait référence depuis une vingtaine d’années.

Fuites d’information

En toile de fond : les attaques par canal caché. “Même s’il est très bien conçu, un algorithme de chiffrement est exécuté dans le monde physique. En plaçant une sonde au-dessus du circuit, un attaquant peut, par exemple, mesurer le rayonnement électro-magnétique. À force de l’observer, il va finir par déduire qu’à tel moment, il se trouve en présence d’un 0 ou d’un 1. Petit à petit, il va réussir à reconstruire des choses et en particulier… la clé de chiffrement. Avec des analyses statistiques, il va être capable de dire qu’à tant de pourcents le premier octet de la clé est probablement telle valeur, le deuxième telle valeur, etc.”  Les scientifiques mènent d’ailleurs des expériences de ce type au Laboratoire de haute sécurité (LHS) de Rennes.

La vulnérabilité résulte du fait que “la clé de chiffrement se trouve présente en clair dans la mémoire du processeur. De plus, l’algorithme de cryptographie passe son temps à l’utiliser. Il faut donc faire en sorte que cette clé ne soit plus là. Autrement dit, la masquer.”  Comment ? “En prenant un nombre aléaloire que l’on va ajouter à la clé.” Ainsi brouillée, la clé devient illisible et inexploitable pour l’attaquant. De multiples méthodes mathématiques permettent de concocter ce masque. “On peut utiliser, par exemple, un opérateur booléen comme le ‘ou exclusif’, aussi appelé xor.”  Le travail des cryptologues consiste à trouver une transformation mathématique idéale “à la fois pour masquer la clé et pour changer le programme de façon à ce qu’il puisse utiliser la clé masquée sans jamais l’exploiter en clair. Leur communauté produit énormément de travaux dans ce domaine. Dans ce contexte, nos collègues de l’Université Sabancı ont élaboré une méthode qui présente de meilleures propriétés que les précédentes.” Et c’est en aval de ce travail qu’intervient ensuite l’équipe Pacap.

Plugin de compilation

“À partir de là, le but est de faciliter la vie du programmeur. Il faut lui permettre d’écrire ses instructions non plus en assembleur mais en langage C avant la compilation.” À charge ensuite au compilateur d’effectuer le masquage. “En pratique, le programmeur va simplement devoir nous indiquer à quel endroit dans son programme il utilise la clé. Il lui suffira de rajouter une instruction à cet endroit-là pour que le compilateur comprenne qu’il doit appliquer le masquage.” Cerise sur le gâteau : “le programmeur va même pouvoir choisir entre différentes méthodes de masquage. Il peut estimer que celle par défaut n’est pas la plus adaptée et donc en prendre une autre qu’il trouve meilleure. Il suffit de l’indiquer à notre plugin de compilation qui se charge du reste.”

Une fois le masquage implémenté, vient l’heure de vérité : le passage du processeur sous la sonde de champ électromagnétique pour de nouvelles mesures. “Auparavant, nous avions une courbe avec des pics qui représentaient les valeurs de plus forte probabilité pour chaque octet. Désormais, la ligne est plate. Il n’est plus possible d’inférer la valeur. Autrement dit, l’information ne fuite plus. La méthode mathématique de masquage est donc efficace.” Quant à l’automatisation, “elle fonctionne et cela va évidemment beaucoup plus vite qu’à la main. On peut donc penser qu’à l’avenir, cette preuve de concept va permettre aux concepteurs d’algorithmes de chiffrement d’utiliser plus largement les techniques de masquage.”

NB : Une démonstration de ces expérimentations aura lieu sur le stand Inria durant le Forum international de la cybersécurité (FIC) de Lille en janvier.

 

  • (1) Secode s’inscrit dans CHIST-ERA, un programme européen visant à favoriser des recherches à caractère pluridisciplinaire dans le domaine des sciences de l’information et de la communication. Il est financé par l’Agence nationale de la recherche pour sa partie française. Secode était coordonné par Jean-Luc Danger (Télécom ParisTech).

 

Les commentaires sont clos.