Sécuriser ses communications électroniques [1]

sécurité 21 janv. 2014

Grande question du moment, n’est-ce pas ? Eh bien voilà. Sans avoir la prétention de vous donner un guide complet, j’aimerais vous donner les bases (et l’envie) nécessaire à la bonne compréhension de la sécurité de vos données, qu’elles soient personnelles ou professionnelles. Le « [1] », c’est parce que cet article est le premier d’une série, le tout est en cours de rédaction depuis un bon moment dans le plus grand secret (ok, avec un poil de manque de motivation par moments) et ne demande qu’à être amélioré par vos suggestions.

Quoi qu’il en soit, et malgré ce que vous pourriez penser de prime abord, c’est avant tout un premier article destiné aux néophytes. Bien sûr, ça se complexifiera au fur et à mesure, quand les bases auront été intégrées… 😉

On se lance ?!

 

Introduction à la cryptographie

(c’est le titre de l’article, en vrai :mrgreen: )

 

Introduction et généralités

Ouais, on commence tout de suite avec un gros mot : « cryptographie », qui nous vient du grec (kruptos (caché) et graphein (écriture)). C’est la branche des Sciences qui traite des codes et écritures secrets. Ce sont en fait des mathématiciens (les « cryptographes ») qui créent ces codes et surtout testent leur résistance (est-il possible de les casser ? Si oui, est-ce long/compliqué ?) ; ces derniers tests sont une autre branche que l’on appelle la « cryptanalyse », et qui est clairement indissociable du sujet qui nous intéresse ici.

Ce qui nous amène à un petit point de vocabulaire !

La cryptographie, c’est hyper large, mais on distingue deux grandes familles : la cryptographie dite « symétrique », et celle dite (devinez ?) « asymétrique ». Je vais essayer d’expliquer en quoi cela consiste, mais avant, il faut que je vous présente deux amis que vous risquez de croiser partout si vous cherchez des infos supplémentaires : Alice, et Bob.

C’est tout bête : pour expliquer ce qu’il se passe et qui fait quoi, on prend l’exemple d’échanges entre deux personnes : A(lice) et B(ob). C’est tout. Non, il n’y a aucune secte derrière tout ça, et Alice et Bob ne sont pas présents aux RMLL ou autres salons auxquels vous devriez vous rendre au moins une fois dans votre vie.

 

La cryptographie symétrique

C’est la plus simple à comprendre. La clé qui permet de chiffrer/déchiffrer est, dans ce premier cas, identique et partagée entre Alice et Bob. Exemple tout moche (et pas totalement applicable, mais on rentre dans les détails là) : Alice compresse un fichier dans une archive avec mot de passe : « poulet ». Pour décompresser l’archive, Bob devra entrer le même mot de passe, et pas un autre.

C’est le système le plus connu, parce qu’utilisé depuis trèèèès longtemps. Les opérations mathématiques utilisées sont simples : permutation circulaire, rotations… qui sont appliquées au texte en clair. Le chiffrement par décalage est un bon exemple : c’est le code utilisé par Jules César pour communiquer des informations précieuses. Il prenait une lettre, et la décalait de 3 vers la droite. C’est cette info qui représente la clé : 3 vers la droite. Sans ça, le message intercepté était incompréhensible, et le décrypter demandait un temps considérable (bah oui, pas d’ordinateurs…). Aujourd’hui, avec un peu d’analyse fréquentielle (les lettres qui reviennent le plus souvent : décaler les lettres ne fait que décaler les fréquences, pas les modifier), c’est l’histoire de quelques minutes maxi.

Pour vous donner un petit exemple : un ex-excellent algorithme symétrique fut le DES (Data Encryption Standard), qui est resté inviolé pendant 25 ans environ. Et en 1999… boum. Les ordinateurs avaient évolué, la puissance de calcul avec, et les supercalculateurs en réseau sont venus à bout de DES en quelques heures seulement.

 

La cryptographie asymétrique

