# Cryptographie/Applications informatique
## Approche du problème

Supposons qu'Alice veut parler à Bob, pour lui faire des confidences à propos de leur amie Claire. Ils vivent tous les trois côte à côte, et ils communiquent par un tuyau reliant les trois pièces. Dès lors, si Alice et Bob veulent échanger des informations sans que leur amie Claire ne le sachent, ils doivent recourir à la cryptographie. De manière générale, toute communication informatique peut :
* Être altérée accidentellement pendant la transmission ;
* Être interceptée en cours de transmission, voire modifiée par un tiers.
La cryptographie permet de résoudre ces problèmes.

## Exemples

Prenons un exemple pratique. Alice veut envoyer à Bob un fichier sur son ordinateur, en s'assurant que le fichier arrivera identique, sans avoir été ni lu par Claire, ni modifié.

## Fonctions de hachage : le contrôle d'erreur

L'idée est que chaque fonction de hachage produit en théorie un unique hash pour une unique suite d'octets. Alice commence la transmission de son fichier. Pour vérifier l'intégrité du message, chaque paquet du fichier subit un CRC (Contrôle de Redondance Cyclique), qui sera intégré dans le paquet avant l'envoi. À l'arrivée, l'ordinateur de Bob effectue de nouveau le CRC. Si le résultat est différent de celui envoyé par Alice, le paquet a été altéré : la fonction de hachage a permis de vérifier la bonne transmission du message.
Similairement, on utilise couramment les fonctions de hachage pour stocker des mots de passe. Imaginons un site proposant un espace membre. Par soucis de sécurité, les mots de passes ne sont pas stockés en clair sur le serveur, mais sous la forme de leur empreinte. L'intérêt est double ; si un attaquant parvient à entrer en possession de ces empreintes, il ne peut théoriquement pas retrouver les mots de passes autrement qu'en utilisant une attaquer par bruteforce. Or, les fonctions de hachage utilisées en cryptographie (MD5, SHA) nécessitant un temps de calcul élevé, un mot de passe ayant un nombre suffisamment élevé de caractère prendra un temps élevé pour être découvert.

## Chiffrement symétrique

Cependant, comment savoir si Claire n'a pas intercepté le paquet pour le lire ? Pour pallier ce problème, Alice chiffre son fichier avec un algorithme symétrique, par exemple l'AES. Pour déchiffrer le message, il faut donc avoir la clé de chiffrement, que Claire n'a pas. Alice et Bob peuvent donc communiquer de manière incompréhensible pour ceux qui ne disposent pas de cette clé.

## Chiffrement asymétrique et authentification

Reste à déterminer comment Alice peut communiquer la clé de chiffrement symétrique. Elle ne peut raisonnablement envoyer la clé en clair (sans la chiffrer) sur le réseau. Elle va donc utiliser le chiffrement asymétrique, avec par exemple le cryptosystème RSA. Le mode opératoire sera le suivant (source : Wikipédia, article Cryptographie asymétrique): Objectif : Bob souhaite envoyer des données chiffrées à Alice en lui garantissant qu’il en est l'expéditeur.
* Bob crée une paire de clés asymétriques : il conserve la clé privée et diffuse librement la clé publique (notamment à Alice)
* Alice crée une paire de clés asymétriques : clé privée (qu'elle conserve), clé publique (qu'elle diffuse librement, notamment à Bob)
* Bob effectue un condensat de son message « en clair » puis chiffre ce condensat avec sa propre clé privée
* Bob chiffre son message avec la clé publique d'Alice.
* Bob envoie le message chiffré accompagné du condensat chiffré.
* Alice reçoit le message chiffré de Bob, accompagné du condensat.
* Alice déchiffre le message avec sa propre clé privée. À ce stade le message est lisible mais elle ne peut pas être sûre que Bob en est l'expéditeur.
* Alice déchiffre le condensat avec la clé publique de Bob. Alice utilise la même fonction de hachage sur le texte en clair et compare avec le condensat déchiffré de Bob. Si les deux condensats correspondent, alors Alice peut avoir la certitude que Bob est l'expéditeur. Dans le cas contraire, on peut présumer qu'une personne malveillante a tenté d'envoyer un message à Alice en se faisant passer pour Bob !
Cette méthode d'authentification utilise la spécificité des paires de clés asymétriques : si l’on chiffre un message en utilisant la clé publique, alors on peut déchiffrer le message en utilisant la clé privée ; l'inverse est aussi possible : si l’on chiffre en utilisant la clé privée alors on peut déchiffrer en utilisant la clé publique.
| Fonctions de hachage | Mode d'emploi |