Cryptographie expliquée aux Michus

Cet article vise à apporter quelques notions de cryptographie aux béotiens qui en entendraient parler autour d’eux. L’idée n’est certes pas de faire un cours magistral, mais de poser des mots simples sur des acronymes tel que RSA, AES, x509, certificat, HSM…

Vocabulaire

Définitions approximatives de quelques termes

Crypté ou encrypté

Termes généralement utilisés par les personnes qui n’y comprennent rien. Vous devriez cesser de l’utiliser après la lecture de cet article.

Algorithme

Recette de cuisine arithmétique ou succession d’opérations arithmétiques. Une suite plutôt astucieuse d’opération de plus, moins, multiplier ou diviser.

Clé

Nombre plus ou moins grand (mesuré en nombre de bits) généralement issus de tirages aléatoires et d’un algorithme.

Chiffrer

Brouiller un contenu à l’aide d’un algorithme et d’une clé pour le rendre compréhensible que par ses seuls destinataires (cela peut être vous même).

Déchiffrer

Opération inverse du chiffrement lorsque l’on détient la bonne clé.

Décrypter

Opération (super balèze) inverse du chiffrement lorsque l’on ne détient pas la clé. On parle aussi de casser un code.

Signer

Utiliser les moyens cryptographique pour assurer que le contenu du fichier ou du message a été émis par la bonne personne, à une date donnée et n’a pas été modifié depuis. On parle de contrôle d’intégrité, de non-répudiation ou de scellement.

Type d’algorithme

Dans ce qui suit, le terme contenu désigne, au choix, tas d’octets, fichier, échange au cours d’une conversation, archive, image, vidéo,…

Pour les exemples d’algorithmes cités ci-dessous, il n’existe aucune preuve mathématique de leur robustesse. Nous savons juste que beaucoup de personnes ont essayé de les casser sans y parvenir. Les progrès mathématiques et l’augmentation de la puissance des ordinateurs rendent des algorithmes obsolètes (cassable dans un temps raisonnable, ceux que j’ai rayé).

Pour décrypter un contenu chiffré avec une clé secrète, il « suffit » de toutes les essayer, technique dite d’attaque par force brute. Plus la clé est longue, plus cela prend du temps. Pour des longueurs de clé raisonnables, cette suite d’essais peut prendre plusieurs fois l’age de l’univers sur un ordinateur individuel.

Chiffrement Symétrique

Un algorithme de chiffrement symétrique permet de chiffrer de déchiffrer avec une même clé tirée au hasard. Exemples : AES-256, RC4, RC5, DES, 3DES.

On ne peut pas retrouver la clé en comparant un contenu et sa version chiffrée.

Condensation

En anglais on dit « hash », on parle aussi d’empreinte numérique. À partir d’un contenu, il s’agit de calculer un nombre court (quelques dizaines d’octets). Une petite modification du contenu d’origine change complètement le résultat. Faites un essais . Il n’est pas possible de reconstruire un contenu à partir d’un condensat. Exemples : SHA-2, SHA-1, MD5.

Fin 2016, après un an de calculs, des chercheurs ont créé une collision SHA-1 : deux fichiers différents ayant le même condensat.

La condensation est aussi utilisé en dehors de la cryptographie pour vérifier l’intégrité d’un contenu. Pour le téléchargement de gros fichier, il est usuel de fournir le condensat (MD5 ou SHA-1) pour pouvoir s’assurer que la transmission n’a pas altéré le fichier.

Chiffrement Asymétrique

Ce type d’algorithme peut paraître magique. Deux clés liées sont générées à l’aide d’un algorithme. Les propriétés sont :

  • un contenu chiffré avec l’une des clés ne peut être déchiffré que par l’autre.
  • L’une des clés est largement diffusée (clé publique), l’autre gardée jalousement (clé secrète).
  • On ne peut pas déduire la clé privée de la publique.

Le plus utilisé de ces algorithmes est RSA et plus récemment des algorithmes basées sur les courbes elliptiques. Ces algorithmes sont consommateurs de ressources machine, à robustesse équivalente, ils sont 1000 fois plus lents que les algorithmes symétriques.

vecteur d’initialisation

Bon, ce n’est pas un algorithme, mais une astuce. Un vecteur d’initialisation ou nonce cryptographique (?) est un nombre aléatoire que l’on combine avec le début de contenu avant chiffrement, afin qu’un même contenu chiffré deux fois avec la même clé donne deux résultats différents. Ça complique les choses pour le méchant qui voudrait tenter une attaque.

Échange de clé

Messieurs Diffie et Hellman ont créé un algorithme qui permet de créer un secret partagé sur un canal public. Un tiers écoutant la conversation ne peut pas deviner la clé ainsi créée. Cet algorithme est largement utilisé pour échanger une clé jetable lors d’une conversation que l’on souhaite secrète.

Concept d’Usages

On pourrait tout faire avec un seul algorithme de chiffrement asymétrique. Malheureusement, ils sont gourmands en ressources machines. L’astuce consiste à les utiliser parcimonieusement sur de petits contenus intermédiaires et utiliser les algorithmes symétriques ou de calculs de condensat sur les gros contenus.

C’est là que l’embrouille commence.

Chiffrer un contenu pour plusieurs destinataires

La méthode inefficace consiste à chiffrer asymétriquement pour chaque destinataire le contenu avec sa clé publique. Il y a autant de contenus créés que de destinataires.

 

