dimanche 23 avril 2017

Sécurité Vol 3 - Les base en cryptographie - 2

La suite de la série d'article relative au vaste sujet de la sécurité. Nous allons parler de cryptographie et tenter d'apporter les notions essentielles à ce sujet

Précédent article de la série :
Sécurite - Vol 1 : définitions
Sécurité Vol 2 - Les base en cryptographie - 1

L'essentiel

La cryptographie permet tout simplement de transformer (chiffrer) une information pour la rendre illisible, sauf pour celui ou ceux qui dispose(nt) des informations nécessaires pour réaliser l'opération inverse (le déchiffrement) et la rendre lisible à nouveau.

L'opération qui part de la donnée initiale en clair et qui produit la donnée illisible est le chiffrement. La donnée transformée est dîte chiffrée. On utilise aussi souvent le terme cryptage : même si pour les puristes c'est une hérésie, ça semble accepté par le dictionnaire.

L'opération qui part de la donnée chiffrée et qui permet de retrouver la donnée initiale est le déchiffrement. Ici aussi on utilise souvent le terme décryptage mais là c'est carrément une erreur car la sémantique du mot "décrypter" est différente (expliqué plus loin).


Tous les enfants se sont amusés un jour à chiffrer un mot en transformant par exemple MOT en NPU : ici on a naïvement effectué un remplacement de chaque lettre par sa suivante dans l'alphabet. C'est un exemple d'algorithme très basique. On peut le rendre un poil plus complexe en ne remplaçant pas chaque lettre par sa suivante dans l'alphabet, mais par la niéme lettre suivante : si on dit n=2, A devient C, si on dit n=3 A devient D etc.... L'algorithme de chiffrement a ici une donnée supplémentaire qui est la clé de chiffrement.

Toujours avec ce même exemple naïf, la personne a qui est communiqué par exemple OQV (permutation du mot MOT avec n=2) doit savoir que l'algorithme utilisé est celui que nous venons d'expliquer et que la clé vaut 2, faute de quoi elle ne pourra pas déchiffrer le message. Dans la pratique, les algorithmes sont souvent connus et c'est la confidentialité de la clé qui est essentielle.

On voit donc que la clé requise pour le déchiffrement doit être connue du destinataire, et de lui seul si on veut garantir la confidentialité de la donnée : une personne qui intercepterait la donnée chiffrée ne pourrait la déchiffrer sans cela. Dans le cas où la cryptographie est utilisée pour garantir la confidentialité d'une donnée, le secret de la clé est primordial, et la transmission de la clé au destinataire une problématique (il ne faut pas qu'elle puisse être interceptée car sinon tout message qui serait à son tour intercepté pourrait être déchiffré). Nous avons ici parlé de la confidentialité mais nous verrons plus loin qu'il y a d'autres utilisations de la cryptographie.

L'algorithme que nous avons présenté est très simple, trop simple. Il est aisé de deviner que OQV correspond en fait à MOT, en s'appuyant sur diverses techniques s'appuyant par exemple sur la fréquence moyenne à laquelle on retrouve les différentes lettres de l'alphabet dans un texte. Cette opération qui consiste à "casser le code" s'appelle le décryptage, à ne pas confondre donc avec le déchiffrement.

Il existe heureusement des algorithmes, issus de la recherche mathématique, qui sont bien plus complexes et qui ne peuvent pas être percés sans devoir recourir à une puissance de traitement tellement colossale qu'elle est inatteignable d'un point de vue pratique. On a en fait une course à l'armement : du fait de l'augmentation de la puissance de traitement des ordinateurs, de la diminution du prix de ces derniers, et des possibilités offertes par les technologies actuelles de distribuer les calculs sur de nombreuses machines, il devient possible de casser (décrypter) certains algorithme qui doivent dès lors être abandonnés au profit de nouveaux algorithmes. Sachant que la difficulté dépend également de la longueur de la clé utilisée pour le chiffrement.

Symétrique / Asymétrique

Il existe deux familles.

