[ Historique Principesalgorithme asymétrique à clé privée  , algorithme symétrique à clé publique et privée , la clé de session , empreintesignatures digitalescertifications , un mot sur les clés) | Quelques algorithmes ( Présentation , fonction de hachage , algorithmes symétriquesalgorithmes asymétriques )  | Et la loi française dans tout ça ?  | Quelques liens intéressants| Le chiffrement par dissimulation  ]

Un mot sur la cryptographie

Sécurité

27 janvier 2017

Historique

Depuis la nuit des temps, les hommes ont cherché à chiffrer des messages afin que s'ils venaient à tomber entre des mains « ennemis » ne puissent pas être relus. Ainsi Jules César pour communiquer avec ses généraux, utilisait un système de codage, mais bien avant lui, les égyptiens aussi chiffraient leurs hiéroglyphes.
Pendant des millénaires, la cryptologie n'a concerné qu'un faible nombre de personnes, principalement les gouvernements, l'armée et les services secrets. Ainsi il y a encore peu, la cryptologie était considérée comme une arme de guerre, dans beaucoup de pays, y compris les Etats Unis et la France.
Avec l'avènement des réseaux et d'internet, du commerce électronique, la cryptologie a connu un essor considérable dans tous les milieux, la législation a su s'adapter, même s'il reste des progrès à faire notamment en France.
Sont présentés dans cette page les grands principes des logiciels de cryptographie qu'on trouve sur internet, ainsi que les algorithmes associés, sans toutefois rentrer dans le détail.

Au fait, on dit quoi cryptologie, cryptographie, chiffrer, décrypter ? Pour faire simple:
- la cryptologie est la science du secret (traduction littérale),
- la crytographie l'ensemble des techniques pour protéger un message,
- on chiffre un message avec un code de chiffrement qui nous est connu pour le rendre incompréhensible pour la personne qui ne connait pas le code,
- on déchiffre un message avec un code de chiffrement qui nous est connnu pour le rendre compréhensible,
- on décrypte un message quand on ne connait pas le code de chiffrement, c'est ce que font les briseurs de code,
- crypter un message, ça n'existe pas étymologiquement, et ça n'a pas de sens ! A ne pas utiliser si vous ne voulez pas passer pour un blaireau, c'est purement et simplement éliminatoire pour un entretien d'embauche dans le monde de la sécurité !

[Retour haut de la page]

Principes

Algorithme symétrique à clé privée

L'envoyeur chiffre son message avec une clé privée, il transmet le message au destinataire qui dispose également de la clé privée et qui peut ainsi déchiffrer le message en s'aidant de la clé. Gros inconvénient du système, il ne faut pas que la clé privée puisse tomber dans des mains tiers.

Algorithme asymétrique à clé publique

L'algorithme symétrique à clé privée n'est absolument pas adapté à internet, il est en effet très risqué d'envoyer sur le réseau sa clé privée sans qu'elle puisse être interceptée par des personnes tierces et pourtant cette échange de clé est nécessaire pour pouvoir déchiffrer le message.
On contourne le problème en créant deux clés, une clé secrète et une clé publique, la première ne doit en aucun cas être communiquée, alors que la deuxième peut être largement diffusée. Il existe une relation entre les deux clés, un texte chiffré avec une clé publique ne peut être déchiffré qu'avec la clé privée correspondante.
Le principe de fonctionnement est le suivant, soit A qui veut envoyer un message à B. B envoie sa clé publique à A, A chiffre le message en utilisant la clé publique de B, B reçoit le message et le déchiffre avec sa clé privée. B est le seul à pouvoir déchiffrer le message, vu qu'il est le seul à détenir la clé privée nécessaire au déchiffrement.

La clé de session

Les algorithmes asymétriques sont généralement plus gourmands en temps de calcul et plus lents que les symétriques, lors d'une session de chiffrement/déchiffrement on passe donc par l'emploi de clé intermédiaire, dite clé de session qui est un compromis entre les deux techniques asymétriques/symétriques, on parle également d'algorithme hydride.

En clair, lors du chiffrement d'un message, on passe par les étapes:

côté expéditeur:

- création d'une clé de session spécifique au message et à usage unique,
- chiffrement de la clé de session avec un algorithme asymétrique en utilisant la clé publique du destinataire, le destinataire peut déchiffrer la clé de session avec sa clé privée et l'expéditeur et le destinataire disposent donc d'une clé de session commune,
- utilisation d'un algorithme symétrique pour chiffrer le message en utilisant la clé de session,
- le message est chiffré paré à être envoyé.

