Cryptographie : quelques bases

L’objectif de ce billet n’est pas de vous transformer en experts en cryptographie internationalement reconnus, mais seulement de vous donner les quelques bases pour savoir de quoi ça parle. Vous saurez même la signification de plusieurs acronymes barbares tels que SSL, MD5, SHA, RSA, TLS, PKI ou AES. Vous pourrez même, je l’espère, briller un peu en société après la lecture de ces explications, ou, au moins, savoir de quoi on vous parle si le sujet est abordé.

Qu’est-ce que la cryptographie

CryptographieSimplement, l’objectif de la cryptographie est de protéger des messages. Principalement, il s’agit de les rendre incompréhensibles à toute personne a qui il n’est pas destiné.

La cryptographie existe depuis l’antiquité. Les égyptiens l’utilisaient déjà 2 millénaires avant JC.
Mais les techniques ont considérablement évoluées au 20ème siècle avec l’arrivée des algorithmes de chiffrement asymétriques et l’informatique permettant une chiffrement et un déchiffrement rapide malgré des méthodes de plus en plus complexes. On trouve d’ailleurs de plus en plus de circuits électroniques spécialisés pour le chiffrement et le déchiffrement.

Petite note : en bon français, on ne dit pas « crypter » et « décrypter » mais « chiffrer » et « déchiffrer ».

A quoi ça sert vraiment ?

Protéger un message ne signifie pas seulement de le rendre incompréhensible. En effet, on peut distinguer 3 types de protection:

  • La confidentialité : s’assurer que seul le destinataire puisse lire le message en le rendant illisible par d’autres.
  • L’authenticité : s’assurer que le message provient bien de l’expéditeur par une signature vérifiable.
  • L’intégrité : s’assurer que le message n’a pas été modifié depuis son envoi.

Lire aussi : La sécurité informatique, l’affaire de tous

Peut-on casser le chiffrement ?

Oui, on peut. Il y a plusieurs méthodes. En voici 3, même si il en existe d’autres.

La force brute

Force bruteIl s’agit de la méthode la plus simple. On essaye toutes les clés de chiffrement (voire tous les algorithmes si celui-ci n’est pas connu).
Mais attention, méthode simple ne veut pas dire rapide. En effet, il faut tester de manière exhaustive toutes les clés. Et les algorithmes actuels utilisent des clés dont le nombre de combinaisons dépasse (largement) le nombre d’atomes dans l’univers. La sécurité de ces méthodes s’appelle donc la sécurité calculatoire. On peut les déchiffrer, mais cela pourrait prendre trop de temps, des millions ou des milliards d’années au minimum avec les ordinateurs actuels. L’informatique quantique pourrait changer cela mais c’est un autre sujet.

La cryptanalyse

Sous ce terme, on regroupe l’ensemble des techniques permettant de retrouver un message en clair à partir du message chiffré, sans avoir la clé de déchiffrement.
Par exemple, la force brute est une des ces techniques. On y trouve toutes les attaques permettant de casser des méthodes de chiffrement, ce qui permet aux chercheurs en cryptographie de valider si les algorithmes sont solides ou non.
Parmi les méthodes, on peut trouver:

  • CryptanalyseL’analyse fréquentielle : on s’appuie sur la fréquence des répétitions des lettres du message chiffré pour en déduire la clé. Par exemple, en français, le E est la lettre la plus fréquente. Dans un algorithme par substitution comme le chiffre de César, un caractère qui revient fréquemment est potentiellement un E, ce qui permet de déduire le décalage et de décoder le message. C’est une méthode qui est inefficace contre les algorithmes modernes.
  • L’analyse par mot probable : on suppose probable l’existence d’un mot dans le message et on travaille dessus. Cette méthode est connue pour avoir permis le déchiffrement de la machine Enigma qui chiffrait les communications allemandes pendant la 2ème guerre mondiale. Comme toutes les communications allemandes étaient chiffrées, notamment à destination des sous-marins, les chercheurs ont supposé qu’il y avait, dans ce flot, des bulletins météo qui contiennent des informations normalisées. A partir de là, ils ont pu en déduire le système de chiffrement et décoder une grande partie des communications secrètes allemandes.
  • L’analyse par méthode auxiliaire : on s’accroche. Le principe est d’exploiter des propriétés inattendues des algorithmes de chiffrement. Ainsi, en exploitant la consommation électrique, le bruit, le temps de calcul, la fréquence du processeur, etc, on peut déduire des informations potentiellement précieuses pour décoder un message.

