Bonne année 2018 ! Pour fêter ça, on a découvert une faille de sécurité majeure dans le matériel (les microprocesseurs) informatique que nous utilisons tous les jours; quelle bonne nouvelle après l’obsolescence programmée enfin ouvertement admise par Apple après des dizaines d’années de pratique !
Sans entrer (trop) dans les détails, les deux failles de sécurité découvertes (Spectre et Meltdown) ont un rapport direct avec une particularité des processeurs modernes que l’on appelle l’exécution spéculative. Spectre est une faille de principe (inhérente au procédé utilisé), alors que Meltdown est lié à l’implémentation par Intel et AMD (les principaux fabricants de microprocesseurs), entre autres. Qu’est-ce que l’exécution spéculative ? C’est une particularité liée à l’existence de plusieurs unités de traitement à l’intérieur d’une même puce de silicium; on parle de « multi-coeurs » : pour exécuter un algorithme, vous n’avez en principe besoin que d’une unité de traitement; mais imaginons qu’une partie spécifique de l’algorithme soit du genre « Si le résultat de la fonction A est vrai, alors exécute la fonction B, sinon exécute la fonction C ». Pour exécuter cet algorithme, il faut exécuter successivement A, puis B ou C :on a additionné le temps de traitement de A et de B ou C. En exécution spéculative, on va occuper d’autres unités de traitement pour évaluer B et/ou C pendant que l’on évalue A, si bien qu’à la fin de l’exécution de A, on aura déjà le résultat de B et C, et notre programme aura gagné le temps de traitement de B ou de C, respectivement. En réalité, c’est encore un tout petit peu plus sophistiqué que ça, d’où le terme « spéculatif », mais c’est le principe.
Ceci permet à nos laptops et à nos smartphones de réaliser les performances auxquelles nous sommes habitués, et qui dans certains cas rendent possible les fonctionnalités avancées que l’on nous promet (comme l’automobile autonome, par exemple). Malheureusement, on s’est rendu compte très récemment que cette exécution spéculative pouvait présenter des effets de bord permettant à du code malveillant de court-circuiter des protections mises en place contre l’exploitation illégitime de données, et que l’implémentation faite actuellement par les principaux fabricants présentait également des failles.
L’exécution spéculative est implémentée dans le matériel, dans le silicium même, de nos microprocesseurs. C’est ce qui rend cette faille si inquiétante, car on ne peut pas vraiment la corriger sur le matériel existant. Ce qui n’empêche pas les fabricants de promettre des correctifs; mais en réalité, ces correctifs auront simplement pour effet de bloquer (ou limiter de manière drastique) l’exécution spéculative, ce qui va ralentir de manière spectaculaire tous les ordinateurs et smartphones de la planète. Vous avez acheté une voiture de sport et vous vous retrouvez soudain, après un correctif logiciel, au volant d’un tracteur… Bon, la réalité est peut-être un peu moins caricaturale, mais dans l’idée, c’est bien ça.
C’est une situation que l’on a déjà connue dans d’autres secteurs industriels; rappelez-vous l’automobile, à une certaine époque : les voitures roulaient à plus de 200 km/h, mais avaient des freins à tambour, le pilote avait un casque symbolique, il n’y avait pas d’arceau de sécurité, et pas de cellule de protection de l’habitacle. Actuellement, on parle de ces voitures, dont Bugatti, Mercedes et Ferrari construisirent les plus beaux exemples, comme de magnifiques antiquités; mais il n’en reste pas moins qu’il s’agissait d’une technologie immature, capable de performances tout à fait respectables, mais dans un cadre artisanal. L’informatique, quoi qu’en disent les spécialistes du domaine, en est actuellement encore à un stade artisanal; une recherche de performances (et de profits, bien sûr) aboutissant à des résultats impressionnants, mais pas de vision systémique, pas d’intégration d’aspects sécuritaires, pas de gestion de réseau à très bas niveau…
L’informatique est actuellement encore restée à un niveau de développement élémentaire; on discute encore dans certaines écoles du langage de programmation à utiliser, plutôt que des problèmes à résoudre. Lorsque je corrige un travail de bachelor ou de master, je suis souvent submergé de termes technologiques abscons, se référant à des paquets logiciels à l’implémentation souvent opaque, mais une bonne partie des points du cahier des charges ne sont même pas abordés (ou souvent de manière trop superficielle pour se révéler satisfaisante); et quand on pose la question, on se rend compte qu’il a fallu trop de temps pour assimiler la technologie, et qu’il n’en est pas resté suffisamment pour penser au problème. Ou alors que la technologie choisie ne permettait pas de répondre aux prérequis exigés.
J’ai, grosso modo, l’âge de l’informatique; j’en ai suivi la majorité des développements, depuis mon premier programme en FORTRAN-IV sur CDC-6600, jusqu’à des développements distribués incluant des serveurs, des laptops et des mobiles dans un même contexte applicatif, en passant par des « minis » PDP-11 de Digital pour le développement en télécommunications. Je ne peux que constater que peu de progrès réels ont été faits en ce qui concerne la méthodologie de développement : les programmeurs restent des bidouilleurs de code, ils disposent simplement d’une bibliothèque de code plus conséquente qui leur permet de publier des fonctionnalités plus rapidement (c’est la seule chose qui intéresse l’éditeur de logiciel, d’ailleurs). On n’a plus fait de progrès significatifs dans le traitement de texte depuis Word ou swriter, le tableur Excel n’a toujours que deux entrées (techniquement, on peut en gérer davantage, mais si vous avez essayé une fois, vous avez probablement renoncé) et Photoshop est toujours aussi compliqué d’accès, ce qui permet à Apple de proposer des outils d’une nullité remarquable (qu’il rend d’ailleurs obsolètes dés qu’il en a écoulé assez), mais qui sont utilisables par un béotien. Bon, comme le faisait remarquer un responsable, de toutes façons, les photos prises par un béotien n’ont pas besoin de mieux, alors… Il n’avait jamais intégré le fait qu’un bon photographe peut ne pas avoir envie d’être informaticien.
L’informatique doit effectuer un saut quantique en termes d’industrialisation et d’intégration, cela paraît clair. Cela rend d’autant plus inquiétant ce futur que l’on décrit régi par une intelligence artificielle dont à l’heure actuelle, les neurones sont endommagés ou immatures…