Là, on complexifie un peu la chose. Ce système est aussi appelé « système à clé publique », et je vais vous expliquer pourquoi.

La spécificité de ce système, c’est que chaque utilisateur possède son propre trousseau de clés, supposé unique. Ce trousseau est constitué d’une partie publique (la clé publique) et d’une autre qu’il doit garder secrète (la clé privée). Les clés publiques sont conservées (si l’utilisateur le choisit, m’enfin c’est aussi un peu le principe…) sur un gros « annuaire » en ligne : un PKI (pour Public Key Infrastructure, en français ICP pour Infrastructure à Clés Publique). Sur cet annuaire, on peut rechercher une clé et l’ajouter à son propre trousseau pour pouvoir écrire au propriétaire de ladite clé, en chiffrant le message au passage.

Comment ça marche ?

  • Lorsque Alice chiffre un message/fichier pour l’envoyer à Bob, elle utilise la clé publique de Bob. Ainsi, seule la clé privée de Bob saura déchiffrer le contenu.
  • Lorsque Alice signe numériquement un message (on reviendra à la signature et à quoi ça sert un peu plus tard), elle utilise sa clé privée. Bob devra utiliser la clé publique d’Alice pour vérifier que la signature est valide.

Sur le principe, c’est un peu comme si vous mettiez dans votre entreprise une caisse où chacun dépose des cadenas dont il est le seul à avoir la clé. Tout le monde peut prendre un cadenas et fermer une boîte dont vous êtes le destinataire, vous seul pourrez l’ouvrir.

Un des algorithmes les plus utilisés est le RSA (oui parce que dans le milieu, on nomme souvent les algorithmes par les initiales de leurs inventeurs : RSA, pour Ronald Rivest, Adi Shamir et Martin Adleman), d’autant plus que le brevet qui le couvrait est tombé dans le domaine public.

Un exemple de message chiffré avec GPG
Un exemple de message chiffré avec GPG

 

Pourquoi tout ce bazar ?

Dans la vie de tous les jours, vous pensez peut-être ne pas avoir besoin de toutes ces histoires de cryptographie et de clés publiques/privées. Et pourtant… La cryptographie répond à des besoins réels, que vous préférez ignorer. En particulier, revenons sur 3 d’entre eux :

  • l’authentification ;
  • l’intégrité ;
  • la confidentialité.

 

Authentification

Ça, c’est a priori un truc que vous maîtrisez : on vérifie que la personne avec laquelle on communique est bien celle avec laquelle on pense communiquer. Vous le faites constamment sans vous en rendre compte : vous reconnaissez l’écriture ou la signature de parents, vous identifiez la voix de vos amis au téléphone, vous mémorisez le visage de vos interlocuteurs…

Et dès lors que ces infos sont indisponibles, dans le cas d’un mail par exemple : vous faites comment ? Vous avez juste du texte brut… C’est impossible.

C’est là que la cryptographie entre en jeu. Lorsque j’envoie un mail, je le « signe » avec ma clé privée : une « empreinte » est alors ajoutée à mon mail, et le destinataire peut utiliser ma clé publique pour la vérifier. Si elle est valide, je suis bien l’expéditeur du mail. C’est comme si vous mettiez un coup de tampon à un courrier, quoi !

 

Intégrité

Là, c’est légèrement plus subtil : le problème visé est l’altération (volontaire ou non) de votre message/fichier au cours de son transfert sur le réseau. Qui vous dit qu’un tiers entre vous et votre destinataire ne va pas ouvrir votre message, en modifier le contenu (même juste quelques lettres, pour en changer le sens) et le remettre au destinataire comme si de rien n’était ?

Encore une fois, la cryptographie règle ce problème. Elle n’empêche pas le tiers de lire/modifier le message, attention, mais elle vous permet de dire si ce qui arrive jusqu’à vous est dans le même état que lors de l’envoi.

Imaginons que j’envoie (encore) un courriel. Je vais calculer son empreinte avec ma clé privée, empreinte qui sera ajoutée au message, et ma clé publique permettra de vérifier qu’aucune modification n’est intervenue.

