Aller au contenu

Sécurité des communications

Codage et décodage

Coder une information veut dire que l’on va réprésenter l’information d’une autre manière, à l'aide d'une méthode pré-établie connue de tout le monde. À l’issue de ce procédé, on fourni un code (un objet différent de l’objet originel). Décoder une information consiste à retransformer un code en l’information initiale.

Ainsi, on peut modéliser un code par la donnée de deux fonctions publiques :

  • une fonction d'encodage encode : encode(m) est le code associé au message m ;
  • une fonction de décodage decode : decode(m) est le message associé au code m ;
  • les deux fonctions vérifient : pour tout message m, decode(encode(m)) = m.
  • Le codage binaire est un exemple de code : par exemple on code le nombre trente-huit en base 2 par \(100110\). En effet, on a \(38 = 0\times 2^0 + 2^1 + 2^2 + 0\times 2^3 + 0\times 2^4 + 2^5\). On décide donc de coder \(38\) par ses coefficients lorsqu'on le décompose en tant que somme de puisssances de 2. Réciproquement, lorsqu'on donne un nombre en base 2, par exemple \(11101\), on peut le décoder de la manière suivante : on effectue le calcul \(2^0 + 0\times 2^1 + 2^2 + 2^3 + 2^4 = 29\). On a donc décodé \(11101\) en vingt-neuf.
  • Le codage ASCII est un autre exemple de codage. À chaque caractère on associe un unique nombre qui l'identifie dans une table (). Pour coder un caractère, on regarde dans la table quel nombre correspond au caractère, pour décoder un nombre on regarde dans la table à quel caractère correspond le nombre. En python on utilise les fonctions \texttt{ord} (codage) et \texttt{chr} (décodage).
  • Le morse, le braille, sont d'autres exemples de codes.

Chiffrement symétrique

Chiffrement, déchiffrement, attaque

Une méthode de chiffrement symétrique est la donnée de deux fonctions publiques :

  • une fonction de chiffrement chiffre : chiffre(m, k) est le message chiffré associé au message m et à la clé k ;
  • une fonction de déchiffrement dechiffre : dechiffre(m, k) est le message clair associé au message chiffré m et à la clé k ;
  • les deux fonctions vérifient : pour tout message m, dechiffre(chiffre(m, k), k) = m

img

Remarque. On parle de chiffrement symétrique car pour retrouver le message en clair à l'issue de la phase de déchiffrement, il faut utiliser la même clé k que celle utilisée lors de la phase de chiffrement. Ainsi, les méthodes de chiffrement symétriques reposent sur l'existence d'un secret partagé, k.

Le chiffrement de César est un des plus anciens exemple de méthode de chiffrement. Pour cette méthode, on choisit un nombre compris entre 1 et 25 comme clé k. Puis, on remplace chaque lettre du message par la k-ième lettre suivante dans l’alphabet. Pour déchiffrer un message chiffré à l’aide de la méthode de César et de la clé k, on remplace chaque lettre du message chiffré par la k-ième lettre précédente dans l’alphabet.

La cryptanalyse est la technique qui consiste à déduire un texte en clair d’un texte chiffré sans posséder la clé de chiffrement. Le processus par lequel on tente de comprendre un message en particulier est appelé une attaque. Une attaque est généralement caractérisée selon les données qu'elle nécessite :

  • Attaque sur texte chiffré seul (ciphertext-only en anglais) :: le cryptanalyste possède des exemplaires chiffrés des messages, il peut faire des hypothèses sur les messages originaux qu'il ne possède pas.
  • Attaque à texte clair connu (known-plaintext attack en anglais) :: le cryptanalyste possède des messages ou des parties de messages en clair ainsi que les versions chiffrées.
  • Attaque à texte clair choisi (chosen-plaintext attack en anglais) :: le cryptanalyste possède des messages en clair, il peut créer les versions chiffrées de ces messages avec l'algorithme que l'on peut dès lors considérer comme une boîte noire.
  • Attaque à texte chiffré choisi (chosen-ciphertext attack en anglais) :: le cryptanalyste possède des messages chiffrés et demande la version en clair de certains de ces messages pour mener l'attaque.

Le problème de l'échange de la clé

La sécurité de la communication repose sur le partage d’une information commune et gardée secrète : la valeur de la clé k. Toutefois, comment s’échanger la clé de manière sécurisée ? Une méthode naïve est de se rencontrer physiquement à l’abri des regards indiscrets et de convenir d’une valeur, qui ne sera jamais divulguée. Cela pose des problèmes de logistique évidents (si Alice et Bob n’habitent pas dans le même pays, par exemple).

