Peut-on faire confiance aux ordinateurs?

Par Antoine de Saint Germain

Charles Babbage et Ada Lovelace. Ces noms ne vous diront peut-être rien, mais ce sont des générations entières – jusqu’à vous, fidèle lecteur du Journal – qui ont été affectées par leurs travaux. En effet, ces deux mathématiciens sont responsables de l’invention de l’ordinateur (appelé « machine analytique ») et du premier programme informatique. C’était au XIXème siècle.

Premier ordinateur, la « machine analytique »

Les temps ont bien changé. Depuis, on a vu passer les Alan Turing, les Tim Berners-Lee (inventeur du World Wide Web), les Bill Gates… Il y a sans cesse de nouvelles inventions, avec l’IPod (2001), Skype (2003), Youtube (2005), ou même la voiture sans conducteur de Google (2015) pour n’en citer que quelques unes. En réalité, la liste n’en finit pas, et le progrès informatique non plus. C’est un phénomène sans précédent, qui ne se limite pas qu’aux gadgets et aux moyens de communications. Aujourd’hui, la technologie s’est infiltrée dans chaque aspect de notre vie ; il est inconcevable que l’on puisse vivre sans. Quoi qu’en disent les irréductibles qui refusent d’acheter les derniers Smartphones ou Mac Book en disant qu’ils n’aiment pas la technologie, tout le monde en dépend. Sans ordinateurs, plus de banques, plus de feux routiers, plus d’hôpitaux opérationnels, plus de vols aériens, plus de marchés financiers…

Il semblerait presque ironique donc, que ces machines – qui sont le fondement de notre quotidien – ne soient pas source de confiance totale. En effet, pourquoi stocker et traiter les informations primordiales des personnes privées et publiques dans des ordinateurs, si l’on n’est pas sûr de la fiabilité de ces derniers ? C’est le paradoxe du monde dans lequel on vit. On fonce tête baissée vers un monde 100% informatique sans vraiment en contrôler le progrès. Peut-on et doit-on donc faire confiance aux ordinateurs ?

Pour bien comprendre l’enjeu des ordinateurs, et les problèmes qu’ils peuvent engendrer, il faut comprendre qu’ils sont composés de deux parties assez distinctes : le hardware, et le software.

Les deux composants de l’ordinateur, le hardware et le software

Le hardware est tout le matériel tangible d’un ordinateur (souris, clavier, moniteur, RAM, Disque Dur, Carte mère, etc.). Depuis les années 1960, l’industrie du hardware a progressé de manière phénoménale. UCL par exemple était équipé, dans les années 60, d’un seul ordinateur (IBM 360/65) d’une valeur de 30million de livres, avec une mémoire morte de 128Kb. Pour ceux qui ne visualisent pas cette quantité, pensez qu’une chanson sur iTunes nécessite, en moyenne, 3.5Mb de stockage, c’est à dire environ 30 fois plus de mémoire morte que cet ordinateur. Pour seulement une chanson !

Le software, quant à lui, correspond à l’ensemble des programmes d’un système informatique (Google Chrome, Word, toutes nos applis IPhone ou Android, FIFA 15, etc.). Et c’est le software qui est à la base de la grande majorité de nos problèmes informatiques aujourd’hui.

Il est estimé, selon Steve McConnell, que pour 1000 lignes de code informatique, il y a entre 15 et 50 fautes (potentiellement graves). Et en sachant que certains programmes font presque 10millions de lignes, ça fait beaucoup de fautes. De plus, pour un site web quelconque, il est estimé que 95% de ces fautes sont des défauts de sécurité (Watts Humphrey) – potentiellement exploitables par un hacker. Siemens, Ashley Madison, TJ Maxx, Mastercard, Visa, Sony sont quelques exemples de victimes d’attaques, rendues possibles par une grande quantité de défauts facile à exploiter. Les défauts peuvent même être mortels comme la crise de la Therac-25, qui tua 3 personnes. Nous verrons, en fin d’article, un exemple très basique de programme et nous analyserons ses défauts potentiels.