Commençons par la cryptographie symétrique : la donnée est chiffrée et déchiffrée avec la même clé, partagée entre l'émetteur et le destinataire (2 dans notre exemple). C'est la forme la plus ancienne qui existe depuis l'antiquité au moins et qui est simple à comprendre. L'algorithme actuellement utilisé est AES (d'autres ont été utilisés par le passé et sont devenus caduques comme DES)

Mais il existe une forme plus récente qui est la cryptographie asymétrique. On dispose non pas d'une clé unique mais d'un jeu constitué de deux clés appairées. L'une est dite publique et l'autre est dite secrète. L'une sert à chiffrer et l'autre à déchiffrer, et vice-versa. Ce qui est chiffré avec la clé publique nécessite la clé privée associée pour le déchiffrement, et inversement ce qui est chiffré avec la clé privé nécessite la clé publique associée. Comme leur nom l'indique, la clé publique est destinée à être connue de tout le monde tandis que la clé privée ne doit être connue que de l'entité qui a créé le jeu de clé. La famille d'algorithme actuellement utilisée est RSA, c'est cet algorithme qui sécurise les transactions des cartes bancaires (au moins en France).

La cryptographie symétrique vise uniquement à la confidentialité des échanges entre deux correspondants. Elle implique que la clé soit partagée ce qui est une difficulté dans les échanges électroniques. D'une part en cas de stockage de la clé, il faut qu'il soit parfaitement sécurisé mais surtout car la transmission électronique de la clé au cours d'un processus automatisé constitue une faille potentielle : quiconque espionnant le dialogue pourrait intercepter la clé et dès lors la confidentialité ne serait plus garantie.

La cryptographie asymétrique permet bien sur d'assurer la confidentialité mais elle a aussi d'autres cas d'usage. Nous allons en voir trois.

La signature électronique

Dans le cas de la signature numérique, la clé privée est utilisée par le destinataire pour chiffrer un condensat (hashage, cf article précédent) de la donnée à certifier (par exemple une facture électronique ou un contrat).

Le condensat chiffré est diffusé avec la donnée certifiée qui n'a pas besoin d'être chiffrée (sauf si on veut en garantir la confidentialité par ailleurs). La clé publique étant par définition publique (sic), n'importe qui peut déchiffrer le condensat, il n'y a donc pas ici de confidentialité.

Mais par contre, en recalculant le condensat de la donnée initiale et en le comparant avec le résultat du déchiffrement du condensat chiffré, on peut vérifier que la donnée n'a pas été altérée (si la donnée a été modifiée, le condensat sera différent, si le condensat chiffré a été altéré, il ne pourra pas être déchiffré avec la clé publique).

Si le contrôle aboutît, on est certain d'une part de l'intégrité du message (le contrat ou la facture reçu est bien celui qui a été signé) et de l'identification de l'émetteur (il est le seul a disposer de la clé privé qui a été utilisée pour chiffrer le condensat, donc personne ne peut avoir signé à sa place). Ce sont bien entendu deux propriétés indispensables pour pouvoir disposer de signatures électroniques avec une valeur probante au niveau juridique.

Dernier point : pourquoi chiffre on un condensat de la donnée et pas le donnée elle même ? Ce serait plus direct et en outre on aurait du même coup la confidentialité de la donnée transmise. C'est dû aux limitations des algorithmes de cryptographie asymétrique qui ont des limites sur la taille maximale de la donnée à chiffrer et qui produisent une donnée chiffrée trop volumineuse. Un condensat est de petite taille (et de taille fixe) quelle que soit la taille de la donnée initiale.

La messagerie sécurisée

On est en plein dans l'actualité avec le retour du débat sur la sécurité vs la liberté dans nos démocraties modernes. Les techniques de cryptographie utilisées dans les what'sapp et autres applications modernes empêchent (en théorie) l'espionnage de nos communications ce qui est un gage de liberté (vous êtes protégés des grandes oreilles de l'état) qui est détourné par les organisations criminelles ou terroristes. Pour ces raisons, on a régulièrement des démagogues qui surfent sur la peur générée par daech & consorts pour essayer de faire passer des lois liberticides qui limitent les possibilités en matière de cryptographie (limites sur les algorithmes, sur la taille des clés, sur le stockage sécurisé des clés etc.).