Il y a bien d’autres techniques, dont vous pouvez trouver une liste ainsi que des explications sur Wikipedia

L’homme du milieu

HackerLe principe est simple, même si la réalisation peut s’avérer plus compliquée.
L’attaquant se positionne au milieu de la conversation, sans que ceux-ci ne soient au courant bien sûr. Chaque correspondant échange avec l’attaquant, pensant de bonne foi parler avec son correspondant autorisé, transmettant les clés secrètes et les messages.
L’attaquant peut alors déchiffrer, voire modifier, les messages en toute discrétion.
Cette attaque met le doigt sur l’absolue nécessité de transmettre les clés par un canal sûr. Sans la clé, l’attaquant ne peut rien faire.

Avoir un diagnostic de votre système d’Information


Les types de chiffrement

Chiffrement faible

Machine EnigmaLes premiers systèmes de chiffrement datent de l’antiquité. Plutôt simples, il n’y avait généralement pas de clé de chiffrement, le secret résidant dans la méthode de chiffrement.
Jusqu’à l’arrivée de l’informatique et des messages numériques, les systèmes de chiffrement consistaient en des substitutions de caractères de l’alphabet. L’arrivée des machines de chiffrement (mécaniques ou informatiques) ont permis d’appliquer des méthodes plus complexes à déchiffrer.

Un des premiers systèmes connus est le chiffre de César (du nom de Jules) qui consistait en un décalage de 3 lettres dans l’alphabet. Ainsi, un A devient un D, un B devient un E et ainsi de suite. Pour déchiffrer, il suffisait d’appliquer la méthode inverse.

Par exemple, le message BONJOUR devient ERQMRXU, ce qui est moins lisible, vous en conviendrez.

Chiffrement symétrique

CryptageLe chiffrement symétrique s’appuie sur une méthode (un algorithme), qui peut être partagé et connu, et une clé. Le problème principal de ce système vient que la clé doit être secrète, faute de quoi n’importe qui pourrait lire le message, mais néanmoins échangée entre l’expéditeur et le destinataire.

Cette clé doit être donc transmise de façon sûre, ce qui peut s’avérer complexe, d’autant que pour assurer une vraie sécurité, il doit y avoir autant de clés que de correspondants.

Il y a de très nombreux algorithmes de chiffrement symétrique (qu’on peut trouver sur Wikipedia encore).

Certains algorithmes se révèlent faibles sur le plan de la cryptographie, car sensibles à la cryptanalyse ou simplement cassables (c’est-à-dire déchiffrables sans avoir la clé). Il convient donc, quand on travaille dans ce domaine, de suivre l’actualité et mettre à jour les algorithmes utilisés.

Un des algorithmes les plus sûrs et les plus utilisés en ce moment est l’Advanced Encryption Standard ou AES.

Les fonctions de hashage

Voici la définition d’une fonction de hashage d’après Wikipedia:

« On nomme fonction de hachage, de l’anglais hash function (hash : pagaille, désordre, recouper et mélanger) par analogie avec la cuisine, une fonction particulière qui, à partir d’une donnée fournie en entrée, calcule une empreinte servant à identifier rapidement, bien qu’incomplètement, la donnée initiale »

Je traduis: une fonction de hashage prend une donnée en entrée, un fichier, un message mail, une clé publique, a peu près n’importe quoi, en fait. Elle triture cette donnée dans tous les sens, la retourne, la tripatouille, et elle sort une donnée en sortie.

Quels sont les intérêts d’une telle fonction ?

  • La donnée de sortie dépend de la donnée d’entrée. Si on applique la fonction à 2 données identiques, on obtient la même donnée de sortie.
  • Le calcul de la donnée de sortie prend un temps négligeable. Il s’agit d’une fonction rapide.
  • La taille de la donnée de sortie est de taille raisonnable.

En gros, une fonction de hashage calcule une signature de la donnée d’entrée. Si deux données ont une signature différente, alors, elles sont différentes. Si elles ont la même signature, en revanche, il faut comparer les données d’entrée.

Les fonctions de hashage cryptographiques

Hashage cryptographiqueIl existe une sous catégorie des fonctions de hashage, les fonctions de hashage cryptographiques.

