Dans cet article, nous allons découvrir les usages de la cryptographie dans le domaine de la cybersécurité. Je ne vais pas rentrer en détails sur l'aspect mathématique de la cryptographie. Cependant, j'évoquerai certaines notions de mathématiques pour décrire son fonctionnement.
C'est quoi la cryptographie
La cryptographie est une discipline, qui vise à protéger des données pour qu'elles ne puissent être lues que par le destinataire souhaité. Il ne s'agit pas d'une méthode naît avec l'informatique, cette dernière existe depuis l'antiquité pour garder des messages secrets et déchiffrables que par les personnes connaissant la méthode de déchiffrement.
Dans le domaine de l'informatique, quand on pense à la cryptographie, on pense tout de suite au chiffrement. Ce qui est vrai, cependant, la cryptographie est aussi utilisée pour assurer les points suivants :
- Confidentialité : Maintenir le secret des données
- Authentification : Vérifier l'identité de l'émetteur et récepteur
- Intégrité : Détecter la modification des données
- Non répudiation : L'émetteur ne peut pas nier avoir émis des données.
Pour garantir ces fonctions, la cryptographie utilise un certain nombre d'algorithmes. Nous allons rentrer plus en détails sur ces 4 usages et comment la cryptographie est utilisée pour chacun de ces usages.
Hachage
Le hachage permet d'assurer l'intégrité des données. Pour ce faire, ce dernier utilise une fonction mathématique irréversible et injective. Cela signifie que l'on ne pourra jamais retrouver les données d'origine d'un HASH, on parle aussi de condensat ou d'empreinte. L'algorithme de hash actuellement recommandé par ANSSI (Agence Nationale de la Sécurité des Système d'Information) est le SHA-256. Ce dernier produit un hash de 256 bits. Peut importe la taille des données en entrées, la hash sera toujours de la même taille et différent en fonction des données d'entrées. Afin de mieux comprendre le fonctionnement de cette fonction. Je vous propose un schéma qui explique son fonctionnement dans le cas d'une communication entre deux personnes.

Dans notre exemple, un individu A envoie un fichier à un individu B. Pour garantir l'intégrité entre les deux personnes, l'émetteur va générer un hash de son fichier, pour cela, il va utiliser l'algorithme SHA-256 qui correspond à notre fonction H. Une fois le hash obtenue, il envoie son fichier et le hash à son destinataire. Le destinataire reçoit un fichier et son hash, afin de vérifier que le fichier n'a pas était modifié pendant son transport. Le destinataire recalcule le hash du fichier avec le même algorithme. Il va ensuite comparer les deux hash. S'ils sont identiques alors le fichier n'a pas été modifié. Dans le cas contraire, cela signifie que le fichier a été modifié par un tiers pendant le transport.
Nous venons de voir ici comment l'on assure l'intégrité de nos données. Cependant, notre communication est ici transmise en clair. Un acteur malveillant pourrait intercepter le fichier et son hash, puis modifier le fichier et recalculer un hash pour le transmettre au destinataire. C'est pour cela que la cryptographie doit assurer ses 3 autres fonctions, que nous allons découvrir par la suite.
Chiffrement
Le chiffrement consiste à transformer un message en clair en un message chiffré. Ce texte chiffré ne peut être déchiffré que par les personnes disposant de la clé pour le déchiffrer. Pour ce faire, on utilise une opération mathématique combinée à un algorithme de chiffrement et d'une ou plusieurs clés de chiffrement. Cela permet de chiffrer facilement un message et de rendre quasiment impossible à déchiffrer sans connaître la clé pour le déchiffrer. Le chiffrement permet entre autres de garantir la confidentialité de nos données. Aujourd'hui, il existe deux méthodes de chiffrement, le chiffrement symétrique et le chiffrement asymétrique. Dans les parties qui suivent, nous allons détailler ces deux techniques de chiffrement.
Symétrique
Le chiffrement symétrique utilise la même clé cryptographique pour chiffrer et déchiffrer un message. Pour fonctionner, il faut que la clé soit partagée avec tous les destinataires du message. Aujourd'hui, l'ANSSI recommande l'utilisation de clé de 128 bits minimum. L'algorithme de chiffrement symétrique le plus rependu et recommandé est l'algorithme AES (Advanced Encryption Standard) qui est un algorithme de chiffrement par bloc. Le chiffrement par bloc consiste à découper le message en bloc de 128bits (pour AES) puis de chiffrer ces blocs de données individuellement. Pour chaque bloc de données, l'algorithme AES va utiliser des fonctions mathématiques pour remplacer, décaler et mélanger la structure. Cela permet de rendre le déchiffrement plus complexe. On couple souvent AES à GCM pour garantir aussi l'authentification.
Voici un schéma pour décrire le fonctionnement du chiffrement symétrique.

