[ Historique
| Principes
( algorithme asymétrique à clé
privée , algorithme
symétrique à clé publique et privée , la
clé de session , empreinte , signatures digitales, certifications ,
un mot sur les clés) | Quelques
algorithmes ( Présentation ,
fonction de hachage , algorithmes
symétriques, algorithmes 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é !
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.
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.
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
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.
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.
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é lutilisation de ces outils, enfin à quelques nuances près.
Lutilisation, l'importation et l'exportation dun moyen de cryptologie
pour signer, s'authentifier et contrôler l'intégrité est totalement libre
et il ny 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
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 ;-)