Bref, le principe de fonctionnement est simple : vous voulez échanger avec quelqu'un et être sur que personne ne pourra vous espionner ? Votre destinataire calcule un jeu de clé et vous transmet la clé publique avec laquelle vous chiffrez votre message. Seul votre destinataire, qui est en possession de la clé privée, pourra déchiffrer le message. Si la clé privée est à usage unique et n'est pas conservée, et que le message n'est pas stocké, alors personne ne pourra espionner la conversation ni la récupérer ultérieurement sur votre appareil.

HTTPS

Le fameux https qui permet de faire des achats en toute confiance sur Internet...

En fait ce n'est en rien une garantie absolue car les pirates sont très astucieux mais c'est quand même un très bon niveau de sécurité et le compromettre demande quand même des moyens très importants.

Nous parlerons peut être de l'attaque Man In The Middle une autre fois (j'ai prévu de présenter une attaque récente de grande envergure qui a compris un grand établissement financier et qui a trompé tous les utilisateurs malgré l'utilisation de https).


Quand vous initiez une communication en https, le serveur web commence par vous envoyer un certificat SSL. C'est un fichier stocké sur le serveur web qui décrit l'organisation qui gère le serveur web.

Ce fichier est lui même accompagné d'une signature numérique qui permet d'en vérifier l'authenticité (il est signé par ce qu'on appelle une autorité de certification, l'équivalent par exemple du représentant assermenté de l'état qui a délivré et validé votre carte d'identité après avoir vérifié que vous étiez bien qui vous prétendiez). C'est le navigateur qui procède à cette vérification : le certificat est en effet signé avec la clé privée de l'autorité de certification et le navigateur a une base de donnée qui embarque normalement les clés publiques de tous les organismes de certification racine (je passe les détails). Ce sont les mécanismes de signature électronique expliqués plus haut.

Si le certificat est émis par une autorité non reconnue, votre navigateur vous affiche une alerte (site non sécurisé) et vous donne le choix entre continuer ou non, et en général il insiste bien pour que vous n'alliez pas plus loin (plus ça va et plus il faut insister avec les dernières versions de navigateurs). Ce type de problème est, et sera sans doute, de plus en plus fréquent : Google a révélé qu'une autorité de certification importante a été corrompue (des employés ont été corrompus et on délivré des certificats de complaisance, des vraies faux documents d'identité en quelque sorte) et que de façon plus générale elle n'était pas assez rigoureuse dans ses contrôles (pour augmenter sa rentabilité) et à invalidé les certificats émis par cette autorité ; la découverte récente que l'algorithme de hashage SHA-1 n'était plus fiable va provoquer l'invalidation de nombreux certificats dont la signature électronique s'appuie sur cet algorithme.

Ensuite votre navigateur et le serveur se mettent d'accord sur les algorithmes à utiliser : en effet, les navigateurs anciens n'implémentent pas les derniers algorithmes qui sont les plus sécurisés (on va se répéter, raison pour laquelle il faut maintenir vos logiciels à jour).

Ensuite le navigateur calcule une clé de chiffrement -symétrique- à usage unique (clé de session) qui va être utilisée pour sécuriser les échanges ultérieurs. Cette clé de chiffrement est ensuite elle même chiffrée avec la clé publique du serveur. Comment le navigateur connait il la clé publique du serveur ? Elle fait partie des informations présentes dans le certificat SSL. Si vous avez suivi ce qui est dis plus haut, nous venons de solutionner le problème de l'échange sécurisé de la clé dans le contexte de la cryptographie symétrique.

La clé est envoyée au serveur. Il connait (et il est le seul) sa clé privée et il peut donc déchiffrer l'information et retrouver la clé de session. On a utilisé ici de la cryptographie asymétrique.

Dès lors, le client (votre navigateur) et le serveur disposent d'un secret partagée qu'ils vont utiliser pour chiffrer leurs échanges via un bête mécanisme de cryptographie symétrique cette fois ci. Les raisons pour lesquelles on ne continue pas à utiliser la crypto asymétrique sont multiples : ces algorithmes font des calculs mathématiques très complexes qui prennent beaucoup de ressources, ils sont limités en taille etc.

Conclusion (temporaire)

Si vous avez compris tout ça, vous avez les connaissances de base utiles pour comprendre de nombreux aspects de la sécurité informatique. Il reste beaucoup à dire mais l'essentiel est là je pense.



Aucun commentaire:

Publier un commentaire