## Sécurisation des communications

<img src="assets/bo.png" alt="bo" style="zoom:50%;" />

> Avec l'avancée technologique ainsi que les échanges sur Internet (**Environ 319,6 milliards d'e-mails étaient envoyés et reçus chaque jour en 2021**) il est devenu indispensable de sécuriser nos échanges. En effet, entre la santé, l'économie, l'administratif...de nombreux services passent aujourd'hui intégralement par le réseau mondial, sans parler des messages professionnels pouvant relever du confidentiel, de nos données qui valent des millions d'€, il devient donc impératif de savoir se protéger, ainsi que d'utiliser des services étant eux mêmes protégés.

### 1. Qu'est ce que le chiffrement ?

Contrairement aux idées reçues, le ***chiffrement*** *n'a pas pour but de rendre invisible vos données ou vos messages*. Cela est beaucoup trop compliqué dans une société hyper connectée comme la notre. Par contre, *il permet de rendre les données et échanges incompréhensibles aux yeux de tous et toutes* : seule la personne destinée à recevoir votre message pourra le comprendre.

Un bon algorithme de chiffrement a besoin de certains pré-requis pour être efficace :

- *L'authentification* : le chiffrement repose sur un système de clés de sécurité (symétrique ou asymétrique)
- *La confidentialité* : il faut s'assurer que le contenu des communications ne puisse pas être compris par une tierce personne.
- *L'intégrité* : Les deux extrémités de la communication doivent avoir la garantie que les données n'ont pas été modifiées entre eux (**[Man in the middle](https://fr.wikipedia.org/wiki/Attaque_de_l'homme_du_milieu)**)
- *L'autorisation* : Il est possible d'appliquer différents droits aux utilisateurs et utilisatrices, selon la stratégie de sécurité définie.

> Un algorithme de chiffrement est une suite d'opérations destinées à chiffrer un message.
>
> Un algorithme de déchiffrement est une suite d'opération destinées à déchiffrer le message.
>
> Certains algorithmes font les deux.

Attention à ne pas confondre ***chiffrement*** et ***cryptage***

Le terme de cryptage et ses dérivés viennent du grec ancien *kryptós* pour « caché » ou « secret ». A la différence du chiffrement, il n’est pas nécessaire de connaître la clé pour « casser » le secret. 

Déchiffrer un message consiste à le **décoder avec une clé** tandis que décrypter un message revient à **décoder sans clé**. On ne peut donc pas crypter ou encrypter un fichier, on le chiffre. 

L'Agence Nationale de la Sécurité des Services d'Informations (ANSSI)  qualifie d’incorrect le terme de cryptage car « il reviendrait à coder un fichier sans en connaître la clé et donc sans pouvoir le décoder ensuite ».

----------------------

### 2. Un peu d'histoire

Si le chiffrement est aujourd'hui associé aux échanges numériques, il ne faut pas croire que cette méthode est récente : l'humain cherche à sécuriser ses communications depuis l'Antiquité, notamment dans le domaine militaire. Un des premiers code est d'ailleurs celui inventé par Jules César  : Le chiffre de César. Il s'agissait de décaler chaque lettre de l'aphabet de trois rangs (car la lettre C est la troisième). A devenant D, B devenant E, etc. Ce chiffrement a été utilisé par les égyptiens en -2000.

Évidemment, une telle clé est facilement attaquable aujourd'hui (dans le cas d'un chiffrement par décalage, il existe donc vingt-cinq clés possible, ce qu'une attaque par **bruteforce** peut trouver en quelques secondes avec les machines actuelles.)  

Plus sophistiqué, ***le chiffre de Vigénère*** utilise un décalage alphabétique également, mais avec une clé de plusieurs lettres répétée. Si la clé est NSI, la première et la quatrième lettre du message seront décalées de 14, la deuxième et la cinquième de 19, la troisième et la sixième de 9 etc. Ce chiffre a résisté longtemps au décryptage, et a été utilisé jusque pendant la guerre de Sécession.

Enfin, le fameux code ***Enigma*** utilisé par l’Allemagne nazie pendant la deuxième guerre mondiale a été cassé par ***Alan Turing***.

------------------

### 3. Chiffrement symétrique

Un chiffrement est dit symétrique lorsque la clé utilisée pour chiffrer le message permet également de le déchiffrer.

On parle alors de ***clé secrète*** commune à l'ensemble des interlocuteurs d'une conversation, et va permettre de chiffrer les données lors de l'envoie, puis de les déchiffrer à leur réception.

<img src="assets/chiffrement_sym.png" alt="chiffrement_sym" style="zoom: 50%;" />

>  Évidemment, il est necessaire de générer la clé et de la partager aux personnes / machines concernées par la communication, avant de commencer les échanges. Chaque machine pourra, dès lors, emettre ou recevoir des message chiffrés avec cette clé.
>
> Il est donc primordiale de passer par un canal de communication déjà sécurisé afin de transmettre la clé, le chiffrement symétrique étant donc impossible à utiliser pour initialiser une communication chiffré.

#### Pour la culture

Aujourd'hui, le standard utilisé en matière de chiffrement symétrique est l'[AES](https://fr.wikipedia.org/wiki/Advanced_Encryption_Standard) (Advanced Encryption Standard) qui utilise une clé pouvant aller jusqu'à 256 bits de longueur, ce qui laisse "juste" 2<sup>256</sup> possibilitées, soit 10<sup>77</sup> clés à tester. 

La meilleure méthode pour le casser restant, à ce jour, la force brute.

#### Quel usage ?

Tout type d'échange une fois que les clés ont été échangées de manière sécurisée...

------------

### 4. Chiffrement asymétrique

Créé très récemment (1976 !) par Whitfield Diffie et Martin Hellman, il porte le nom de "**chiffrement à clé publique**" et repose sur l'utilisation d'***une clé composée de deux parties*** :

- Partie privée (**clé privée** et notée *s* pour secret) que chaque personne conserve précieusement.
- Partie publique (**clé publique**, notée *p* pour publique) qui peut être révélée à tout le monde.

Pour faire simple, un message chiffré avec une partie d'une clé necessite l'utilisation de l'autre partie de la clé pour être déchiffré.

Prenons Alice et Bob, deux personnes qui cherchent à communiquer de manière sécurisée. Cela se passera en trois étapes :



<img src="assets/chiffrement_asy_1.png" alt="chiffrement_asy_1" style="zoom: 25%;" />

- Alice va génèrer deux clés: Sa clé publique (verte) qu'elle envoie à Bob et sa clé privée (rouge) qu'elle conserve précieusement sans la divulguer à quiconque.



<img src="assets/chiffrement_asy_2.png" alt="chiffrement_asy_2" style="zoom:25%;" />

- Puis Bob va chiffrer le message avec la clé publique d'Alice et envoie le texte chiffré. 
- Enfin, Alice déchiffrera le message grâce à sa clé privée.

Avec ce type de chiffrement, la clé publique peut être partagée de manière ouverte, sans crainte.

#### Pour la culture

Le chiffrement asymétrique utilise des fonctions mathématiques à sens unique. 

Une fonction à sens unique est une fonction mathématique $f$ dont la réciproque $f^-1$ est très difficile à trouver (plusieurs milliers / millions d'années de calcul)
																																								Cependant, une brèche secrète est toujours crée afin de pouvoir trouver cette réciproque.													

Ici, la fonction est *p*, la clé publique. Et la brèche secrète, *s*, la clé privée.

Le chiffrement [RSA](https://fr.wikipedia.org/wiki/Chiffrement_RSA) est latechnologie la plus utilisée en matière de chiffrement asymétrique : crée en 1978 par Ronald Rivest, Adi Shamir et Leonard Adleman, ce protocole utilise des théorèmes arithmétiques connus (voir celui de Fermat en maths expertes)

Ce chiffrement necessite une plus grand force de calcul ainsi que des clés de très grandes longueurs pour garantir la sécurité.

#### Quels usages ?

Les signatures numériques, les échanges de clés secrètes afin de pouvoir initialiser une communication basée sur un chiffrement symétrique, notamment le HTTPS.

---------------

### 5. Le HTTPS

Le protocole HTTP ( Hyper Text Transfert Protocol) est celui utilisé pour le partage de pages web via Internet. Il transmet les requetes de pages et assure leur transport entre le client et le serveur.

Mais ces échanges ne sont pas sécurisés. Il est donc necessaire de mettre en place des outils permettant de chiffrer les transmissions de requetes ainsi que les réponses, surtout en ce qui concerne les échanges monétaires et d'authentification.

Deux principaux problèmes étaient pointés du doigt:

- Données qui transitent en clair et peuvent être lues par une tierce personne ([Man in the middle](https://fr.wikipedia.org/wiki/Attaque_de_l'homme_du_milieu))
- Une tierce personne peut se faire passer pour le serveur et recevoir vos données ([Fishing - Hameçonnage](https://fr.wikipedia.org/wiki/Hame%C3%A7onnage))

Deux protocoles ont emergé, **SSL** (Secure Sockets Layer) tout d'abord, puis son évolution, **TLS** (Transport Layer Security).			

Couplé au HTTP, ils prennent le nom d'HTTPS ([Hyper Text Transfert Protocol Secure](https://fr.wikipedia.org/wiki/HyperText_Transfer_Protocol_Secure))

Le protocole TLS fonctionne comme ceci :

- Chiffrement asymétrique RSA pour la création ainsi que l'échange d'une clé symétrique secrète
- Chiffrement symétrique AES avec la clé échangée, permettant l'établissement d'une communication

<img src="assets/https.png" alt="https" style="zoom:80%;" />

#### Pour la culture

Ces protocoles agissent au niveau de la couche 5 du modèle OSI



<img src="assets/temps.jpeg" alt="temps_mdp" style="zoom:67%;" />

--------

#### Souces

<a href="https://www.flaticon.com/free-icons/computer" title="computer icons">Computer icons created by Freepik - Flaticon</a>

<a href="https://www.flaticon.com/free-icons/server" title="server icons">Server icons created by Pixel perfect - Flaticon</a>

Tomasz "odder" Kozlowski, CC BY-SA 3.0 <http://creativecommons.org/licenses/by-sa/3.0/>, via Wikimedia Commons

------

Auteur : Florian Mathieu

Licence CC BY NC

<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a> <br />Ce cours est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.