Le chiffrement symétrique permet de chiffrer rapidement de grand volume de données, notamment pour du trafic temps réel. On utilise par exemple le chiffrement symétrique avec l'algorithme AES-256 pour le protocole HTTPS qui est la version sécurisée du protocole HTTP, utiliser pour le Web. Cependant, comme je le disais précédemment, AES est rarement utilisé seul.
Asymétrique
Passons maintenant au chiffrement asymétrique, qu'on appelle aussi chiffrement à clé publique. Le chiffrement asymétrique utilise une paire de clé publique/clé privée. Ces deux types de clés sont reliées mathématiquement. Les algorithmes de chiffrement asymétrique utilisent des longueurs de clé bien supérieure au chiffrement symétrique. Les clés ont souvent une longueur minimale de 1024 bits. Aujourd'hui, l'ANSSI recommande l'usage de clés avec une taille minimale de 2048 bits pour le chiffrement asymétrique. Le chiffrement asymétrique est utilisé notamment pour transporter des clés symétriques entre l'émetteur et le destinataire. Il est très peux utilisé pour transporter des gros volume de données. On l'utilise aussi pour la signature numérique et l'authentification.
Comme pour les autres exemples, je vous propose un schéma que nous allons détailler ensemble.

Avec le chiffrement asymétrique, on utilise la clé publique du destinataire (ici B) pour chiffrer les données. Quant à lui, notre destinataire B utilisera sa clé privée pour déchiffrer les données. Pour générer une paire de clés, on utilise des algorithmes tels que RSA, ECC ou encore Diffie-Hellman pour l'échange des clés.
Cependant, le chiffrement asymétrique n'est jamais utilisé seul de par sa lenteur et son coût important en calcul. C'est là que le chiffrement asymétrique et symétrique se complète et que l'on parle alors de chiffrement hybride. Voici un exemple d'un chiffrement hybride.
- On génère une clé symétrique.
- On chiffre nos données avec un algorithme comme AES.
- Pour garantir l'échange de notre clé symétrique, on la chiffre avec un algorithme asymétrique en utilisant la clé publique du destinataire.
- On envoie ensuite les données avec la clé symétrique chiffrée.
Dans ce cas-là, seul le destinataire qui possède la clé privée associé à la clé publique pourra déchiffrer la clé symétrique et donc pourra déchiffrer le message. C'est exactement ce que fait TLS avec le protocole HTTPS.
Signature numérique
Maintenant que l'on a vue ce qu'était un hash et les méthodes de chiffrement. On revient à notre problèmatique de comment s'assurer que le hash de notre message initial ne soit pas modifié en court de transport, ce qui viendrai à compromettre l'intégrité. C'est là que la signature numérique rentre en jeux. La signature numérique permet aussi de s'assurer de l'identité de son émétteur. Cependant la signature numérique n'assure pas le chiffrement des données, mais seulement l'intégrité et une notion de preuve. Il est donc recommandé de chiffrer notre message également. Voici encore un schéma que nous allons détailler ensemble.

Dans notre exemple, l'émetteur A a généré en amont une paire clé publique/clé privée. Pour des questions de performance, on ne chiffre pas le fichier entier, mais seulement le hash que l'on a généré via un algorithme comme SHA-256. Pour signer, on fait l'inverse que pour le chiffrement asymétrique, c'est-à-dire qu'on utilise notre clé privée et non pas s'elle du destinataire. On fait cela pour éviter de ressigner à chaque fois notre hash de fichier. Si on ne faisait pas de cette manière, il faudrait ressigner le hash pour chaque destinataire. Notre hash est donc signé avec notre clé privée, on l'envoie alors au destinataire, qui va pouvoir utiliser notre clé publique pour vérifier notre signature et donc s'assurer que ce hash viens bien de nous. Le destinataire peut alors comparer les deux hash pour s'assurer de l'intégrité du fichier.
Comme on vient de le voir, la signature numérique permet de s'assurer de l'authenticité de l'émetteur, de plus l'émetteur ne peux pas nier avoir envoyé le fichier. On remplie ici les fonctions d'authentification et de non-répudiation. De plus, si l'on compare les hash reçue on peut assurer l'intégrité de nos données.
Exemple d'une communication
Nous avons vu les différents moyens de remplir les fonctions de sécurité suivante :
- Confidentialité
- Authentification
- Intégrité
- Non-répudiation
Cependant, il faut maintenant mettre toutes ces briques de sécurité ensemble pour garantir la sécurité d'une communication. Je vous propose un schéma complet d'une communication. Pour cet exemple, j'utiliserai l'exemple classique d'Alice qui souhaite envoyer un message à Bob.

Conclusion
Pour conclure, nous venons de voir les bases de la cryptographie et des fonctions qu'elle permet d'assurer. Il resterai à parler des mécanismes utilisés pour le partage des clés, ou encore la génération de certificat. De plus, une communication sécurisée n'est pas exemptée d'attaque. Un acteur malveillant pourrais voler les clés d'un utilisateur et se faire passer pour lui, ou encore déchiffrer des messages. Bien que les algorithmes évoqués dans cet article, n'ont pas été cassés, un attaquant peux très bien exploiter des failles d'un ordinateur, pour récupérer des informations et compromettre ces mécanismes. Si vous voulez approfondir le sujet, je vous dépose quelques liens que j'ai utilisé pour cet article.
GUIDE DES MÉCANISMES CRYPTOGRAPHIQUES (ANSSI) : https://messervices.cyber.gouv.fr/documents-guides/anssi-guide-mecanismes_crypto-2.04.pdf
Cours sur le chiffrement symétrique : https://www.di.ens.fr/~fouque/mpri/des-aes.pdf
Chiffrement asymétrique : https://allophysique.com/docs/nsi/architecture/page7/
Comprendre le chiffrement (CNIL) : https://www.cnil.fr/fr/cybersecurite/comprendre-les-grands-principes-de-la-cryptologie-et-du-chiffrement