Protocole de Diffie-Hellman. Il permet d'échanger des clés via un canal non sécurisé. Il repose sur l'utilisation d'une fonction mathématique \(M\) qui vérifie les propriétés suivantes :

  • Si on connait \(M(x, y)\), et \(x\) alors il est très difficile de retrouver \(y\).
  • Pour tout \(x\), \(y\), \(z\), on a : \(M(M(x, y), z) = M(M(x, z), y)\).

La fonction \(M\) est une fonction dite de mélange. On admet que de telles fonctions existent et sont connues.

Par exemple, on peut considérer la fonction \(M\) qui étant donné un pot de 10cl d'une peinture \(x\) et d'un pot de 10cl d'une peinture \(y\) renvoit la couleur du mélange (de 20cl) des deux couleurs.

  • Si on connait la couleur du mélange \(M(x, y)\) et la couleur \(x\), il est très difficile (à part en testant toutes les couleurs possibles) de retrouver la bonne couleur \(y\).
  • Si on mélange \(10cl\) de la couleur \(x\) et \(10cl\) de la couleur \(y\), on obtient \(M(x, y)\). Si on ajoute à ce mélange \(10cl\) de la couleur \(z\), on obtient \(M(M(x, y), z)\). Il s'agit bien de la même couleur que \(M(M(x, z), y)\) qui est la couleur obtenue lorsqu'on mélange d'abord \(10cl\) de la couleur \(x\) à \(10cl\) de la couleur \(z\) auquel on ajoute à \(10cl\) de la couleur \(y\).

Protocole. À l'aide de cette fonction, Alice et Bob peuvent s'échanger une clé de manière relativement sûre.

  • Alice et Bob se mettent d'accord sur la fonction \(M\) à utiliser. Par exemple ils choississent le mélange de deux couleurs. Ils choisissent également donnée de base (par exemple une couleur) qu'ils s'échangent publiquement.
  • Alice et Bob choisissent une couleur secrète qu'ils mélangent à la couleur de base. Ils obtiennent tous les deux un mélange (20cl) qu'ils s'envoient publiquement.
  • Alice ajoute sa couleur secrète au mélange de Bob, et Bob ajoute sa couleur secrète au mélange de Bob. Ils obtiennent tous les deux un mélange (30cl) de la même couleur : il s'agit de leur clé secrète.

Si une personne écoute passivement (elle peut lire sans modifier) toutes les communications entre Alice et Bob, elle ne pourra pas retrouver la couleur finale uniquement avec les informations qu'elle a apprise : il lui faudrait "défaire" un mélange pour retrouver les couleurs secrètes d'Alice et de Bob.

img

Remarque. Ce protocole est cependant vulnérable à une attaque dite "de l'homme du milieu". Cela correspond au cas où une personne écoute activement les messages envoyés par Alice et Bob (elle peut lire et modifier les messages échangés) :

  • La couleur commune entre Alice et Bob est \(c\) (information publique).
  • Elle choisit deux couleurs secrètes \(a\) et \(b\). Elle intercepte la couleur \(c_{Alice}\) envoyée par Alice et envoie à Bob la couleur \(M(b, c)\). Elle intercepte la couleur \(c_{Bob}\) envoyée par Bob et envoie à Alice la couleur \(M(a, c)\).
  • La personne peut donc communiquer avec Alice avec la couleur \(M(M(a, c), c_{a})\) et avec Bob avec la couleur \(M(M(b, c), c_{b})\).

Ainsi, à l'issue de cette attaque, Alice et Bob croient partager un secret commun bien qu'ils partagent en fait deux secrets différents avec une tièrce personne.

Cryptographie asymétrique

Principe de chiffrement asymétrique

Les méthodes de chiffrement asymétrique reposent sur l'existence d'une paire de clés :

  • une clé publique : celle-ci peut-être diffusée publiquement et ne sert qu'à chiffrer les messages ;
  • une clé privée : celle-ci ne doit jamais être diffusée et ne sert qu'à déchiffrer les messages.