Comme les algorithmes de chiffrement asymétrique sont lourds, il vaut mieux chiffrer d’abord le contenu avec un algorithme symétrique et transmettre la clé de chiffrement comme ci-dessus. Les opérations de (dé)chiffrement lourdes (asymétriques) ne sont déroulées que sur la clé de chiffrement symétrique (quelques centaines d’octets). Les opérations légères (symétriques) sur le (gros) contenu.

Signer un contenu

La méthode inefficace consiste pour l’émetteur à chiffrer le contenu avec sa clé privée. Pour s’assurer que le contenu est bien émis par l’émetteur, le destinataire le déchiffre avec la clé publique de l’émetteur.

Là encore, utiliser un algorithme de chiffrement asymétrique est lourd. L’astuce consiste à adjoindre au contenu quelques information utiles (date, émetteur), de calculer un condensat du tout et de le chiffrer avec la clé privée de l’émetteur. Le destinataire pourra recalculer le condensat, déchiffrer celui reçu avec la clé publique de l’émetteur, les deux doivent être égaux.

La lecture du contenu par le destinataire ne nécessite par d’opération de déchiffrement. On peut aussi adjoindre autant de signataires que l’on souhaite.

Authentifier quelqu’un

Authentifier quelqu’un c’est vérifier qu’il est celui qu’il prétend être. C’est très simple : lui demander de signer un contenu aléatoire que vous lui transmettez.

chaine de confiance / certificat

Dans les trois exemples ci-dessus, je pars du principe que les protagonistes se connaissent et ont échangé au préalable leurs clés publiques de manière sûre. Pas par mail, hein ? Mais plutôt qu’ils se sont rencontrés physiquement. Sauf que sur le grand ternet, il y a tout plein de monde. Par exemple, je n’ai matériellement ni les moyens, ni le temps de rencontrer les webmestres des sites sur lesquels je me connecte et de leur demander les clés publiques de leurs sites. Comment s’en sort-on ?

Gonzague, mon voisin et ami, m’a donné sa clé publique avant de partir en voyage, au cours duquel il rencontre le grand Bob. Bob lui fournit sa clé publique, Gonzague signe la clé de publique de Bob. Bob peut alors me transmettre cette clé signée, détenant la clé publique de Gonzague, je contrôle la signature, je suis alors sûr de détenir la vraie clé publique de Bob, sans l’avoir rencontré. Gonzague joue le rôle de tiers de confiance. Je peux alors décider de faire confiance à Bob et accepter les clés publiques signées par lui. Ce qui crée une chaine de confiance. Dans la vraie vie du grand ternet, qui est Gonzague ?

Modèle PKIX

Dans le modèle PKIX, Gonzague sont les « autorités de certification ». Celle-ci après un contrôle de l’identité du demandeur signe un « document » contenant, le nom du demandeur, la date du document, d’autres informations techniques et surtout la clé publique du demandeur. Le tout s’appelle un certificat au format x509. Le système d’exploitation (Linux, Windows, MacOS, Android,…) de votre ordinateur vous est livré avec des autorités de certification reconnues. Vous faites de facto confiance à l’éditeur ou au distributeur de votre système d’exploitation et aux autorités de certification.

Il est abondamment utilisé pour l’authentification de site web en https (plus généralement pour TLS). L’une des autorités les plus utilisées est Let’s Encrypt car gratuite. Néanmoins, avec une centaine d’autorité de certification, ce modèle centralisé atteint sa limite.

DANE

Plutôt que de faire confiance à un éditeur ou un distributeur de logiciel et des autorités de certification parfois perfectibles et payantes, l’idée générale est de stocker le certificat dans un enregistrement DNS et signé avec DNSSEC. Malheureusement, l’usage de DNSSEC est peu répandu et les navigateurs ne supportent pas encore nativement ce protocole.

Le dossier thématique de l’AFNIC explique très bien les choses.

PGP

PGP est format d’échange de fichier ou de message pour assurer le chiffrement et la signature. Comme pour DANE, on peut stocker la clé publique dans le DNS, appuyé par DNSSEC. La solution la plus répandue est la participation à des « Key Signing Party » pour s’échanger ses clés publiques et les signer. Ainsi une clé PGP avec toutes ses signatures peut faire plusieurs centaines de ko.

Carte à puce / FIDO U2F

Utilisées pour l’authentification des utilisateurs, les cartes à puce et les clés USB « FIDO U2F » sont plus que des périphériques de stockage de clés. Après un éventuel déverrouillage avec un code PIN ou une empreinte digitale, elles chiffrent ou déchiffrent des contenus avec la clé privée qui y est stockée. Cette clé privée ne sort jamais de l’équipement. L’usage d’un microscope à balayage est recommander pour espérer lire la clé sur l’équipement.

HSM

Un HSM pour « Hardware Security Module » est un matériel réputé inviolable pour stocker des clés et assurer des opérations de chiffrement et déchiffrement. Un peu comme les cartes à puce, mais en beaucoup plus robuste et plus puissant. Les autorités de certification recourent à ce type de matériel.

Généralement, ils sont enfermés dans des bunkers et solidement gardés par des bulldogs et des belle-mères.

Stockage de mots de passe

Ben en fait, nan. On ne stocke jamais de mots de passe dans une application, mais uniquement leurs condensats. Quand un utilisateur transmet son mot de passe à une application, celle-ci calcul son condensat et le compare avec celui stocké.

Pourquoi ? En cas de compromission de la base de données de l’application, le méchant pirate ne récupère pas les mots de passe.

Fin

Voili voilou, en espérant que cela soit un peu plus clair.

 

Laisser un commentaire

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