côté destinataire, on aura :

- appel au même algorithme asymétrique pour déchiffrer la clé de session avec sa clé privée,
- appel au même algorithme symétrique pour déchiffrer le message avec la clé de session.

Petite faiblesse de la méthode, si un tiers (on va l'appeler C) se fait passer pour B et envoie sa clé publique à A, A pourra lui envoyer des messages chiffrés sans qu'il se rende compte de l'usurpation d'identité. C'est une attaque qu'on nomme man in the middle, l'homme du milieu, à l'image de l'attaque. De fait la clé publique n'est pas rattachée à l'identité de son propriétaire, mais il y a moyen d'y remédier.

Empreinte

On va donc associer une empreinte au message, cette empreinte unique est générée à partir du contenu du message et seulement partir de celui-ci (en clair elle ne dépend pas de clés ou d'autres paramètres). La génération d'empreinte se fait à partir de fonctions dites de hachage, elles sont non réversibles (à sens unique), c'est à dire que l'empreinte ne permet pas de reconstituer le message, par contre elle l'identifie parfaitement. Si un simple caractère évolue dans mon texte, l'empreinte serait totalement différente, pour cette propriété on dit que la fonction est "sans collision". Par contre même si la probabilité est extrêmement faible, potentiellement deux messages peuvent avoir la même empreinte (on parle de collisions). Pour un texte donné, n'importe qui peut générer une empreinte, elle sera forcément identique si on utilise la même fonction de hachage.

Au final:

- A génère une empreinte de son message,
- A chiffre l'empreinte avec sa clé privée et l'envoie à B, cela permet ainsi d'authentifier l'empreinte car il est le seul à pouvoir la chiffrer avec sa clé privée,
- B déchiffre l'empreinte du message avec la clé publique de A,
- B recalcule l'empreinte à partir du message déchiffré,
- B compare les 2 empreintes, si elles sont identiques c'est que le message est intègre (il n'a pas été modidié) et qu'il a bien été envoyé par A (authentification de l'expéditeur).

Dans le monde anglo-saxon on parlera de digest pour empreinte.

C'est un peu lourdingue tout ça, car maintenant en plus de chiffrer le message, il faut chiffrer son empreinte, de même que l'expéditeur doit déchiffrer le message et l'empreinte et faire des comparaisons d'empreinte. Il existe heureusement encore une méthode pour alléger tout ça qui est utilisé notamment pour les connexions chiffrées avec OpenSSL/TLS.

En fait c'est la clé de session qui servira à authentifier l'expédieur de manière automatique, cela donne cela:

côté expéditeur:

- création d'une clé de session spécifique au message et à usage unique,
- génération d'une empreinte à partir de la clé de session,
- chiffrement de la clé de session avec un algorithme asymétrique en utilisant la clé publique du destinataire,
- chiffrement de l'empreinte avec la clé privée,
- utilisation d'un algorithme symétrique pour chiffrer le message en utilisant la clé de session,
- le message et l'empreinte de la clé de session sont chiffrés, parés à être envoyés,

côté destinataire, on aura :

- appel au même algorithme asymétrique pour déchiffrer la clé de session avec sa clé privée,
- appel au même algorithme symétrique pour déchiffrer le message avec la clé de session,
- génération de l'empreinte de la clé de session,
- déchiffrement de l'empreinte à partir de la clé publique de l'expéditeur,
- comparaison des 2 empreintes, si elles sont identiques, le message est intégre et l'expéditeur est clairement identifié

La clé de session a une durée de vie limitée à la session, elle pourra même être changée en cours de dialogue. En effet, si le dialogue est intercepté par un tiers, au bout d'un certain temps de calcul il pourrait être à même de décrypter la clé de session et donc l'échange. Donc l'idée est que la durée de vie de la clé de session soit toujours inférieure au temps qu'il faudrait pour la décrypter

[Retour haut de la page]

Signatures digitales

