Cryptography Engineering – Niels Ferguson, Bruce Schneier, Tadayoshi Kohno

Design principles and practical applications

Langue: Anglais
Parution: 2010

Je n’aime pas trop acheter ce genre de livre, surtout sur la sécurité informatique, car c’est souvent un domaine très théorique et incompréhensible et les livres sont souvent écrits par des chercheurs. J’ai acheté ce livre en combinaison avec un autre nommé Serious Cryptography parce qu’ils étaient tous deux très bien notés sur Amazon par beaucoup de gens, ce qui rassure un peu. Après avoir feuilleté les deux, j’ai vu que celui-ci contenait beaucoup moins de formules et paraissait plus abordable, je l’ai donc commencé en premier.


Autre point, il a été publié en 2010, ce qui représente une éternité en informatique. Un conseil, n’achetez jamais de livres aussi vieux pour de l’informatique sans savoir ce que vous faites, mais la cryptographie est un peu une exception, car très théorique – mathématique.

Concernant ce livre, tout d’abord les auteurs sont des machines de la cryptographie à un tel niveau que certains ont des pages Wikipédia, ce qui est un exploit pour des informaticiens. Niels Ferguson de Microsoft qui a travaillé sur WPA (le code que vous utilisez sur la box pour votre Wifi c’est en partie lui), Bruce Schneier sur TwoFish qui a failli être accepté comme standard de chiffrement par la NSA, et un Japonais professeur et chercheur à l’université de Washington.

Au niveau du format du livre, il est vraiment fait pour un étudiant en sécurité informatique qui va le lire chapitre par chapitre avant un cours et faire les exercices en entier à chaque chapitre (5 à 10 exercices), le tout sur un semestre entier. Je ne me suis pas amusé à faire les exercices sinon j’en aurais eu au moins pour 3-4 mois à temps plein mais nul doute que ça aurait amélioré mes compétences dans le domaine.

Pour aller dans le contenu, il y a tout le début du livre qui est très accessible, et la fin qui l’est également. Pour le reste, il faut un peu s’accrocher et il y a deux chapitres et particulièrement un où je me suis retrouvé largué (celui sur le chiffrement RSA ou j’ai fait une overdose de maths, dommage, car le chiffrement RSA est très utilisé). Les exemples sont souvent montrés avec des implémentations théoriques d’algorithmes, je pense qu’il aurait été mieux qu’ils mettent des exemples plus concrets dans un langage de programmation en particulier. Bref un peu trop de maths au milieu.

Je ne peux pas m’étendre sur toute la technique du livre, mais je vais donc parler de ce que j’en ai retenu en général pour faire un bon système informatique sécurisé. Les non-informaticiens pourront, je l’espère, avoir une compréhension plus réaliste du milieu, après avoir lu ce qui suit.

Vous avez une entreprise de haute voltige dans les services financiers qui gère des milliards. Votre sécurité informatique doit être irréprochable et vous engager le top des ingénieurs de la NSA pour implémenter les meilleurs algorithmes de chiffrement. Tout est sécurisé, vous vous sentez le maître du monde et vous voyez déjà les hackers russes se casser les dents sur votre système. Malheureusement, votre secrétaire pas formée a la sécurité informatique avait laissé son ordinateur allumé, et le mot de passe de votre compte bancaire d’entreprise était noté sur un pense-bête sur l’ordi, et un petit malin qui passait par là vient subrepticement de vous subtiliser votre argent. Bienvenue dans le domaine de la sécurité informatique, les auteurs nous apprennent la plus grande leçon : votre véritable niveau de sécurité est celui du maillon le plus faible de votre système.

Rien n’est infaillible, il faut donc penser au point les plus vulnérables. Rien ne sert de mettre des portes blindées pour protéger vos locaux si la porte à l’arrière du bâtiment est ouverte. C’est du bon sens, mais la réalité rattrape toujours notre imagination.

La vraie philosophie d’un cryptographe, c’est d’être pessimiste : vous devez penser que tout ce qui peut mal se passer va se passer. Si vous établissez une communication entre vous (Bob) et une autre personne (Alice), vous devez imaginer un scénario où Eve peut se situer au milieu et intercepter les messages pour se faire passer pour Alice, qu’elle peut les modifier, et que même Alice pourrait être malveillante envers vous. En bref, la confiance dans les autres ne doit pas exister et on doit prévoir tous les scénarios possibles.