Alors, que faut-il faire ? Éteindre son ordinateur, couper toute communication, et aller s’enfouir dans un chalet en Lozère chez sa grand-mère ? Surement pas ! L’une des raisons pour laquelle le software comporte tellement de défauts aujourd’hui, repose essentiellement dans le fait que le « software engineering » (la programmation) n’est justement pas perçue comme un métier d’ingénieur. Beaucoup de programmeurs négligent l’importance de la programmation dite formelle, entièrement rigoureuse et très fastidieuse, mais très sûre. Comme l’industrie est encore très nouvelle, nous vivons dans une époque frénétique, où chaque entreprise cherche à développer une nouvelle idée géniale, au dépends de la sécurité ou la stabilité des programmes.

L’autre raison pour laquelle le software est si mal programmé est l’Open Source (partage de tout fichier, document, etc.). C’est l’une des idées fondamentales de l’Internet qui malheureusement s’avère être à double tranchant. En effet, chaque nouveau site, chaque nouvelle découverte, chaque création peut devenir absolument libre de tous droits d’auteurs. Pour vous donner un exemple, si vous voulez créer un site web, rien ne vous empêche de vous inspirer du code d’autres sites, et si le site est open source, d’en copier des lignes de codes entières. Et ainsi de suite, pour le prochain qui verra votre site. Ainsi, chaque erreur, ou défaut présent dans le premier site, a beaucoup de chances d’être dupliqué et amplifié au fil du temps, ce qui amène à des sites web très mal sécurisés, ou très mal programmés.

Voici un programme basique inventé de toute pièce. Le but est de vous montrer que, même en quelques lignes, un programme peut comporter pleins de défauts :

Sans titre

– On demande à l’utilisateur de donner une valeur à x et à y

– Ensuite l’ordinateur fait la division x divisé par y, et affiche le résultat.

– Remarquez que les variables x, y et z sont définies dans ce programme comme étant des « integers », ou nombres relatifs.

Un exemple qui marche sans problème serait :

Donner une valeur pour x :   12

Donner une valeur pour y :   4

La valeur de x/y est :          3

L’utilisateur choisit les nombres x=12 et y=4, le programme calcule la division 12/4, et renvoye la valeur 3.

Maintenant, imaginons que vous êtes fourbe, et que vous voulez faire planter le programme (ce qu’on appelle donc des défauts).

Que se passe-t-il si vous donnez la valeur 3,5 à la variable x ? Ou π?

Ces nombres ne sont pas des nombres relatifs, du coup le programme plante. Il faut donc changer la ligne 1 du code pour pouvoir accommoder tous ces nombres. C’est un premier défaut.

Que se passe-t-il si vous donnez la valeur 0 à la variable y ?

On aurait x/0 , ce qui n’est pas possible ! La encore, votre programme plante. Il faudrait donc ajouter une ligne de code pour vérifier que la valeur de y entrée par l’utilisateur n’est pas 0…

Que se passe-t-il si vous mettez un mot à la place d’un chiffre pour la variable x ?

Par exemple, mettez abcd quand l’ordinateur vous demande la valeur de x, et y=5. Le programme va ensuite essayer de diviser abcd par 5. C’est aussi impossible ! En 9 lignes de code, nous avons potentiellement trouvé 3 erreurs qui feront planter le programme.

Cette négligence est directement liée aux problèmes de cyber-sécurité, aux vols de propriété intellectuelle ou personnelle, en passant par des risques de santé (pour ceux qui regardent la série Homeland, les cœurs artificiels sont particulièrement vulnérables).

Un des exemples les plus connus, qualifié aujourd’hui de Cyber arme, est le programme Stuxnet, utilisé par la NSA pour détruire les centrifugeuses iraniennes.

En somme, méfiez vous des ordinateurs, ne faites pas confiance de manière aveugle à ces machines truffées d’erreurs, et rappelez vous que votre meilleur atout demeure quand même votre cerveau.