La sécurité informatique
Leçon inaugurale prononcée le 10 mars 2011. Chaire Informatique et sciences numériques (2010-2011)
Entrées d’index
Mots-clés : sécurité informatique, Internet, botnet, cryptographie, spam, langage de programmation, pi-calcul, modèle de calcul, calcul de processus
Note de l’éditeur
La chaire Informatique et sciences numériques du Collège de France reçoit le soutien de l’Institut national de recherche en informatique et en automatique (INRIA).
Page du professeur associé sur le site du Collège de France : http://www.college-de-france.fr/site/martin-abadi/index.htm
Texte intégral
1Monsieur l’Administrateur,
Chers collègues,
Chers amis,
Mesdames, Messieurs,
2Si mon chemin vers le Collège de France peut sembler quelque peu inattendu, il ne me fait apprécier que davantage l’attrait unique de cette institution. J’en ai entendu l’éloge depuis longtemps et dans des pays lointains, même dans mon enfance en Argentine ; le Collège de France était alors pour moi un endroit légendaire, mythique. Je suis donc très heureux d’avoir cette opportunité d’être parmi vous cette année. Je vous remercie de votre accueil chaleureux et de la confiance que vous m’avez témoignée en m’appelant à occuper la chaire d’Informatique et sciences numériques.
3Je tiens aussi à remercier l’INRIA, qui a participé à la création de cette chaire, et tous ceux qui ont encouragé ma venue. Je pense en particulier à Pierre-Louis Lions, qui a présenté mon dossier à l’assemblée des professeurs, et à mon prédécesseur Gérard Berry, qui m’a si souvent guidé. Je pense aussi à bien d’autres informaticiens français que je ne puis tous citer. J’ai souvent admiré leurs travaux et j’ai parfois eu la chance d’y participer au fil des années. Leurs idées et leur amitié ont toujours beaucoup compté pour moi.
4Je comprends ma présence ici surtout comme une marque de votre intérêt et de votre ouverture envers ma discipline, l’informatique. La création de la chaire d’Informatique et sciences numériques, en 2009, me semble naturelle et cohérente avec la mission du Collège de France, car « le savoir en train de se faire », aujourd’hui, se fait souvent numériquement. Même si elle comporte une part de bricolage (comme d’ailleurs beaucoup d’autres disciplines), l’informatique a un contenu scientifique important et vivant – vivant de par sa dynamique interne, mais aussi à cause de ses enjeux pratiques évidents et de ses liens avec d’autres domaines. L’informatique est d’une richesse scientifique que nous découvrons encore.
5Dans cette leçon et dans mon cours, qui porteront sur la sécurité informatique, ces enjeux pratiques seront souvent présents. Il suffit de feuilleter les journaux pour comprendre à quel point les questions de sécurité informatique nous concernent tous. Dans son cours de 2007-2008, Gérard Berry a expliqué avec enthousiasme et lucidité pourquoi et comment le monde devient numérique1. La sécurité devient numérique elle aussi.
6Les questions de sécurité informatique sont centrales dans le monde politique et dans le monde militaire, où elles se posent depuis la naissance de l’informatique moderne. Citons notamment le travail d’Alan Turing et de ses collègues à Bletchley Park pour décrypter les codes allemands pendant la Seconde Guerre mondiale. Plus récemment, nous avons vu des tentatives de contrôle du débat politique sur Internet ; le cas de la Chine est bien connu, mais il n’est pas le seul. Même si les systèmes de surveillance et de censure modernes ne partagent pas le charme désuet de Bletchley Park, ils sont vastes et puissants. Enfin, la diffusion d’une masse de documents confidentiels par WikiLeaks est d’une échelle insoupçonnable avant l’informatique.
7Les questions de sécurité informatique sont également centrales dans le monde bancaire. Autrefois, les transactions numériques sécurisées étaient un souci seulement dans les systèmes internes des banques ou dans les échanges interbancaires. Maintenant, elles concernent directement les usagers qui accèdent aux sites web de leurs banques.
8L’industrie, le commerce, la gestion de données médicales et bien d’autres domaines sont de plus en plus numériques. Nous craignons que l’intégrité et la confidentialité de l’information y deviennent fragiles. À l’heure actuelle, malheureusement, cette inquiétude semble largement justifiée.
9Les questions de sécurité informatique sont d’autant plus délicates que nous nous servons de systèmes relativement ouverts et hétérogènes. Ces systèmes comprennent, entre autres, des ordinateurs personnels, des téléphones portables, des consoles de jeu, des serveurs, d’énormes centres de calcul et des réseaux, avec partout du logiciel complexe et varié. Ces éléments sont gérés par des usagers et des administrateurs indépendants les uns des autres et plus ou moins compétents. La sécurité informatique s’intéresse à chacun de ces éléments, à leurs combinaisons et à leurs interactions.
10Nos systèmes modernes interagissent avec des environnements parfois hostiles et sur lesquels nous n’avons aucun contrôle direct. Nos ordinateurs ou leurs disques durs peuvent tomber dans des mains ennemies ; nous sommes branchés sur un réseau public plein de dangers ; sur ce réseau, le logiciel de base de notre ordinateur peut, à notre insu, échanger des données avec de petits programmes venus subrepticement de pages web suspectes ; de plus, les usagers, les programmeurs et les administrateurs des systèmes ne sont eux-mêmes pas toujours très fiables. Pourtant, nous gardons souvent de bonnes raisons de préférer l’interaction, malgré ses dangers, aux anciens systèmes monolithiques fermés au monde.
11De manière générale, l’interaction est un thème central dans toute l’informatique : interaction de plusieurs processeurs dans un ordinateur, interaction entre programmes, interaction des ordinateurs distribués sur Internet, interaction des usagers avec des ordinateurs proches ou lointains, et interaction entre usagers par courrier électronique ou sur les réseaux sociaux comme Facebook ou Twitter. Pour les usagers du début du xxie siècle, la portée de l’informatique ne se restreint plus aux grands calculs numériques, financiers ou scientifiques, dans des centres spécialisés ; elle est omniprésente et fournit surtout un fantastique moyen de communication et de collaboration. L’interaction me paraît donc un objet d’étude légitime et incontournable pour l’informatique en tant que science. La sécurité, dont traitera le cours, est elle-même un aspect essentiel de l’interaction.
12Dans cette leçon, je vous propose d’entamer l’étude de la sécurité informatique. Pour cela, je commencerai par un exemple de la vie courante. Je pourrai ensuite décrire brièvement le contenu du reste du cours. J’entrerai dans le vif du sujet, finalement, en donnant une idée des buts de la sécurité informatique, de certains de ses outils pratiques et théoriques, et aussi de ses difficultés.
Du spam et des botnets à l’arithmétique modulaire
13Le problème bien connu du spam nous servira à découvrir l’ampleur du sujet et certaines de ses dimensions. J’espère que ce problème s’avérera éphémère. En tout cas, ce que j’en dirai ici sera probablement obsolète dans quelques années, tant ce problème est encore mouvant. Mais certaines des idées et des techniques que nous rencontrerons datent d’avant le phénomène du spam, sont pertinentes pour d’autres problèmes de sécurité bien plus sérieux, et resteront importantes à très long terme.
Le spam
14Le spam coûte cher aux services de courrier comme Hotmail, Yahoo! Mail ou Gmail, pour lesquels il peut constituer près des trois quarts des messages reçus. Son volume est énorme : des milliards de messages par jour2.
15Chacun de ces messages, s’il est livré à son destinataire, dégrade la qualité des communications. Il s’agit généralement d’une publicité, alléchante ou importune, mais quelquefois du premier pas d’une escroquerie.
16A priori, on pourrait croire que le spam ne pose pas un problème de sécurité significatif. Il est certainement moins redoutable que l’espionnage industriel ou le sabotage informatique d’infrastructures critiques. Pourtant, il met en jeu deux des notions centrales en sécurité : l’authentification et l’autorisation. Ici, l’authentification consiste à savoir de qui viennent les messages. L’autorisation consiste à décider s’il faut les livrer et les montrer à leurs destinataires.
17Pour lutter contre le spam, beaucoup de méthodes ont été inventées ou adaptées ; ces méthodes visent essentiellement à renforcer les dispositifs d’authentification et d’autorisation.
D’une part, des filtres se servent des propriétés statistiques intrinsèques aux messages pour tenter d’inférer si ceux-ci sont légitimes. Par exemple, ces filtres peuvent bloquer tout message avec des mots-clés comme « Viagra ». La liste des mots-clés est mise à jour par des techniques d’apprentissage automatique.
D’autre part, indépendamment du contenu des messages, l’infrastructure de courrier peut tenter de bloquer ou d’entraver le flux de spam. Ainsi, dans des systèmes comme DKIM (DomainKeys Identified Mail), le courrier est signé cryptographiquement par son auteur ou (plus souvent) par des intermédiaires qui endossent le message et affirment qu’il est légitime. On peut alors décider de ne pas transmettre ou de ne pas livrer des messages qui ne sont pas signés par des entités connues et fiables.
L’infrastructure de courrier peut aussi tenter de décourager, de bloquer ou juste de ralentir les sources de spam. Par exemple, dans les tests que l’on appelle « tests de Turing inversés » ou plus précisément « Captchas », les services de courrier demandent aux usagers de transcrire des caractères peu lisibles3. Ils ont l’espoir que cette tâche sera facile pour les usagers humains mais impossible pour les programmes qui voudraient envoyer des messages en grande quantité automatiquement. Une autre idée est de rendre le courrier payant. Cette idée peut se décliner avec des monnaies virtuelles, en utilisant des analogues électroniques des timbres et des bureaux de poste. Elle correspond bien aux réalités économiques du spam, mais il semble improbable qu’elle soit adoptée partout à court terme, tant les usagers sont habitués au courrier gratuit et tant la concurrence entre les services de courrier est intense.
18Si ces défenses ont souvent un contenu technique intéressant, les attaques sont tout aussi sophistiquées, voire véritablement high-tech, et évoluent sans cesse. Par exemple, des Captchas de plusieurs types ont été résolus grâce à des progrès dans les techniques automatiques de reconnaissance de caractères (OCR).
19Une autre méthode pour les résoudre consiste à lancer une attaque par interposition de la manière suivante :
Quand Hotmail, disons, présente un Captcha à un attaquant, à son tour celui-ci le transmet à un usager qui peut se trouver à l’autre bout du monde. D’une façon ou d’une autre, l’attaquant prétend que l’usager aurait intérêt à résoudre ce Captcha dans un autre but, par exemple pour accéder à un jeu érotique ou pour éviter que son ordinateur ne s’éteigne.
Une fois que cet usager a rendu la solution, l’attaquant n’a plus qu’à la transmettre à Hotmail comme si c’était lui qui l’avait trouvée.
20Bien que ce procédé puisse sembler complexe, l’attaquant le réalise automatiquement, et surtout sans avoir à transcrire les caractères du Captcha lui-même.
21Une troisième méthode consiste tout simplement à faire résoudre les Captchas par des employés très mal payés, à moins d’un centime par solution. Quoique apparemment moins ingénieuse, cette méthode semble être la plus efficace en ce moment4.
L’assaut des bots
22Une partie considérable du spam provient de vastes réseaux d’ordinateurs contrôlés par des attaquants, presque toujours à l’insu de leurs propriétaires. Ces réseaux sont appelés « botnets », et chacun des ordinateurs est un « bot » (pour robot). Les botnets sont utilisés aussi dans d’autres buts criminels ou politiques, comme l’attaque massive par déni de service (denial of service) contre l’Estonie en 2007. L’usage des botnets amplifie le pouvoir des attaquants et leur permet de mieux masquer leur identité.
23Un botnet peut compter des dizaines de milliers de bots, voire plus. Au total, on a parfois estimé qu’il y aurait des dizaines de millions de bots, peut-être 100 millions ou 150 millions déjà en 2007. Même si on ne peut pas trop faire confiance à de tels chiffres, ils donnent une idée de l’énormité du problème, ou du moins de l’inquiétude qu’il suscite.
24Souvent, les membres du botnet communiquent par des messages chiffrés, en utilisant des méthodes cryptographiques analogues à celles qui protègent les réseaux militaires et les réseaux bancaires, que nous étudierons plus en détail pendant le cours. À cet égard, le spam et les botnets nous fournissent une application inattendue de la cryptographie moderne.
25Cet aspect des botnets nous permet déjà de présenter certains des personnages de notre drame. En cryptographie, nous parlons souvent de deux personnes fictives, Alice et Bob, qui souhaitent communiquer. Nous parlons aussi d’Eve, qui veut écouter leurs messages (eavesdrop), et de Mallory, qui est prête à tout, même à se faire passer pour Alice ou Bob. Ces prénoms humains peuvent nous faire ressentir une certaine sympathie envers Alice et Bob, et en tout cas servent à motiver les problèmes de communication mieux que les lettres A, B, E et M. On suppose parfois qu’Alice et Bob sont honnêtes et bienveillants, et qu’ils se font mutuellement confiance. Ce n’est pas nécessairement le cas. Les mécanismes de sécurité ne sont pas toujours là pour protéger les bons des méchants. Ainsi, dans les communications au sein d’un botnet, Alice et Bob sont des bots qui conspirent pour envoyer du spam, ou pire.
26Le travail des bots est typiquement coordonné par des ordinateurs, maîtres ou relais, qui se chargent de commander le réseau (Command & Control). Ce ne sont pas toujours les mêmes qui commandent, ou ils ne restent pas toujours aux mêmes adresses sur Internet, sinon il serait trop facile de décapiter un botnet. Parfois, une partie du contrôle des botnets est décentralisée, en utilisant les techniques pair-à-pair (peer-to-peer ou P2P). Il a même été suggéré de monter des botnets sur Skype, un système P2P bien connu de téléphonie chiffrée par Internet.
27Contre ces astuces et subterfuges des botnets, nous disposons de techniques de plus en plus puissantes pour détecter et comprendre leurs activités, pour les bloquer et parfois pour les détruire. Par exemple, nous pouvons déceler des similarités et des régularités dans les actions des bots pour ainsi les reconnaître, en déduire leurs alliances et mieux dépister et comprendre leurs attaques. Cela exige des calculs de grande échelle, qui analysent des milliards d’événements sur Internet en traitant des téraoctets (1012 octets) de données. Cela s’accompagne aussi d’efforts juridiques qui visent à démanteler les structures de contrôle de botnets, mais qui restent généralement inefficaces contre la formation de nouveaux botnets, quelquefois à partir des mêmes bots.
28Chacun des bots est un ordinateur dont la sécurité a été compromise, grâce à des failles dans son logiciel, à des erreurs de ses usagers, ou aux deux. Les moyens de réduire un ordinateur à l’esclavage sont assez variés, parfois bêtes et méchants, parfois spectaculaires.
29Par exemple, un usager peut recevoir une carte postale électronique avec des vœux de Noël ou une proposition amoureuse tentante. Si cette carte postale porte le nom de fichier ILoveYou.exe, elle contient un programme plutôt qu’une image, et ce programme se lance quand l’usager clique dessus. Le programme peut alors contacter les maîtres d’un botnet, puis suivre leurs ordres. L’ordinateur devient ainsi un bot.
30Mais l’ordinateur reste vulnérable même si le nom de fichier est ILoveYou.jpg ou ILoveYou.pdf, indiquant de traiter la carte postale comme une image de type JPEG ou PDF. En effet, des erreurs dans le logiciel d’affichage des images peuvent permettre à l’attaquant de contourner les mécanismes de défense de l’ordinateur. Même des erreurs apparemment minuscules et anodines peuvent s’avérer catastrophiques. Nous verrons comment plus tard. Par exemple, en 2004, une image JPEG corrompue pouvait lancer des programmes sur Windows ; plus récemment, en 2010, des failles dans la gestion des fichiers PDF sur les iPhone et les iPad permettaient de prendre le contrôle de ces téléphones et de ces tablettes. Parfois, de telles failles sont de vieilles erreurs, réparées dans des versions plus récentes du logiciel que l’usager n’a pas encore installées. Peut-être l’attaquant a-t-il même découvert ces erreurs en comparant les différentes versions du logiciel !
Perspectives
31Pour l’instant, retenons qu’un problème relativement modeste et banal, comme celui du spam, mène non seulement à des questions d’apprentissage automatique et de cryptographie, mais aussi au problème plus général de la correction des programmes (le logiciel se comporte-t-il conformément à ses spécifications ?). Ce problème, auquel Turing s’attaquait déjà en 1949 dans son article « Checking a Large Routine », a été traité avec ténacité depuis, souvent en suivant des approches à base de logique formelle.
32Retenons aussi que les usagers jouent un rôle délicat et essentiel en sécurité. Ces usagers constituent souvent le maillon le plus faible de la chaîne. Par exemple, ils choisissent fréquemment des mots de passe faciles à deviner ; dans une étude récente, on constatait qu’un usager sur cent se servait tout simplement du mot de passe « 123456 », ce qui est déjà mieux que « 12345 », un autre choix très répandu. De même, les usagers semblent enclins à lancer à peu près n’importe quel programme, surtout si ce programme est gratuit et amusant.
33Pourtant, nous ne devons pas trop blâmer ces usagers, car la donne actuelle ne les incite pas nécessairement à prendre les bonnes précautions. Par exemple, revenons à l’usager qui reçoit un fichier ILoveYou.jpg, ILoveYou.pdf ou ILoveYou.exe. Supposons qu’il puisse se procurer un logiciel sûr qui, entre autres choses, traite correctement les fichiers JPEG et PDF, et aussi cloisonne l’exécution des fichiers EXE pour en limiter les effets fâcheux. Il lui faut d’abord faire l’effort d’installer ce logiciel, qui peut d’ailleurs être moins plaisant à utiliser que le précédent ; il lui faut parfois aussi payer l’auteur de ce logiciel. Tout ceci ne l’encourage pas à se donner du mal. De plus, la sécurité accrue du nouveau logiciel est difficile à prouver et ne présente pas nécessairement un bénéfice direct évident pour l’usager. Son ordinateur n’enverra pas de spam à d’autres, mais lui-même en recevra tout autant. Est-ce motivant ? Il semblerait que non.
34En somme, il ne suffit pas d’inventer des techniques astucieuses. Il faut que ces techniques soient faciles à utiliser correctement. Il faut aussi que, du point de vue de ceux qui peuvent les mettre en place, elles en vaillent la peine.
35La sécurité ne doit pas être envisagée seulement comme un problème individuel, mais aussi comme un problème social. En ceci, elle ressemble assez à la santé. Les maladies de chaque individu (ou de chaque ordinateur) créent un danger pour les autres. Et, comme le montrent les économistes, les actions autonomes de chaque acteur ne mènent pas toujours aux meilleurs résultats pour tous. Les marchés ne sont pas automatiquement une panacée. Ceci est d’autant plus vrai que nous pouvons dire, en empruntant le langage des économistes, que les acteurs de ces marchés se trouvent souvent dans des situations d’information asymétrique : l’usager dispose rarement d’informations claires sur les menaces qui pèsent sur lui ou sur le reste de la communauté, et il est rarement capable d’évaluer les techniques de protection qui lui sont proposées5.
36Malgré ces constats assez préoccupants, il ne faut pas désespérer. Nous pouvons déjà nous réjouir d’avoir trouvé de bons problèmes qui ne semblent pas insolubles, surtout si nous n’exigeons pas une sécurité parfaite. Un certain niveau de spam ou un certain niveau de fraude pourraient être tolérables – nous reviendrons sur ce point. Par ailleurs, les attaquants, même s’ils semblent compétents et travailleurs, ne sont pas nécessairement tous des « petits génies du mal ». J’évoquais le fait que les botnets utilisent des méthodes cryptographiques modernes. Ainsi le botnet dénommé Storm utilisa la méthode RSA pour communiquer des listes de proxys (qui sont des relais intermédiaires dans la structure de contrôle de Storm). Dans RSA, un message M est chiffré ou signé avec une exponentiation en arithmétique modulaire, grosso modo en calculant Me modulo n, pour des nombres e et n bien choisis. Le récepteur du message peut retrouver M à l’aide d’un autre nombre d tel que Med donne M. RSA ne protège M que si n est difficile à factoriser ; typiquement n est un produit de deux grands nombres premiers qui doivent rester secrets. À présent, on recommande que le nombre n ait 2048 bits (soit environ 616 chiffres en numération décimale). Or, dans Storm, le nombre n qui fut choisi était trop petit : il n’avait que 64 bits et fut donc facile à factoriser. En fin de compte, cet usage de RSA était incorrect, ou juste superflu dans le meilleur des cas, puisqu’il ne garantissait aucune protection réelle.
Contenu du cours
37Si j’évoquerai parfois le spam, les botnets et d’autres problèmes actuels pendant le cours, je ne compte pas faire concurrence aux journaux, ni concentrer mes efforts exclusivement sur les questions et solutions les plus récentes. Par contre, j’espère présenter de manière assez détaillée un certain nombre d’idées et de méthodes en sécurité informatique.
38Selon un découpage possible du sujet, chaque leçon porterait sur un domaine d’application particulier. Une leçon pourrait porter sur le spam, étudié plus en détail ; d’autres, sur la sécurité des transactions bancaires, la sécurité du vote électronique, le renseignement militaire, ou les messages électroniques plus ou moins secrets des amants. Ces domaines sont sans doute pertinents et demandent un travail technique considérable. Par exemple, dans une réflexion sur le secret des messages électroniques, nous pourrions parler de la cryptographie, qui permet de chiffrer ces messages. Nous pourrions ensuite traiter des systèmes de contrôle d’accès dans les ordinateurs des usagers et dans le service de messagerie. Nous pourrions éventuellement évoquer les attaques par ingénierie sociale, dans lesquelles on tente de piéger les usagers, d’exploiter leur naïveté ou leurs défaillances.
39Mais travailler par domaine d’application ne me paraît pas très efficace, tant des thèmes similaires, voire identiques, apparaîtraient partout. Les messages des banques, tout comme ceux des amants, ne sont que des suites de 0s et de 1s ; malgré d’importantes différences de contexte, les mêmes principes et techniques de protection s’y appliquent. Ces points communs nous rappellent que la numérisation se fonde sur les mêmes idées et les mêmes outils dans un grand nombre de domaines. Les vulnérabilités et les attaques sont aussi communes à tous ces domaines, et elles en sont d’autant plus graves.
40Je préfère donc un autre découpage du sujet, avec les tranches dans l’autre sens. Le cours décrira des modèles généraux de sécurité, des techniques et mécanismes de protection, leurs garanties, leurs limitations et leurs failles. Le cours traitera, en particulier, des contrôles d’accès et de la fiabilité du logiciel. Plus tard, il traitera aussi des protocoles cryptographiques pour communiquer sur les réseaux comme Internet. Diverses applications apparaîtront dans le cours, mais surtout en tant qu’exemples.
41Il me sera impossible d’épuiser le sujet, mais j’espère tout au moins vous aider à y voir un peu plus clair et stimuler votre curiosité. Les séminaires devraient combler certaines des lacunes du cours et exposer d’autres perspectives, ainsi que donner l’opportunité de rencontrer quelques chercheurs brillants.
Qu’entend-on par sécurité ?
42Avant de découper un sujet, il est utile de le cerner et de le définir. Pour la sécurité informatique, heureusement, ceci n’exige pas de concepts techniques particulièrement abscons.
43La sécurité informatique a beaucoup en commun avec la sécurité dans d’autres cadres6. Je veux en souligner quatre caractéristiques :
La sécurité est souvent encombrante et coûteuse. Les fossés autour des châteaux sont malcommodes, les firewalls des réseaux informatiques aussi. Les coffres-forts peuvent coûter cher, le chiffrement aussi, du moins en termes de temps de calcul.
La sécurité est rarement parfaite. Les signatures manuscrites sur les chèques bancaires peuvent être falsifiées, quoiqu’elles conviennent assez bien à leur usage courant. Nous pourrions faire mieux, mais ce serait probablement moins commode ou plus cher. De même, les mots de passe sont parfois satisfaisants pour authentifier les usagers d’un système informatique, malgré tous leurs défauts, surtout s’ils sont combinés avec d’autres méthodes d’identification.
La sécurité dépend bien sûr de verrous physiques ou informatiques, mais aussi de méthodes pour détecter les attaques, les contrer, ou punir leurs auteurs.
Les motivations des attaquants sont classiques et peu liées à l’informatique. Certains veulent s’amuser, impressionner leurs amis, ou se venger d’un employeur, à titre individuel. D’autres, souvent plus organisés, veulent voler de l’argent ou espionner un concurrent. Des spécialistes veulent s’enrichir comme sous-traitants, par exemple en vendant des solutions de Captchas ou des malware kits (des boîtes à outils pour lancer des attaques). D’autres encore, pour la plupart des professionnels, surveillent des adversaires politiques ou s’infiltrent chez des ennemis militaires. Les plus dangereux sont souvent les insiders, qui travaillent de l’intérieur.
44Pourtant, malgré ces points communs, la sécurité informatique a des caractéristiques bien spécifiques.
Les attaques peuvent être montées à distance. La loi locale est généralement impuissante face à des assauts lancés de loin ; la coopération internationale est souvent complexe et lente.
Les attaques sont facilement automatisées et de grande envergure. Elles peuvent toucher très rapidement des cibles partout dans le monde, en affectant pratiquement tous les secteurs de nos activités (santé, commerce, finance, défense, etc.).
Les attaquants restent anonymes assez aisément. Quelquefois, même l’origine géographique des attaques s’avère difficile à établir : une attaque vient-elle vraiment de Chine, ou s’agit-il d’une attaque russe qui transite par des bots en Chine ? Ou peut-être est-ce un mélange des deux ? Les sanctions éventuelles ont donc moins de pouvoir de dissuasion.
45Ces caractéristiques découlent en partie de propriétés intrinsèques de l’outil informatique, en partie aussi de choix faits dans le développement et la mise en œuvre de cet outil. On saurait notamment concevoir des systèmes avec une plus forte notion d’identité et moins d’anonymat que nous n’en avons à présent sur Internet, au risque pourtant de compliquer la protection de la vie privée et la dissidence politique – ce qui serait pour le moins matière à polémique.
46Les attaques et les attaquants peuvent donc être difficiles à identifier, mais leurs buts sont en général assez précis. En revanche, même si les usagers prudents se préoccupent de la sécurité de leurs ordinateurs et de leurs données, ils restent souvent incapables de définir cette sécurité, de l’observer et de la mesurer. La sécurité ressemble moins à la vitesse du calcul, qui est relativement facile à quantifier, qu’au bonheur, à l’espérance, à la confiance ou au courage.
47Descartes, dans Les Passions de l’âme, donne une première définition de la sécurité, que je me permets de rappeler ici :
Il suffit de penser que l’acquisition d’un bien ou la fuite d’un mal est possible, pour être incité à la désirer. Mais quand on considère, outre cela, s’il y a beaucoup ou peu d’apparence qu’on obtienne ce qu’on désire, ce qui nous représente qu’il y en a beaucoup, excite en nous l’espérance, et ce qui nous représente qu’il y en a peu, excite la crainte, dont la jalousie est une espèce. Lorsque l’espérance est extrême, elle change de nature et se nomme sécurité ou assurance. Comme, au contraire, l’extrême crainte devient désespoir7.
48Ainsi, lorsque l’espérance est si forte qu’elle devient sécurité, elle chasse entièrement la crainte.
49Bien que nous nous servions peu de cette définition de Descartes en informatique, elle n’est pas sans intérêt. Tout d’abord, elle montre que la sécurité est un concept qui peut et mérite d’être défini précisément. En outre, la définition de Descartes souligne bien le côté subjectif de la sécurité. Qu’un système soit sûr ou non, qu’une attaque soit grave ou non, et même qu’elle soit ressentie comme une attaque, cela dépend de ce que l’on espère du système.
50Mon collègue Chuck Thacker, qui est foncièrement réaliste, dit parfois que toute information entrée dans un ordinateur devient, de fait, publique ; de ce point de vue extrême, la sécurité n’est jamais compromise même si des tiers peuvent accéder à tous nos fichiers, puisque ceux-ci ne contiennent que des données que nous sommes prêts à partager. En 2010, Thacker a reçu le prix Turing (le « prix Nobel » de l’informatique), en partie parce qu’il a conçu et créé la machine Alto, souvent considérée comme le premier ordinateur personnel moderne. Il parle donc en connaissance de cause. Je veux pourtant croire qu’il a tort et que nous pouvons espérer mieux : les applications actuelles et futures des ordinateurs exigent certainement des garanties plus fortes.
51Reste à fixer quelles pourraient être ces garanties, et à développer les techniques pour les assurer. Nous voudrions, bien entendu, que tous les systèmes informatiques fonctionnent parfaitement, sans erreurs ni failles de sécurité. Mais, malgré de nombreux progrès, ce but semble encore lointain et probablement illusoire. Aussi, nous nous contentons de propriétés plus restreintes et nous concentrons nos efforts sur les parties critiques des systèmes.
52Nous nous intéressons surtout à trois types de garanties :
l’intégrité (ou authenticité) ;
le secret (ou confidentialité) ;
la disponibilité (availability en anglais).
53Dans un système où un émetteur Alice envoie des données à un récepteur Bob, l’intégrité exprime que les données que Bob reçoit sont bien celles qu’Alice lui a envoyées. Le secret exprime que seul Bob reçoit ces données. La disponibilité exprime que les messages passent, et ne sont ni détournés ni détruits indûment.
54On dit parfois que l’intégrité est surtout importante pour les systèmes financiers, puisqu’on exige que les transactions y soient bien authentiques. On dit aussi que le secret est surtout important pour les militaires, alors que la disponibilité est surtout importante pour les télécommunications. En fait, dans pratiquement tous les domaines, une bonne politique de sécurité doit combiner des propriétés des trois types, qui sont souvent interdépendantes. Par exemple, l’intégrité des données d’une page Facebook dépend du secret du mot de passe de son propriétaire.
55Dans le cours, nous verrons quelques définitions plus rigoureuses de certaines propriétés de sécurité. Nous verrons aussi que l’intégrité, le secret et la disponibilité ont un certain nombre de variantes et de cas particuliers intéressants. Par exemple, la protection des données personnelles privées et l’anonymat peuvent être considérés comme deux formes de confidentialité.
56Au-delà de l’intégrité, du secret et de la disponibilité, chaque domaine peut mettre en jeu des propriétés particulières. Les politiques de sécurité des systèmes de vote électronique fournissent un exemple important à cet égard. Ces politiques exigent l’intégrité et, souvent, le secret des votes. Le vote étant le plus souvent un droit, la disponibilité est aussi requise. En outre, pour empêcher le commerce des votes, le votant ne doit pas pouvoir prouver à un tiers comment il a voté, même s’il le souhaite. Cette dernière propriété est certainement plus difficile à classer, ne serait-ce que parce qu’elle se base sur le concept de preuve. Il ne s’agit pas exactement de preuves dans le sens traditionnel des mathématiques. Ce concept doit être repensé à la lumière des méthodes cryptographiques modernes, comme l’a expliqué Jacques Stern dans son livre La Science du secret, dont je me bornerai ici à vous recommander vivement la lecture8.
57En somme, même s’il n’existe pas de politique de sécurité universelle, certains grands thèmes se dégagent :
Le système protégé interagit avec un environnement que nous ne pouvons pas complètement maîtriser ; de plus, la protection doit fonctionner même si l’environnement est puissant ou chanceux. Par exemple, pour concevoir des protocoles comme SSL (utilisé pour les sites sécurisés https sur le Web), nous devons supposer que l’attaquant pourrait décider du routage des messages sur le réseau, même si cette hypothèse s’avère souvent trop pessimiste en pratique. Nous devons aussi supposer que l’attaquant pourrait deviner ou découvrir certaines clefs cryptographiques, et nous devons tenter d’en minimiser les conséquences néfastes.
En contrepartie, nous ne demandons pas la correction parfaite, mais des propriétés plus simples et plus faibles. Par exemple, nous ne demandons pas que chaque consultation d’une agence de voyages sur le Web nous donne les réponses les plus utiles ; cette propriété est certes importante, mais elle concerne d’autres parties de l’informatique plutôt que la sécurité. Par contre, nous exigeons que ces réponses viennent bien de l’agence de voyages, et que personne d’autre ne puisse les voir sans notre consentement.
Alice et Bob au pays du pi-calcul
58Considérons un peu plus précisément quelques propriétés de sécurité à partir d’un exemple élémentaire. Nous décrirons cet exemple rigoureusement, avec quelques formules, mais il sera moins important de comprendre les détails de ces formules que la démarche générale dont elles font partie.
Des programmes qui communiquent
59Supposons qu’Alice et Bob sont deux usagers qui, chose rare, utilisent deux ordinateurs complètement fiables. Nous nous intéressons à la communication entre Alice et Bob, ici réduite à l’envoi par Alice d’un seul message M à Bob.
60Si Alice et Bob disposent d’un canal de communication privé, il est relativement simple de garantir la sécurité de cette communication. Ce canal privé, que nous appellerons c, peut être réalisé par un câble reliant Alice et Bob. Ce câble serait séparé d’Internet et de tout autre réseau, et il faudrait le surveiller et le protéger physiquement. Évidemment, si le parcours du câble est long, une solution de ce type peut devenir très coûteuse. Nous verrons qu’il en existe d’autres plus habiles.
61Un premier pas dans l’analyse d’un tel système est de le décrire plus rigoureusement. En informatique, il est courant de représenter un système par un programme, constitué d’instructions qui expliquent le fonctionnement de chaque composante du système. Très souvent, le but est d’exécuter ce programme, pour faire marcher le système. Mais la représentation programmatique est aussi utile quand nous voulons mieux comprendre le système, soit pour simuler ses comportements, soit pour l’analyser avec les méthodes et les outils du génie logiciel, soit enfin pour en fournir un prototype (sous forme de spécification exécutable) aux ingénieurs qui doivent en réaliser des versions complètes et efficaces.
62Dans notre cas, nous aurons besoin de décrire au minimum le fonctionnement d’Alice et de Bob. Notre langage de programmation doit donc permettre de transmettre des messages sur des canaux entre des composantes qui s’exécutent en parallèle, c’est-à-dire en même temps. Pour cela, il suffit d’un langage très simple mais très expressif, qu’on appelle un calcul de processus. Les calculs de processus ont été inventés pour étudier la programmation parallèle en lui donnant une base théorique, analogue à celle que nous avons depuis longtemps pour la programmation fonctionnelle.
63Ici, nous nous servirons du pi-calcul9. Bien que ce calcul n’ait pas été conçu spécifiquement pour étudier des problèmes de sécurité, il est particulièrement adapté à cette tâche. Il inclut notamment des moyens pour créer et utiliser des canaux de communication privés.
64En pi-calcul, nous décrivons notre petit système par les trois définitions suivantes :
Alice = c̅〈M〉
Bob = c(x).Q
Système = (ν c)(Alice | Bob)
65Alice, Bob et Système sont des processus. Dans la première ligne, c̅〈M〉 représente l’envoi du message M sur le canal c. Pour simplifier, Alice ne fait plus rien après cet envoi. Dans la deuxième ligne, c(x) représente la réception d’un message sur le canal c. Nous nous servons d’une variable x parce que Bob est prêt à recevoir non seulement M mais n’importe quel message, qui sera la valeur de x lors de son arrivée. Le symbole Q dénote un programme arbitraire, qui représente le reste du comportement de Bob, c’est-à-dire ce qu’il fera après la réception du premier message sur c. Par exemple, Q pourrait être e̅〈7〉 ou e̅〈x〉, qui émettent, respectivement, 7 ou x sur un autre canal e. Le point entre c(x) et Q sert à les séparer. Dans la troisième ligne, pour la définition de Système, le symbole | dénote la composition parallèle de processus : Alice et Bob s’exécutent en parallèle. Le préfixe (ν c) indique que c est un canal nouvellement créé, dit « frais ». Le symbole ν se prononce un peu comme le mot anglais new, d’où cette notation. L’essentiel est que c ne soit pas connu à l’extérieur du système et, par conséquent, que c soit un canal privé pour Alice et Bob ; l’usage de l’opérateur ν donne cette garantie.
66Est-ce tout ? On peut remarquer que nous n’avons pas décrit explicitement le comportement d’une troisième composante potentielle du système, à savoir le ou les attaquants. On peut aussi s’inquiéter du fait que nous n’avons pas décrit d’autres participants, peut-être bienveillants comme Charlie ou hostiles comme Mallory, qui échangeraient des messages avec Alice et Bob. Heureusement, ces descriptions ne sont pas nécessaires pour raisonner sur la sécurité du système. Nous pouvons essentiellement l’analyser en quantifiant sur tous les contextes possibles ; c’est-à-dire que nous pouvons réfléchir à ses propriétés en supposant qu’il est plongé dans un environnement arbitraire. Cet environnement comprend tout autre acteur. Ainsi, les garanties que nous obtiendrons seront vraies en toutes circonstances, même si le contexte inclut des attaquants.
67Comme une langue naturelle et comme tout langage de programmation, le pi-calcul a une syntaxe et une sémantique. La syntaxe explique quelles suites de symboles constituent des programmes. Par exemple, elle peut dire que toute parenthèse ouvrante est suivie d’une parenthèse fermante correspondante, ou que si Alice et Bob sont des programmes alors Alice | Bob en est un aussi, mais que Alice : Bob, avec deux points, n’est pas un programme bien construit. Des règles syntaxiques plus intéressantes concernent le typage : celles-ci interdisent des combinaisons incohérentes, comme l’addition du nombre entier 17 au processus Bob. Quant à la sémantique, elle explique la signification des programmes. Il y en a plusieurs sortes, mais toute sémantique doit nous permettre au minimum de savoir comment se comportent les programmes quand ils sont exécutés. Par exemple, d’après la sémantique du pi-calcul, notre système évolue par la réécriture suivante :
(ν c)(c̅〈M〉 | c(x).Q) → (ν c)(Q avec x = M)
Puisque Alice = c̅〈M〉 et Bob = c(x).Q, ceci équivaut à :
(ν c)(Alice | Bob) → (ν c)(Q avec x = M)
68Cette réécriture modélise la communication sur le canal c. La flèche → dénote une étape de calcul. Alice y disparaît, et on pose x = M dans le comportement suivant de Bob, en sorte que Q est lancé avec la valeur M pour la variable x10.
69Dans notre exemple, la sémantique du pi-calcul montre que le message M est bien transmis, que quand Bob reçoit un message x c’est bien le message envoyé par Alice, et que seul Bob peut recevoir ce message puisque c n’est connu que d’Alice et de Bob. Ces propriétés restent vraies même dans un contexte arbitraire, par exemple dans une configuration de la forme Charlie | Mallory | (ν c)(Alice | Bob). Ainsi, la sémantique implique des propriétés de disponibilité, d’intégrité et de secret. Ici, ces propriétés sont des conséquences évidentes d’une équivalence entre (ν c)(Alice | Bob) et le programme (ν c)(Q avec x = M), où la transmission du message M a déjà eu lieu. En outre, la riche théorie du pi-calcul nous fournit des méthodes pour exprimer de telles propriétés et les prouver rigoureusement.
Communication chiffrée
70Jusqu’ici notre description du canal c prétend que ce canal est primitif et atomique. Mais nous pouvons aussi le représenter plus finement, essentiellement dans le même langage, en décidant par exemple que les messages sur c seront en fait transmis sur un canal public, que nous nommerons simplement Internet, et que ces messages seront protégés en les chiffrant sous une clef privée K partagée par Alice et Bob. En somme, le canal privé c devient virtuel, puisqu’il correspond à l’usage de la clef privée K sur le canal global Internet.
71Nous pouvons alors écrire :
Alice = I͞n͞t͞e͞r͞n͞e͞t 〈chiffrer(K,M)〉
Bob = (y).soit x = déchiffrer(K,y).Q
Système = (ν K)(Alice | Bob)
72Ici, ν est appliqué à une clef de chiffrement plutôt qu’à un canal, avec le même effet : la clef est fraîche et privée ; chiffrer et déchiffrer sont des fonctions reliées par la propriété algébrique
déchiffrer(K,chiffrer(K,M)) = M
qui implique que Bob retrouve bien M quand il déchiffre le message d’Alice.
73Cependant, avec cette dématérialisation du canal c, nous perdons la propriété de disponibilité : un attaquant peut empêcher le passage des messages chiffrés en les interceptant sur le canal Internet. Cette perte de la disponibilité se manifeste effectivement au niveau du pi-calcul, puisque nous pouvons y définir un « gobeur de messages » récursif :
Gobeur = Internet(y).Gobeur
qui est capable de recevoir tout message sur Internet et de l’absorber. Elle correspond bien à un phénomène réel : sur Internet, un attaquant peut parfois perturber le routage de messages pour empêcher ceux-ci de parvenir à certains destinataires.
74Pour l’intégrité et le secret, par contre, il y a quelque espoir, à condition que Bob ne divulgue jamais la clef K. Sinon, un attaquant qui verrait passer le message chiffré pourrait en garder une copie, puis le déchiffrer plus tard lorsqu’il prendrait connaissance de K.
75Il faut aussi, bien entendu, que la fonction de chiffrement soit sûre. Pourtant, il est souhaitable de ne pas trop spécifier les détails du chiffrement ; d’abord, parce que nous voulons obtenir des garanties générales qui s’appliquent à des réalisations variées du système ; ensuite, parce qu’il est trop facile de se perdre dans ce genre de détails alors qu’un grand nombre de questions de sécurité n’en dépendent pas ; enfin, parce que nous n’avons de toute façon aucune preuve inconditionnelle de la sécurité des méthodes de chiffrement les plus utilisées ! Nous devons donc penser autrement à la sécurité du chiffrement.
76Une alternative est de suivre une approche formelle avec des équations symboliques sur les fonctions de chiffrement et de déchiffrement, sans pour autant fixer les détails de ces fonctions. Nous pouvons notamment poser l’équation déchiffrer(K,chiffrer(K,M)) = M, comme nous l’avons fait, sans préciser davantage les définitions et les propriétés des fonctions chiffrer et déchiffrer. Nous pouvons alors supposer que l’application de la fonction déchiffrer est essentiellement le seul moyen de retrouver M à partir de son chiffrement. Cette hypothèse est commode mais un peu simpliste. Dans des approches plus concrètes et plus fines, étayées sur la théorie de la complexité, elle est remplacée par des hypothèses sur la difficulté calculatoire de casser le chiffrement. Par exemple, une hypothèse (nécessaire, mais insuffisante) serait que la fonction de chiffrement soit à sens unique : un adversaire dont le temps de calcul est borné ne peut retrouver M à partir de son chiffrement qu’avec une faible probabilité. En cryptologie, les bornes sur le temps de calcul et sur la probabilité sont exprimées par des fonctions de la taille de la clef K.
77Chaque approche a des avantages. Globalement, elles ont mené non seulement à une meilleure compréhension des systèmes de communication sécurisée et des hypothèses nécessaires, mais également à la découverte d’un grand nombre d’erreurs.
78Comprendre ces systèmes, pour en prouver la sécurité ou en percer les défenses, reste souvent un artisanat difficile. Néanmoins, nous disposons maintenant de méthodes formelles qui nous permettent d’analyser automatiquement des systèmes bien plus grands que celui de notre exemple, comme le protocole SSL (ou sa variante TLS) qui joue un rôle pratique si important dans le Web. Certaines des analyses concernent des mises en œuvre plutôt réalistes de protocoles. Ceux-ci y sont programmés dans des langages de haut niveau et compilés vers le pi-calcul ou d’autres langages cibles, dans lesquels des travaux récents rendent les preuves largement automatiques.
79Comme ces résultats encourageants le montrent, la recherche en sécurité informatique s’intéresse souvent à des problèmes bien liés à la pratique actuelle, mais elle inclut aussi des projets de longue haleine. Elle vise à développer des idées et des techniques qui ne s’appliqueraient pas seulement aux défenses et aux attaques du moment mais qui resteraient valables à plus long terme. Elle s’appuie sur des outils mathématiques ou logiques, mais aussi sur des outils développés par et pour des informaticiens ; ces outils permettent de décrire le calcul, puis de raisonner et de calculer sur le calcul.
Difficulté du savoir
80En choisissant la sécurité comme sujet pour ce cours, plutôt que d’autres parties de l’informatique, je mise sur son accessibilité et sur son importance. Je mise aussi sur votre curiosité, mais surtout sur votre bienveillance et votre compréhension. En effet, nous rencontrerons un certain nombre de difficultés.
81Tout d’abord, malgré l’abondance de faits divers passionnants, il est parfois difficile d’avoir des données concrètes, complètes et fiables sur l’état actuel de la sécurité informatique. Est-ce que les défenses d’une entreprise ont été percées ? L’entreprise ne le sait pas toujours et, quand elle le sait, elle ne publie pas beaucoup de détails. Par exemple, en janvier 2010, Google a révélé que son service de courrier Gmail subissait des attaques provenant de Chine ; quoique cette annonce ait causé un grand émoi, elle était accompagnée de peu de précisions. Il en est de même pour les gouvernements et pour les particuliers. En outre, la sécurité est un sujet assez vaste. Il s’entrelace avec d’autres sujets en informatique, notamment avec les langages de programmation, le génie logiciel, les bases de données, les systèmes d’exploitation et les réseaux. Il se sert parfois d’un peu de théorie des nombres, de logique formelle, ou même de sciences économiques. En somme, il convient d’approcher le sujet avec quelque humilité, et il faut souvent se résigner à ne pas tout savoir.
82D’autres difficultés me semblent encore plus fondamentales et intrinsèques. Dans son cours de 2009-2010, Gérard Berry a montré le rôle primordial des modèles en informatique11. Ces modèles sont nécessaires pour maîtriser le calcul. Un modèle est essentiellement un ensemble de notions et de règles qui nous permettent de penser le calcul, dans sa conception ou plus tard pour son analyse. Mais ces modèles peuvent-ils tenir la route face aux efforts d’un attaquant, qui n’y croit pas toujours et qui souvent gagne à les invalider ? Nous devons bien en douter quand nous considérons l’ingéniosité et l’acharnement des attaquants. Ici, je décrirai trois problèmes qui proviennent de trois couches différentes de l’informatique ; mais bien d’autres problèmes analogues se posent ailleurs.
83(1) Une grande partie de l’informatique est bâtie sur l’idée de représenter les données en binaire, par des symboles 0 et 1, et de supposer que, quand deux systèmes interagissent, ils le font en s’envoyant des chaînes de ces symboles par des canaux de communication bien définis. Ce point de vue reste très utile, mais, dans les ordinateurs modernes, ces symboles correspondent à des signaux électriques. Un attaquant n’est pas limité au vocabulaire des 0s et des 1s, et peut envoyer ou percevoir d’autres signaux. De même, l’attaquant peut utiliser des canaux de communication imprévus. Certaines attaques, par exemple, se servent de la consommation de courant des cartes à puce. Il s’avère que cette consommation n’est pas toujours uniforme, et peut dépendre des calculs que la carte est en train de faire. Ainsi, la consommation de courant d’une carte peut exposer les clefs cryptographiques qu’elle utilise.
84(2) La programmation moderne se sert surtout de langages de haut niveau dans lesquels les programmes interagissent en échangeant des nombres entiers, des tableaux, des arbres, des fonctions, ou d’autres objets abstraits plutôt que juste des symboles binaires. Quand une fonction est appelée, elle reçoit des arguments des types attendus, fait ses calculs du début à la fin, puis rend poliment ses résultats.
Pourtant, un attaquant n’est pas restreint par ces conventions. Il peut fournir des arguments qui ne sont pas conformes à ce que la fonction attend et déclencher des erreurs. C’est ainsi, par exemple, qu’opèrent les attaques par des fichiers JPEG et PDF que j’évoquais en parlant des botnets. L’attaquant peut aussi trouver un moyen pour appeler une fonction de sorte que les calculs démarrent à mi-chemin. Il peut ainsi contourner des pas préliminaires qui sont essentiels à la sécurité des calculs.
Les attaques de ce type, qui sont très importantes en pratique, demandent souvent une compréhension détaillée des particularités des systèmes attaqués. Je ne saurai donc pas les expliquer en détail ici. Je voudrais tout de même en esquisser un exemple simple et concret, avec le petit fragment de programme suivant :
// Les lignes qui commencent par
// des barres sont des commentaires.
// Nous définissons une fonction f
// à deux arguments :
// un nombre entier x et un caractère y.
// La fonction donne un résultat entier.
int f(int x, char y) {
// La fonction a une variable locale :
// un tableau t de taille 16 qui
// contient des caractères.
char t[16] ;
// Nous pouvons donner des valeurs
// initiales aux entrées du tableau.
// initialize est une fonction dont les
// détails ne nous intéresseront pas.
initialize(t) ;
// Puis nous donnons la valeur y
// à l’entrée x de t.
t[x] = y ;
// Le résultat 0 indique juste que
// la fonction a bien tourné.
return 0 ;
}
Normalement, un usager de cette fonction f pourrait l’appeler avec des arguments comme x = 0, x = 1 ou x = 15, et y = « a » ou y = « Z » ; mais rien n’empêche un attaquant d’appeler f avec x = 1000, par exemple. Dans des langages de programmation comme C et C++, qui sont très utilisés, on n’exige pas que les indices comme x respectent bien la taille des tableaux correspondants. Si x est trop grand ou trop petit, l’affectation t[x] = y va écraser une case de mémoire en dehors des limites espérées pour t, grosso modo à l’adresse de t plus x multiplié par une constante. L’attaquant peut ainsi modifier des données auxquelles il ne devrait pas avoir accès. Dans le cas où ces données indiquent quelles opérations seront exécutées plus tard, l’attaquant peut prendre le contrôle du programme.
Pour parer cette attaque, il faut vérifier que 0 ≤ x < 16. Des langages de programmation comme ML et Java imposent ces vérifications automatiquement et sont bien préférables à C et C++ de ce point de vue.
85(3) Un modèle naïf du chiffrement consiste à le voir comme une version virtuelle d’un coffre-fort : quand on chiffre des données, c’est comme si on les plaçait dans un coffre-fort et, de l’extérieur, un attaquant ne peut rien en tirer. L’attaquant peut tout au plus estimer la taille du contenu du coffre-fort.
Cette analogie est utile, mais elle n’est pas tout à fait juste, à plusieurs égards. Comme dans notre exemple avec Alice et Bob au pays du pi-calcul, un attaquant qui voit passer des données chiffrées peut discrètement en garder une copie, même s’il ne peut pas les comprendre, en attendant de découvrir la clef qui en permettra le déchiffrement. Par contre, il ne pourrait pas en faire autant avec un coffre-fort et son contenu ; les objets physiques sont plus difficiles à copier.
Bien que les analogies avec les coffres-forts ne soient pas satisfaisantes, d’autres modèles du chiffrement sont plus fidèles et plus utiles. Ils reposent sur les mathématiques et la logique formelle plutôt que sur des analogies avec le monde physique.
86Ces trois exemples indiquent que les modèles sont rarement parfaits et que les dispositifs de protection qui se fondent sur ces modèles offrent rarement des garanties absolues. Les modèles simplifient ou cachent un certain nombre de détails, par exemple la durée d’un calcul ou sa consommation de courant. Ces simplifications sont commodes mais dangereuses, comme nous l’avons vu. De même, les modèles laissent dans l’ombre des hypothèses sur le contexte du calcul qui sont nécessaires à son bon déroulement, alors que ce contexte peut être partiellement contrôlé par un adversaire. Si un adversaire imaginatif place un ordinateur sous une lampe chauffante ou lui envoie des messages de types inattendus, il se pourrait que l’ordinateur ne fasse pas ses calculs normalement, et que l’adversaire sache en profiter.
87Pourtant, les modèles, les dispositifs de protection et les preuves correspondantes ne sont pas tous complètement inutiles. Des modèles simples et des mécanismes de protection légers peuvent suffire quand les enjeux sont faibles ; contre des adversaires puissants et motivés, des modèles fins et des mécanismes plus coûteux deviennent nécessaires.
88Le cours traitera donc souvent des modèles de calcul, des règles de calcul, et aussi des fautes et des transgressions que ces règles devraient interdire, ou des failles dans les systèmes de règles. J’entends « règles » en deux sens.
Nous avons bien sûr les règles auxquelles les participants du calcul doivent obéir. Par exemple, certains usagers n’ont pas le droit d’accéder à certains fichiers. Ces règles peuvent être formellement énoncées et imposées, ou elles peuvent rester juste des usages ou conventions. Les règles sur le courrier électronique illustrent un continuum entre des règles nettes et des règles plus floues : il n’est pas de bon goût d’envoyer des messages d’un intérêt douteux pour leurs destinataires, mais il est relativement facile de le faire ; pourtant, quand le nombre de messages s’accroît, les messages deviennent tout simplement du spam, que nous tentons d’entraver, d’empêcher ou de punir.
Nous nous servons aussi de règles pour décrire ou spécifier le calcul. Ces règles sont parfois de simples règles arithmétiques, comme dire que 2 + 2 vaut 4. Elles sont parfois plus compliquées. Par exemple, dans les langages de programmation fonctionnelle, une règle permet de remplacer l’argument d’une fonction par sa valeur. (C’est la règle bêta, étudiée en détail dans le cours de 2009-2010 de Gérard Berry.) Ainsi, comme (λ x. √ x) dénote la fonction qui calcule la racine carrée de son argument, (λ x. √ x) (2) vaut √ 2. Le pi-calcul aussi a des règles qui décrivent la communication par des réécritures formelles, notamment la règle (ν c)(c̅〈M〉 | c(x).Q) → (ν c)(Q avec x = M) qui permet à Alice et Bob de communiquer dans notre exemple.
Ces règles constituent des modèles abstraits de calcul, plus ou moins éloignés de mises en œuvre concrètes sur de vrais ordinateurs. Ce sont des lois fondamentales qui fournissent les cadres dans lesquels les autres règles sont conçues, énoncées et comprises.
89Puisque les attaques peuvent souvent se placer en dehors de ces cadres, il est fructueux d’étudier systématiquement ce que les lois fondamentales disent mais aussi ce qu’elles taisent, ce qu’elles sous-entendent ou ce qu’elles ne permettent pas de dire. En tout cas, il me semble important de prendre au sérieux aussi bien les modèles de sécurité et les propriétés souhaitées que les attaques réelles ou possibles. C’est ce que je tenterai de faire dans le cours que nous commençons.
Conclusion
90J’ai rarement eu la possibilité d’assister physiquement aux cours du Collège de France. J’ai pourtant suivi quelques cours brillants par Internet, et j’ai aussi lu des leçons inaugurales, souvent pleines d’éclat et de savoir, qui renforcent la joie que j’éprouve à me trouver parmi vous cette année.
91Vers la fin de sa leçon inaugurale, Roland Barthes évoquait ses retrouvailles avec le roman La Montagne magique de Thomas Mann, qu’il venait de relire. Pour ma part, j’ai plutôt relu des articles de Butler Lampson et de Roger Needham, deux pionniers en sécurité informatique qui m’ont profondément marqué. Cette leçon même en porte bien des traces. J’ai aussi relu des articles de Robin Milner, un grand informaticien décédé en 2010. Milner était, entre autres choses, le principal créateur des calculs de processus, qui nous sont si utiles. Il soulignait l’importance de l’interaction dans la nouvelle informatique, et préconisait l’invention d’une théorie de l’interaction. Il promettait que ceci aurait tout autant de charme que d’inventer la science de la navigation quand on est déjà à bord d’un navire.
92Ce programme scientifique, encore inachevé, doit conduire en particulier à une meilleure compréhension de la sécurité informatique. Je tenterai d’y contribuer et de vous le faire partager.
Remerciements
Cette leçon porte sur des questions diverses auxquelles je me suis intéressé au fil des années mais, bien sûr, les idées, les techniques et les résultats présentés ne m’appartiennent pas exclusivement. J’ai cité quelques ouvrages qui pourraient servir de point de départ au lecteur qui souhaiterait en savoir plus, sans pourtant tenter de dresser une bibliographie complète. Je compte en citer d’autres pendant le cours. Pour la plupart, le lecteur devrait facilement trouver des précisions sur les sujets abordés dans cette leçon, sauf peut-être sur quelques détails (comme l’usage de RSA dans le botnet Storm, que je tiens de Brandon Enright).
Je suis reconnaissant à tous ceux qui ont bien voulu lire des brouillons de ce texte et qui ont suggéré des améliorations : Marcelo Abadi, Serge Abiteboul, Mathieu Baudet, Gérard Berry, Bruno Blanchet, Hubert Comon-Lundh, Véronique Cortier, Emmanuelle Fleury, Cédric Fournet, Fabrice Fries, Jean Goubault-Larrecq, Miguel Helft, Marc Kirsch, Jean-Jacques Lévy, Jean-Philippe Martin, David Pointcheval, Jean-Jacques Rosat, Jacques Stern et Ted Wobber.
Bibliographie
Ross Anderson, Security Engineering : A Guide to Building Dependable Distributed Systems, Wiley, 2e éd., 2008.
Gérard Berry, Pourquoi et comment le monde devient numérique ?, Collège de France / Fayard, coll. « Leçons inaugurales », no 197, 2008.
Gérard Berry, Penser, modéliser et maîtriser le calcul informatique, Collège de France / Fayard, coll. « Leçons inaugurales », no 208, 2009.
René Descartes, Les Passions de l’âme, deuxième partie, article lviii, in Charles Adam et Paul Tannery (éd.), Œuvres de Descartes, t. XI, Paris, Léopold Cerf, 1897-1910, p. 375.
Butler Lampson, « Computer Security in the Real World », IEEE Computer, vol. 37, no 6, juin 2004, p. 37-46.
Robin Milner, Communicating and Mobile Systems: the π-Calculus, Cambridge (UK), Cambridge University Press, 1999.
Marti Motoyama, Kirill Levchenko, Chris Kanich, Damon McCoy, Geoffrey M. Voelker et Stefan Savage, « Re : CAPTCHAs – Understanding CAPTCHA-Solving Services in an Economic Context », Usenix Security Symposium 2010 : http://www.usenix.org/events/sec10/tech/full_papers/Motoyama.pdf.
Alan Turing, « Checking a large routine », Report of a Conference on High Speed Automatic Calculating-Machines, 22-25 June 1949, University Mathematical Laboratory, Cambridge, janvier 1950.
Bruce Schneier, Secrets and Lies : Digital Security in a Networked World, Wiley, 2000.
Jacques Stern, La Science du secret, Paris, Odile Jacob, 1998.
Annexe
Leçon inaugurale de Martin Abadi, 10 mars 2011 : https://archive.org/details/CdfLiAbadi
Notes de bas de page
1 Gérard Berry, Pourquoi et comment le monde devient numérique, Collège de France / Fayard, coll. « Leçons inaugurales », no 197, 2008.
2 Par exemple, vers janvier 2010, Hotmail recevait 8 milliards de messages par jour dont 5,5 milliards étaient identifiés comme spam et bloqués. Ce filtrage massif de messages est efficace, mais ni parfait ni facile.
3 Dans le test de Turing classique, un humain tente de découvrir s’il parle avec un ordinateur ou avec un humain. Alan Turing proposa ce test dans un des articles fondateurs de l’intelligence artificielle en 1950. Dans un test de Turing inversé, un ordinateur tente de découvrir s’il parle avec un ordinateur ou avec un humain. Les Captchas sont un exemple de ce type de test.
4 Un article récent de Marti Motoyama et al., « Re : CAPTCHAs – Understanding CAPTCHA-Solving Services in an Economic Context » (Usenix Security Symposium 2010), fournit des chiffres précis et une analyse détaillée de cette méthode.
5 Le livre Security Engineering : A Guide to Building Dependable Distributed Systems de Ross Anderson (2e édition, Wiley, 2008) est un excellent point de départ pour aborder tant les aspects économiques de la sécurité informatique que de nombreuses questions techniques.
6 Des comparaisons de ce type sont développées dans l’article de Butler Lampson « Computer Security in the Real World » (IEEE Computer, vol. 37, no 6, juin 2004, p. 37-46) et dans le livre de Bruce Schneier Secrets and Lies : Digital Security in a Networked World (Wiley, 2000).
7 René Descartes, Les Passions de l’âme, deuxième partie, article lviii, in Charles Adam et Paul Tannery (éd.), Œuvres de Descartes, t. XI, Paris, Léopold Cerf, 1897-1910, p. 375.
8 Jacques Stern, La Science du secret, Paris, Odile Jacob, 1998.
9 Le livre Communicating and Mobile Systems : the π-Calculus (Cambridge University Press, 1999) est une introduction au pi-calcul par un de ses inventeurs, Robin Milner.
10 En général on écrit Q[M/x] plutôt que (Q avec x = M), comme en lambda-calcul. La variable x est littéralement remplacée par sa valeur M dans Q.
11 Gérard Berry, Penser, modéliser et maîtriser le calcul informatique, Collège de France / Fayard, coll. « Leçons inaugurales », no 208, 2009.
Auteur
Le texte seul est utilisable sous licence Licence OpenEdition Books. Les autres éléments (illustrations, fichiers annexes importés) sont « Tous droits réservés », sauf mention contraire.
Origine et histoire des hominidés. Nouveaux paradigmes
Leçon inaugurale prononcée le jeudi 27 mars 2008
Michel Brunet
2008
L’épidémie du sida. Mondialisation des risques, transformations de la santé publique et développement
Peter Piot
2010
Les nanotechnologies peuvent-elles contribuer à traiter des maladies sévères ?
Patrick Couvreur
2010
Des microbes et des hommes. Guerre et paix aux surfaces muqueuses
Leçon inaugurale prononcée le jeudi 20 novembre 2008
Philippe Sansonetti
2009
De l’atome au matériau. Les phénomènes quantiques collectifs
From the atom to matter. Collective quantum phenomena
Antoine Georges
2010