Le programmeur, lui, est déjà content de faire quelque chose qui fonctionne dans la majorité des cas, ce qui le rend de facto incompatible avec la cybersécurité. Imaginez la difficulté de construire un système robuste et sécurisé, quand vous avez en plus des impératifs de date de publication. C’est d’ailleurs pour cela que beaucoup de systèmes se font hacker : la sécurité est un luxe dont les businessmen en costard ne peuvent se permettre. Lorsque le problème survient, il est souvent trop tard. J’ai un bon exemple inverse personnel ou un développeur informatique était spécialisé dans la sécurité : le système était tellement robuste qu’il a perdu trop de temps et qu’ils ont fait faillite avant qu’il soit sorti. Tout est une question d’équilibre en fonction du type de site que l’on veut.
Si l’on veut construire des systèmes robustes, il faudrait multiplier le temps par 5 rien que pour la sécurité, pour aucun résultat visible, si ce n’est une chance un peu moindre de se faire hacker. Cette caractéristique coûte énormément de temps et d’argent, par exemple dans le domaine de la crypto-monnaie et de nombreux hacks sont encore à venir. Rien qu’en 2021, 3 milliards de dollars se sont fait pirater (je vous conseille le site https://rekt.news/, pour comprendre à quel point le hacks sont fréquents). Binance, le plus gros exchange du monde, s’est fait voler 500 millions il n’y a même pas quelques mois, pour faire simple à cause d’un bug dans leur code. Il n’y a pas de solution miracle, il faut établir des scénarios tolérables ou non et accepter les risques auxquels on s’expose.

Ce qu’on comprend avec ce livre, c’est que rien n’est sécurisé. À partir du moment où vous êtes connecté à internet, vous êtes une cible potentielle pour les autres. C’est pour cela que vous devez faire particulièrement attention dans les espaces publics type aéroports, cybercafé, etc. car des personnes peuvent venir avec leurs ordinateurs tracer tout ce qui se passe sur le réseau wifi (voir créer un faux réseau qui ressemble a celui de l’aéroport)

Vous pouvez également oublier la vérification biométrique : ce n’est pas fiable et c’est assez facile à hacker. Cela reste un bon moyen pratique uniquement si c’est combiné à d’autres moyens de protection.

Autre point que les gens ne savent pas, mais l’aléatoire n’existe pas en informatique, on simule souvent quelque chose proche de l’aléatoire, mais cela ne l’est pas réellement, ce qui peut être un point d’attaque.

Les horloges sont aussi un point d’attaque. Si par exemple, vous arrivez à modifier la date d’un serveur d’un site, vous pouvez avancer la date et invalider toutes les cartes bancaires. Si vous recevez un virement effectué à 0 h 00 pile, vous pouvez rejouer ce scénario pour récupérer de l’argent en illimité. En reculant la date, vous pouvez récupérer un accès qui vous avait été supprimé…

Parmi les autres problèmes, on peut citer également les ordinateurs modernes qui utilisent des systèmes de cache (stockage temporaire), ce qui fait que tout n’est pas forcément effacé même si on le pense. Sur un disque dur ou même une RAM, rien n’est jamais vraiment effacé, il faut donc faire aussi attention.

Concernant les algorithmes, tout est une question de rapport sécurité/performance. Techniquement, tout algorithme peut se hacker, mais cela peut prendre des milliers d’années. Le problème est que c’est souvent lié à la performance et ce qui est vrai aujourd’hui ne l’est pas demain. Souvent la sécurité d’un système de chiffrement correspond au temps qu’il faut pour le craquer par “bruteforce” (essai de toutes les solutions possibles)

J’ai également appris sur comment attaquer un système, et certaines choses sont très ingénieuses. Par exemple, lorsqu’il y a des renvois d’email automatiques type “Je suis en vacances du 3 au 17”, on peut connaître à la fois le contenu chiffré et non chiffré, ce qui peut nous aider à reconstituer la clé de chiffrement et accéder à tous les messages. On peut aussi faire des attaques sur le temps : si par exemple, vous avez un code pin à 6 chiffres et que le développeur vérifie chiffre par chiffre pour optimiser, vous pouvez détecter que le temps de réponse est plus rapide si le premier chiffre est mauvais. Grâce à cela, vous pouvez deviner lequel est le bon chiffre (celui ou l’algorithme met plus de temps) et procéder de même pour chaque chiffre. Au lieu de 9 * 9 * 9 * 9 * 9 * 9 = 531441 essais, vous n’en aurez besoin que de 54. Les attaques sur les temps de réponses sont aussi beaucoup utilisées par les hackers, à vous d’y penser à la construction de votre système.

Ils dénoncent aussi les standards qui sont souvent écrits par des gens qui ne sont pas les meilleurs, qui font des trucs incompréhensibles et impossibles à utiliser. C’est en partie ce que j’ai bien aimé dans ce livre, il est écrit par des gens brillants et lucides sur le monde et d’autres parties du livre, notamment sur la confiance, sont remarquables.

En résumé, ce livre est assez difficile par moments, mais il en vaut la peine pour découvrir la sécurité et la cryptographie. J’ai découvert pleins d’aspects de la sécurité et d’attaques possibles, et cela m’a donné envie de regarder des livres pour faire du hacking offensif.