Les propriétés et contraintes sont plus importantes dans ce cas. Le résultat doit être de taille fixe, doit être calculé rapidement, doit être très difficile à inverser (donc pas possible de calculer la donnée d’entrée à partir de la signature), et toute modification même mineure de la donnée d’entrée implique une modification importante de la signature.

Des fonctions classiques de hashage cryptographique sont MD5 (pour Message Digest version 5) ou SHA (pour Secure Hash Algorithm). MD5 est de moins en moins utilisée car elle a été prouvée trop faible aux yeux de la cryptographie.

A quoi ça sert ?

Première utilisation possible, la vérification de l’intégrité d’un fichier ou d’un message. Il suffit de transmettre la signature de la donnée. En recalculant la signature et en la comparant à la signature transmise, on peut valider la non modification du fichier ou du message.

Autre utilisation possible, la vérification des mots de passe. En effet, il ne faut pas stocker les mots de passe en clair dans une base de données. En revanche, stocker une signature cryptographique de celui-ci permet la vérification du mot de passe avec le même niveau de sécurité. Pour information, il est important de « saler » le mot de passe avant hashage. Le « salage » consiste à concaténer la valeur à hasher avec une valeur non secrète, telle que l’identifiant de l’utilisateur. Cela permet d’obtenir une valeur de hashage différente si deux utilisateurs choisissent le même mot de passe.

Encore une possibilité, l’identification et la recherche de données ou de fichiers. En calculant la signature de la donnée et en la comparant à une base de données de signatures, on peut éliminer très rapidement des données dont on sait qu’elles sont différentes. Il ne reste alors que potentiellement peu de données à comparer réellement.

Chiffrement asymétrique

Kezako ???

Chiffrement protectionLe problème d’échange des clés par un canal sûr a mené au développement de la cryptographie asymétrique dans les années 1970 avec une première implémentation appelée RSA, des initiales de leurs créateurs Ronald Rivest, Adi Shamir et Léonard Adleman.

Vous pouvez penser à cette méthode de chiffrement comme une serrure à deux clés. Une fois la serrure fermée avec une des deux clés, elle peut être ouverte uniquement avec la deuxième clé. L’idée est donc de garder une des deux clés la plus privée possible et la deuxième clé la plus publique possible.

Pourquoi faire ?

Pourquoi, me direz-vous ? Tout simplement car ce système permet les 3 protections souhaitables en cryptographie. Explications:

  • Robert souhaite envoyer un message chiffré à Raymond. Il récupère la clé publique de Raymond, chiffre son message avec cette clé et l’envoie. Le seul moyen de déchiffrer ce message est d’utiliser la clé privée, que seul Raymond possède. Ainsi, Robert est sûr que seul Raymond pourra lire son message. C’est la confidentialité.
  • Raymond souhaite être sûr que le message provient de Robert. Robert enverra donc son message chiffré avec sa clé privée. En le recevant, Raymond récupère la clé publique de Robert et déchiffre le message. Si le message déchiffré n’est pas de la bouillie incompréhensible, signe d’un déchiffrement raté, comme seule la clé privée de Robert a pu le chiffrer, Raymond est sûr que c’est bien Robert qui a envoyé le message. C’est l’authenticité.
  • Robert et Raymond souhaitent être sûrs que le message n’a pas été modifié durant son transfert. Ils conviennent donc d’une méthode de calcul d’empreinte (dont nous avons parlé au chapitre précédent), Robert calcule l’empreinte du message et la chiffre avec sa clé privée. En recevant le message, Raymond va lui aussi calculer l’empreinte. Puis, ayant récupéré la clé publique de Robert, il déchiffre l’empreinte chiffrée envoyée par Robert. Si les deux valeurs obtenues sont identiques, Raymond est certain que le message qu’il a reçu est identique au message envoyé par Robert. C’est l’intégrité.

Il va de soi que cet exemple avec Robert et Raymond aurait tout aussi bien marché avec Alice et Eva. Aucun sexisme là dedans 🙂

Un peu de maths

MathématiquesPour les plus matheux d’entre vous, le système RSA fonctionne sur la difficulté qu’il y a à factoriser des grands nombres.