Autre exemple, réel cette fois. J’ai envoyé un fichier bidon au format ODT sur Facebook, visible de moi seul, après avoir calculé son empreinte. Je l’ai téléchargé le lendemain, et miracle, la vérification d’intégrité a échoué : bien qu’étant en apparence le même, le fichier a dû être ouvert (par une machine probablement) sur les serveurs de Facebook, suffisamment « violemment » pour écrire dans le fichier…

Pour vous donner une image (j’aime ça, si vous n’aviez pas compris) : c’est comme si j’envoyais une carte postale après l’avoir plastifiée. Sûr que le facteur peut tout de même la lire, mais il ne peut rien faire de plus : s’il abîme le plastique, ça va se voir !

 

Confidentialité

C’est le dernier volet qui nous intéresse ici. Ce coup-ci, on se protège contre les lectures non-autorisées : on chiffre le message afin que personne ne puisse en prendre connaissance, sauf le(s) destinataire(s).

Dans ce cas, on chiffre avec la clé publique du destinataire, et seule sa clé privée pourra faire l’opération inverse pour lui fournir le message en clair.

Là, le principe en jeu est celui explicité plus haut : vous mettez votre lettre dans une boîte, vous fermez par cadenas, et seul le destinataire en possède la clé.

 

Bonus

Ces trois services de sécurité sont cumulables : ainsi, lorsque j’envoie un mail à @Zilkos par exemple, mon courriel est signé de façon à garantir mon identité, haché (les fonctions de hachage servent à calculer l’empreinte d’un contenu : si je modifie le contenu, l’empreinte change) pour lui indiquer que rien n’a changé au cours du transfert, et chiffré pour que lui seul puisse prendre connaissance du message ultra-confidentiel que j’ai à lui passer.

 

C’est bien beau, mais en pratique ?

La théorie c’est cool, mais c’est pas suffisant pour se protéger. Il faut quand même générer son trousseau de clé, choisir quels algorithmes utiliser, et surtout faire en sorte que ce soit pas trop chiant à utiliser ensuite. Je veux dire par là que ce soit intégré le plus simplement possible à vos outils habituels : je me souviens au début d’Android, APG (un logiciel capable de gérer mon trousseau de clés pour signer, chiffrer, tout ça) était bien distinct de mon client de messagerie. Je devais ouvrir le mail, en sélectionner tout le contenu, copier-coller ça dans APG, et valider… Maintenant, K9-Mail fait toutes ces manips à ma place et intègre un petit bouton « Déchiffrer ». Avouez que c’est mieux 😉

Concrètement, une des solutions que je recommande est l’utilisation de GnuPG, une alternative libre à PGP (pour « Pretty Good Privacy »), gratuite, standard (utilisation du format OpenPGP définit dans la RFC 4880) et surtout simple à utiliser, et puis… de plus en plus répandue : clients mail, gestionnaires de fichiers, messagerie instantanée… l’intègrent nativement ou via un plugin.

 

Le mot de la « fin »

Vous voilà avec les quelques connaissances techniques (et le vocabulaire associé !) nécessaires à la bonne compréhension de ce qui touche à la sécurisation de vos communications électroniques.

Néanmoins, avant de vous lancer dans le grand bain, il nous faudra revenir sur quelques aspects supplémentaires, parce que sécuriser c’est beau, mais c’est vaste :

  • les PKI / ICP : comment ça fonctionne, pourquoi des annuaires centraux, est-ce que c’est limité à OpenPGP ?
  • un certificat de clé publique, c’est fichu comment ?
  • la « chaîne de confiance » : quelle valeur donner à une clé publique, si tout le monde peut en créer une ?
  • quels outils utiliser ?
  • est-ce que la signature numérique a une valeur légale ?

Tous ça suivra dans les prochains articles ! C’est un peu long à rédiger, mais en attendant, si vous avez des questions, n’hésitez pas et demandez ! 🙂

Mots clés