De même qu'en chiffrant un message avec la clé publique du destinaire, on peut aussi chiffrer un message en utilisant sa clé privée, dans ce cas n'importe qui pourra déchiffrer le message dès lors qu'il possédera la clé publique correspondante. Vous me direz alors, qu'elle est l'intérêt de chiffrer un message avec sa clé privée, puisque tout le monde peut le déchiffrer avec la clé publique qu'on a largement diffusée. En fait à défaut de confidentialité, ça permet de s'authentifier parfaitement, en effet on est le seul capable de générer un message avec la clé privée et déchiffrable avec la clé publique. C'est en quelque sorte une sorte de signature digitale. Dans ce cas là, on parle de signer un document.
A noter qu'on peut également signer l'empreinte d'un document pour s'authentifier c'est aussi fiable que de signer un document. Pour cela :
- avec une fonction de hachage l'expéditeur va générer une empreinte d'un document quelconque,
- il chiffre l'empreinte avec sa clé privée,
- l'expéditeur génére l'empreinte du même document (dont il dispose également),
- il déchiffre l'empreinte chiffrée avec la clé publique de l'expéditeur,
- il compare les 2 empreintes, si elles sont identiques, l'expéditeur est clairement authentifié.

Au lieu d'empreinte, on parle également de signature.

Certifications

Quand B reçoit une clé publique de A, il n'est pas sûr que ce soit réellement A qui l'ait envoyé. B a évidemment la possibilité de demander à A qu'il lui envoie sa signature, en la déchiffrant avec sa clé publique B pourra alors le confondre.
B et A ont encore une autre possibilité, A va faire authentifier sa clé publique par une autorité, qu'on appellera autorité de certification. Cette autorité va récupérer un document venant de A contenant par exemple une signature avec nom, prénom, email et la clé publique de A. L'autorité va certifier l'authenticité de ce document en le signant, ce document signé est le certificat de A. En pratique le certificat de A sera chiffré par l'autorité de certification en utilisant la clé secrète de l'autorité. Le déchiffrement se fera en utilisant la clé publique de l'autorité de certification connue de tous.
En conséquence si on reçoit un certificat de A et qu'on arrive à le déchiffrer avec la clé publique de l'autorité de certification, et qu'on obtient donc la signature et la clé publique de A, c'est qu'on a bien affaire à A.

Dans la pratique le service apporté par une autorité de certification n'est pas gratuit, il existe toutefois let's encrypt qui est une autorité de certification basée sur des logiciels libres pour certifier un serveur (apache, ftp, ou je ne sais quoi), il est totalement gratuit. Par contre let's encrypt ne permet pas (encore) de certifier une signature.

Un mot sur les clés

La clé est une valeur qu'on va utiliser dans un algorithme de cryptographie pour chiffrer ou déchiffrer un texte. La clé se caractérise par une taille exprimée en bits, plus le nombre de bits est important plus le risque que le texte soit déchiffré à l'insu de son propriétaire est faible.

[Retour haut de la page]

Quelques algorithmes

Présentation

Comme on a pu le voir précédemment on distingue les algorithmes asymétriques de gestion des clés, les symétriques pour chiffrer les messages et les fonctions de hachage pour les empreintes. Un peu de vocabulaire, dans le monde anglo saxon, un algorithme de chiffrement se dit cipher.

Fonctions de hachage

Les fonctions de hachage les plus connues sont MD5 (Message Digest 5) et SHA (Secure Hash Algorithm), MD5 est considéré aujourd'hui comme peu sûr, et SHA avec ses variantes SHA-1 et SHA-2 plus récent est à privilégier.

Algorithmes symétriques

DES (Data Encryption Standard) est un algorithme à clé privée qui a été créé par IBM en 1977. Il a été initialement développé pour les banques. Il est considéré comme obsolète et ne doit plus être utilisé. On utilise maintenant le triple-DES (ou 3DES), c'est à dire qu'on applique l'algo DES trois fois, en utilisant donc trois clés privées différentes. Le DES ainsi que le triple-DES sont libres de droits. Il sert à chiffrer les données.
AES (Advanced Encryption Standard) est considéré comme l'algorithme de chiffrement symétrique de référence.
L'algorithme IDEA (International Data Encryption Algorithm) est apparu en 1990, c'est un algorithme très résistants aux attaques,bien mieux que DES. IDEA sert à chiffrer les données.

Algorithmes asymétriques