Ces méthodes de chiffrement permettent d'assurer la sécurité des communications (envoi de message indéchiffrables sans la clé privée) et d'authentifier les communications (être certain que l'on échange des informations avec la bonne personne).

img

Chiffrement RSA

Le chiffrement RSA fonctionne en trois grandes étapes :

  • Génération des clés. On commence par choisir deux nombres premiers \(p\) et \(q\) "assez grands" et on note \(n = pq\). On calcule ensuite :

    • \(\phi(n) = (p - 1)(q - 1)\)
    • un nombre \(e \in \mathbb{N}\), avec \(0 \leq e < \phi(n)\), premier avec \(\phi(n)\).
    • \(d\), l'inverse modulaire de \(e\) modulo \(\phi(n)\).

    Le couple \((n, e)\) est la clé publique de chiffrement. Elle peut-être diffusée librement. Le couple \((n, d)\) est la clé privée de déchiffrement, elle ne doit jamais être communiquée. - Chiffrement. Si \(M < n\) est un entier naturel représentant un message, alors le message chiffré à l'aide de la clé publique \((n, e)\) sera représenté par un entier \(C < n\) vérifiant :

    \[C \equiv M^e \text{ modulo } n\]
  • Déchiffrement. Si \(C < n\) est un entier naturel représentant un message \(M < n\) chiffré à l'aide de la clé publique \((n, e)\), alors on a :

    \[ M = C^d \text{ modulo } n \]

Soient \(p\) et \(q\) deux nombres premiers, \(n = pq\), \(e\in \mathbb{N}\) avec \(e < \phi(n)\) un nombre premier avec \(\phi(n)\) et \(d\in \mathbb{N}\) avec \(d < \phi(n)\) tel que $ed \equiv 1 \text{ modulo } \phi(n) $. Alors :

\[(M^{e})^{d} \equiv (M^{d})^{e} \equiv M^{ed} \equiv M \text{ modulo } n\]

Remarque. Ce théorème signifie deux choses :

  • le système de chiffrement est correct (en déchiffrant avec la clé privée le message chiffré avec la clé privée, on retrouve le message \(M\))
  • si on note la clé privée sk et la clé publique pk :
    • il est impossible de trouver sk en fonction de pk en temps raisonnable ;
    • si on chiffre un message avec sk, on peut le déchiffrer avec pk ;
    • réciproquement, si on chiffre avec pk, on peut déchiffrer le message grâce à sk.

La clé privée

img

et la clé publique

img

ont donc des rôles interchangeables (chacun peut être "un cadenas", chacun peut être "une clé"), et ce n'est qu'en connaissant la clé privée

img

et la clé publique

img

qu'on peut déchiffrer le message.

Nous adopterons la conventions suivante :

  • Un message en clair sera représenté par :

    img - Si ce message est chiffré avec la clé publique d'Alice, le message sera :

    img - Si on déchiffre ce message avec la clé privée d'Alice, il deviendra

    img

    et donc

    img

    puisque l'application de la clé privée sur la clé publique, ou bien de la clé publique sur la clé privée, permet de retrouver le message en clair.

Avec ces conventions, le protocole ci-dessous permet d'échanger des messages de manière confidentielle (Alice est sûre que seul Bob pourra déchiffrer le message qu'elle envoie) et authentifiée (Bob est sûr que le message qu'il reçoit vient bien d'Alice).

img

Application : protocole HTTPS

Plus de 90 % du trafic sur internet est chiffré : les données ne transitent plus en clair (protocole HTTP) mais de manière chiffrée (protocole HTTPS), ce qui empêche la lecture de paquets éventuellements interceptés.

Le protocole HTTPS est la réunion de deux protocoles :

  • le protocole TLS (Transport Layer Security, qui a succédé au SSL) : ce protocole, basé sur du chiffrement asymétrique, va conduire à la génération d'une clé identique chez le client et chez le serveur.
  • le protocole HTTP, mais qui convoiera maintenant des données chiffrées avec la clé générée à l'étape précédente. Les données peuvent toujours être interceptées, mais sont illisibles. Le chiffrement symétrique utilisé est actuellement le chiffrement AES.

img

Le protocole TLS, a pour rôle est de générer de manière sécurisée une clé dont disposeront à la fois le client et le serveur, leur permettant ainsi d'appliquer un chiffrement symétrique à leurs échanges fonctionne en plusieurs temps :

  • étape 1 :: le «client Hello». Le client envoie sa version de TLS utilisée.

  • étape 2 :: le «server Hello». Le serveur répond en renvoyant son certificat prouvant son identité, ainsi que sa clé publique.

  • étape 3 :: le client interroge l'autorité de certification pour valider le fait que le certificat est bien valide et que le serveur est bien celui qu'il prétend être. Cette vérification est faite grâce à un mécanisme de chiffrement asymétrique.

  • étape 4 :: une fois vérifiée l'authenticité du serveur et que son certificat est valide, le client calcule ce qui sera la future clé de chiffrement symétrique (appelée «clé AES» dans l'infographie). Cette clé est chiffrée avec la clé publique du server (transmise à l'étape 1), ce qui assure la sécurité de son transfert. Le serveur déchiffre cette clé grâce à sa clé privée, et dispose ainsi lui aussi de la clé.

img