Donc, pour définir les clés publiques et privées, on choisit 2 nombres premiers distincts et très grands, et on calcule le produit des 2. Le résultat (un nombre forcément encore plus grand) est la clé publique. Un troisième nombre, calculé à partir des 2 premiers, est la clé privée. Ainsi, pour casser la clé, il faut factoriser la clé publique. Comme elle ne possède que deux facteurs (puisque c’est le produit de 2 nombres premiers), cette opération est longue, très longue, très très longue. Encore la sécurité calculatoire.

Bon, j’ai simplifié un peu l’algorithme qui fait intervenir l’indicatrice d’Euler, l’algorithme d’Euclide étendu et le théorème de Bachet-Bézout, mais c’est le principe. Vous pourrez trouver plus d’informations ici.

Il existe d’autres algorithmes de chiffrement asymétrique, notamment à base de courbes elliptiques. Je ne m’étendrais pas dessus, le niveau de mathématiques nécessaire pour le comprendre est plutôt trapu, il est juste bon de savoir que cela existe.

Des problèmes ?

Ce système de cryptographie se heurte quand même à deux problèmes.

C’est lent !!!

EscargotLe premier problème est qu’il est lent. Généralement, environ 1000 fois plus lent qu’un chiffrement symétrique.

Calculer sur des grands grands nombres a un coût…

Cela se règle plutôt simplement. Il suffit en effet de limiter le volume de données chiffrées par ce système. Le grand classique est donc d’utiliser la cryptographie asymétrique pour échanger une clé de chiffrement symétrique.

On cumule alors les avantages des deux systèmes, la sécurité de l’asymétrique, la performance du symétrique.

Certificats et tiers de confiance

IdentitéLe deuxième souci concerne la diffusion de la clé publique. Il faut en effet la sécuriser elle aussi, sinon, potentiellement, il y aurait une vulnérabilité à l’attaque par l’homme du milieu.

Si on peut gérer l’échange de clés plus ou moins facilement dans un environnement restreint (entreprise, famille, etc.), cela nécessite un cadre rigoureux si le public est plus large, comme par exemple et au hasard Internet.

C’est ainsi qu’est apparu la notion de certificats et de tiers de confiance.

Un certificat, c’est une sorte de carte d’identité électronique. Techniquement, elle contient la clé publique de l’entité, diverses informations comme le nom, l’adresse, une adresse électronique, etc, ainsi qu’un sceau. Le sceau est une signature de ce certificat authentifiée par un ou plusieurs tiers de confiance.

Un tiers de confiance, aussi connue sous le nom d’autorité de certification ou CA pour Certificate Authority, est une entité jugée fiable par les autorités publiques et/ou la gouvernance de l’Internet. Lors de la création d’un certificat, le CA vérifie les données, et signe avec sa clé privée le certificat qui est alors renvoyée au demandeur.

Les avantages de ce système sont multiples :

  • Le nombre d’autorités de certification étant peu élevé, les clés publiques de celles-ci sont généralement embarquées directement dans les logiciels grand public comme les navigateurs Web. Ainsi, le navigateur peut vérifier directement si le certificat reçu a été certifié ou non. Il est également possible de rajouter ses propres autorités de certification, permettant de créer ses propres infrastructures de clés publiques ou PKI (Public Key Infrastructure).
  • Les certificats ont une durée de vie limitée, et il est possible de les révoquer. Ainsi, si une brèche de sécurité est trouvée, il est possible de désactiver les certificats existants, refermant la brèche.
  • Le système de diffusion grand public des clés passe par les certificats sans forcer devoir monter de gros systèmes de diffusion de clés, tout en gardant un haut niveau de confiance.

Il est également possible d’auto-signer son certificat. Concrètement, le niveau de sécurité est moins élevé et ne satisfait pas tous les critères de la cryptographie. Néanmoins,bases de la cryptographie cela peut tout à faire suffire dans certains contextes bien définis.

Quelques applications

Sécurisons le Web

SSLAvant, les données circulaient toutes en clair, avec un protocole appelé HTTP pour HyperText Transfer Protocol. Une personne mal intentionnée pouvait (relativement) facilement intercepter les flux de communication et lire directement ce qui passait. Forcément, cela posait problème, notamment pour les paiements en ligne.

Est alors arrivée la spécification de SSL pour Secure Sockets Layer, ou pour les non anglophones Couche de Prises Sécurisées (Sur Internet, le terme Socket revient très très souvent quand il s’agit de connecter deux ordinateurs par le réseau). Il a été modifié par la suite pour devenir TLS pour Transport Layer Security. Pour les mêmes non anglophones, cela veut dire Securité de la Couche de Transport.