DH (Diffie Hellman) Premier algorithme basé sur les clés publiques et privées inventé en 1976. Le RSA en est directement issu. Cet algorithme est aujourd'hui libre de droits.  DH n'est pas utilisé pour chiffrer des messages mais pour la gestion de clés.
RSA (Rivest Shamir Adleman nom de ses créateurs) a été créé en 1977, c'est un algorithme asymétrique à clé publique. Il est devenu un standard dans le domaine. Il est tombé dans le domaine public depuis 2000.
DSA (digital signature algorithm) qui comme son nom l'indique est un algorithme de signature numérique. Il est utilisé pour générer une signature digitale quipermet d'authentifier l'origine d'un document. La clé privée est utilisée dans la génération de la signature et la clé publique dans la vérification de la signature.

Et la loi française dans tout ça

Pendant longtemps l'utilisation des outils de chiffrement était très restreint par la loi française, à tel point que les logiciels de cryptologie pouvaient être considérés comme des armes de guerre ! La loi pour la confiance dans l'économie numérique du 21 juin 2004 a totalement libéré l’utilisation de ces outils, enfin à quelques nuances près. L’utilisation, l'importation et l'exportation d’un moyen de cryptologie pour signer, s'authentifier et contrôler l'intégrité est totalement libre et il n’y a aucune démarche à accomplir. Par contre il existe toujours des restrictions quant aux outils utilisés pour chiffrer des données, on peut les utiliser librement mais il est toujours nécessaire de faire une déclaration ou un demande d'autorisation pour leur importation/exportation vers/hors union européenne. Juridiquement le téléchargement d'un logiciel de cryptographie sur un site en dehors de l'union européenne correspond à une importation... mais on ne devrait pas vous chercher des poux sachant que la Direction Centrale de la Sécurité des Systèmes d'Information (DCSSI), organisme étatique qui a été remplacé depuis par l'Agence Nationale de la Sécurité des Systèmes d'Information (ANSSI) a officiellement autorisé l'utilisation de GnuPG et OpenSSL.

L'ANSSI est l'organisme en France dépendant directement du Premier Ministre qui est en charge de la sécurité des systèmes d'information des grands services de l'Etat (mais pas seulement) et de toutes les affaires de cryptologie en France (agréement,expertise, ...).

Quelques liens intéressants

Si vous voulez en savoir plus sur la cryptologie, voici quelques liens intéressants sur le sujet :

https://fr.wikipedia.org/wiki/Portail:Cryptologie  le portail de la cryptologie sur Wikipedia

http://www.futura-sciences.com/sciences/dossiers/mathematiques-cryptologie-art-codes-secrets-1817/   l'art des codes secrets

https://www.ssi.gouv.fr/particulier/actualite/crypto-le-webdoc/ le webdoc de l'ANSSI sur la cryptologie

http://www.ssi.gouv.fr/administration/reglementation/controle-reglementaire-sur-la-cryptographie un résumé de la réglementation sur le site de l'ANSSI

[Retour haut de la page]

Le chiffrement par dissimulation

Il existe une autre méthode de chiffrement qui ne fait appel à aucun algorithme (ou presque) et autrement plus subtile, c'est le chiffrement par dissimulation, il consiste à cacher un message dans un texte en clair tout à fait anodin. Un exemple très célèbre est une lettre que Georges Sand, qui comme chacun le sait est une femme, adresse à Alfred de Musset :

Je suis très émue de vous dire que j'ai
bien compris l'autre soir que vous aviez
toujours une envie folle de me faire
danser. Je garde le souvenir de votre
baiser et je voudrais bien que ce soit là
une preuve que je puisse être aimée par
vous. Je suis prête à vous montrer mon
affection toute désintéressée et sans
calcul, et si vous voulez me voir aussi
vous dévoiler sans artifice mon âme toute
nue, venez me faire une visite. Nous
causerons en amis, franchement. Je vous
prouverai que je suis la femme sincère,
capable de vous offrir l'affection la plus
profonde comme la plus étroite en amitié,
en un mot la meilleure preuve dont vous
puissiez rêver, puisque votre âme est
libre. Pensez que la solitude où j'habite
est bien longue, bien dure et souvent
difficile. Ainsi, en y songeant, j'ai l'âme
grosse. Accourez donc vite et venez me la
faire oublier par l'amour où je veux me
mettre.

Alors ? Allez, c'est pas difficile, commencer à lire la première ligne puis sauter une ligne pour lire la suivante et ainsi de suite ;-)
 
 
[Retour page d'accueil FUNIX] [Retour haut de la page]