Il y a eu plusieurs versions, SSL 1.0 purement théorique, SSL 2.0 qui a été très largement répandu, SSL 3.0 qui a corrigé des problèmes de sécurité, TLS 1.0 qui a amélioré SSL, TLS 1.1 qui ajoute (et retire) certains algorithmes, TLS 1.2 qui fait de même. TLS 1.3 est la dernière version en date.

Le protocole s’appelle alors HTTPS, avec un S en plus pour Secure

Le principe est globalement le même dans toutes ces versions, les différences se situent globalement dans les choix d’algorithmes de chiffrement et de signature disponibles et des tailles de clés disponibles. Voyons un peu comment tout cela s’articule:

  1. Le client, c-a-d le navigateur Web, se connecte au serveur en demandant une connexion sécurisée.
  2. Le serveur répond avec son certificat.
  3. Le client déchiffre la signature numérique du certificat avec les clés publiques des autorités de certification qu’il intègre.
    1. Si la signature est correctement déchiffrée pour un CA donné, le navigateur interroge alors les serveurs de l’autorité en question pour vérifier la validité du certificat.
    2. Si aucun CA ne permet de déchiffrer la signature, le navigateur tente alors de déchiffrer avec la clé publique du certificat. Si cela réussit, cela indique un certificat auto-signé
    3. Si le certificat est validé, le navigateur affiche d’éventuels avertissements (certificat auto-signé, non valide, etc.). Sinon, la connexion ne peut aboutir.
  4. Le navigateur génère alors une clé de chiffrement symétrique qu’il chiffre avec la clé publique du certificat, et l’envoie au serveur.
  5. Le serveur déchiffre alors la clé de session avec sa clé privée. La communication est alors sécurisée.

La cryptographie asymétrique permet un échange sécurisé des clés, le chiffrement symétrique permet la confidentialité en gardant les performances, l’autorité de certification donne une assurance sur le sérieux de l’éditeur du site Web. Tout va bien.

On peut rajouter qu’il est également possible pour le client de transmettre son propre certificat personnel. Le serveur, en appliquant les mêmes techniques que décrites ci dessus, peut obtenir une authentification plutôt forte de la personne qui se connecte. Ce système est néanmoins peu utilisé.

Et les emails dans tout ça

EmailComme pour le Web, avant, les mails circulaient en clair sur le réseau.

L’arrivée de SSL puis TLS a permis la sécurisation de ces flux sans grande modification. Il faut appliquer, globalement, les mêmes étapes de négociation que pour le Web. Dès lors, le flux de données ne circulent plus en clair et si quelqu’un souhaite intercepter les données, il peut le faire mais ne saura les déchiffrer.

De plus, avec les messageries en ligne, le transferts des emails est chiffré de bout en bout. Le client se connecte en HTTPS (donc sécurisé) pour lire et écrire ses emails. Le serveur discute en sécurisé (grâce à TLS) avec les autres serveurs pour échanger des emails. Le destinataire lui aussi lit ses emails par un canal sécurisé.

Une autre application s’appelle DKIM, pour Domain Keys Identified Mail. Il s’agit d’un système de validation des expéditeurs d’email grâce à la cryptographie asymétrique.

Les utilisateurs valides s’identifient sur le serveur de mail d’envoi et demande l’expédition d’un message. Le serveur calcule une signature grâce à une fonction de hashage, la chiffre avec la clé privée du domaine, et envoie le tout ensemble. Le serveur qui reçoit ce message voit cette signature. Il va alors chercher sur le serveur DNS du domaine (serveur qui diffuse des informations publiques comme l’adresse du serveur de mail, du serveur web, et autres informations) la clé publique. Après, processus connu, il calcule la signature du message, déchiffre la version chiffrée et compare les deux. En cas d’égalité, le message acquiert un niveau de confiance plus élevé, et passe donc moins dans les spams. Une manière simple de professionnaliser vos emails.

The End

Voila, j’espère vous avoir apporté un peu d’éclairage sur cette science méconnue qu’est la cryptographie.
Si vous avez des questions ou des remarques, n’hésitez pas, la section commentaire est là pour ça.

Et bien sûr vous pouvez toujours prendre contact via notre formulaire


 

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Commentaire sur “Cryptographie : quelques bases afin de mieux comprendre”