Lycée   >   Terminale   >   NSI   >   Comprendre le chiffrement asymétrique

Comprendre le chiffrement asymétrique

  • Fiche de cours
  • Quiz
  • Profs en ligne
Objectifs
  • Comprendre le principe d’un algorithme de chiffrement asymétrique pour sécuriser des communications.
  • Implémenter en Python un algorithme de chiffrement asymétrique.
Points clés
  • L’algorithme de chiffrement asymétrique est un algorithme de chiffrement qui utilise des clés privées et publiques.
    La clé publique est connue de tous et permet le chiffrement d’un message, tandis que la clé privée permet à la personne qui reçoit le message chiffré de le déchiffrer.
  • Ce chiffrement est couteux en ressources, on l’utilise donc pour transmettre des clés de chiffrement symétrique complexes ou longues, et pour effectuer des signatures numériques.
Pour bien comprendre
  • Introduire la cryptographie.
  • Comprendre le chiffrement symétrique.

La cryptographie (« écriture secrète ») consiste à protéger un message en utilisant des clés pour le chiffrer.

La cryptographie repose sur des algorithmes qui utilisent des clés pour chiffrer et pour déchiffrer des messages. Il peut s’agir d’un algorithme de chiffrement symétrique ou d’un algorithme de chiffrement asymétrique.

On étudie ici les algorithmes de chiffrement asymétrique.

1. L'algorithme de chiffrement asymétrique
a. Principe
Le chiffrement asymétrique est un algorithme cryptographique qui repose sur une clé privée et sur une clé publique.

On utilise la clé publique pour chiffrer un message, mais le message chiffré ne sera déchiffré que par la personne qui possède la clé privée. La clé publique est donc connue de tous, tandis que la clé privée doit rester secrète.
Pour résumer :
  • la clé publique est la clé de chiffrement ;
  • la clé privée est la clé de déchiffrement.
b. Avantages et inconvénients
Avantages

Le système de chiffrement asymétrique permet de chiffrer un message en assurant la confidentialité. Il n’y a que le récepteur possédant la clé privée qui peut lire le message. Cette clé privée n’a pas été diffusée.

Remarque
En chiffrement symétrique, il faut diffuser la clé au destinataire pour que celui-ci puisse déchiffrer le message.

Ce système permet également d’authentifier l’expéditeur.

Exemple
Si l’expéditeur utilise sa clé privée pour signer un document, il appose sa signature. C’est comme si il apposait son empreinte « digitale ».
Toute personne qui possède la clé publique de l’expéditeur est alors en mesure de retrouver la signature et donc d‘authentifier l’expéditeur.
Inconvénients

Le chiffrement asymétrique est plus long que le chiffrement symétrique, on ne pourra de plus pas récupérer la clé privée si on la perd.

2. L'algorithme d'échange de clés Diffie-Hellman

Le chiffrement symétrique est très efficace, son défaut se trouve dans la transmission des clés entre l'expéditeur et le récepteur, car les transmissions peuvent être interceptées.

Il a fallu attendre les années 1970 pour que les cryptologues américains Diffie et Hellman trouvent un moyen sûr d’échanger les clés de manière totalement sécurisée, en utilisant un algorithme de chiffrement asymétrique.

L'échange de clés Diffie-Hellman (d’après les noms de ses deux inventeurs) est un algorithme de chiffrement asymétrique qui permet à deux personnes d’échanger secrètement une clé de chiffrement sans qu'une autre personne puisse la découvrir, même si elle a suivi leurs échanges.

Cet algorithme utilise des clés publiques (que les deux personnes s'échangent de manière non sécurisée) pour échanger de manière sécurisée une clé de chiffrement privée.

Remarque
L’algorithme d’échange de clés Diffie-Hellman est un algorithme de chiffrement asymétrique car il utilise des clés différentes pour chiffrer et pour déchiffrer un message.
a. Principe

Soit deux personnes, qu’on nomme par convention Alice et Bob, qui souhaitent échanger un message chiffré reposant sur une clé privée K, mais qui ne disposent pas d’une communication sécurisée.

Ils utilisent l’algorithme d’échange de clés Diffie-Hellmann, qui repose sur l’arithmétique modulaire, pour s’échanger cette clé de chiffrement privée K.

L’arithmétique modulaire

L’arithmétique modulaire utilise l’opération modulo sur les nombres entiers.

L’opération modulo entre un entier a et un entier b permet d’obtenir le reste de la division euclidienne de a par b.

Un calcul modulo b permet de revenir à zéro dès qu’on atteint b.
Exemple
23 + 2 = 1 (mod 24)

Si on prend des entiers pa et x, on calcule ainsi très facilement y = ax modulo p, par contre retrouver x connaissant y est très difficile si p est grand.

Important
Il faut utiliser Python pour calculer un modulo.
Exemple : pour obtenir la valeur 79 modulo 11, il faut taper dans le shell de Python (7**9)%11.
Principe de l’échange d’une clé secrète
 
Alice
Bob
Étape 1 Alice et Bob choisissent ensemble un nombre premier p et un nombre entier g tels que 1  g < p – 1.
Cet échange n’a pas besoin d’être sécurisé.
Étape 2 Alice choisit secrètement un entier a au hasard. Bob choisit secrètement un entier b au hasard.
Étape 3 Alice calcule 
A = ga modulo p.
Bob calcule 
B = gb modulo p.
Étape 4 Alice envoie à Bob la valeur de A, tandis que Bob envoie à Alice la valeur de B.
Cet échange n’a pas besoin d'être sécurisé.
Étape 5 Alice calcule Ba = (gb)a = gab modulo p.

Le nombre obtenu correspond à la clé secrète K.

Bob calcule Ab = (ga)b = gab modulo p.

Le nombre obtenu correspond à la clé secrète K.

Alice et Bob connaissent donc la même clé secrète sans se l’envoyer, qui correspond au nombre gab modulo p.

Si les transmissions sont interceptées, l’attaquant connaitra p, g, A et B, mais il ne pourra pas retrouver K car il ne connait pas a et b.

En mathématiques, il est en effet très difficile de retrouver a si on connait g, p et B = ga modulo p.

b. Exemple avec un petit nombre premier

Voici un exemple d’échange d’une clé secrète avec l’algorithme Diffie-Hellman, pour un petit nombre premier p.

 
Alice
Bob
Étape 1 Alice et Bob choisissent ensemble p = 11 et g = 7.
Étape 2 Alice choisit secrètement a = 6. Bob choisit secrètement b = 9.
Étape 3 Alice calcule A = ga = 76 modulo p = 11. Bob calcule B = gb = 79 modulo p = 11.
Étape 4 Alice envoie à Bob la valeur de A (76), tandis que Bob envoie à Alice la valeur de B (79).

Cet échange n’a pas besoin d'être sécurisé.

Étape 5 Alice et Bob calculent gab = 7× 9 = 754 modulo p = 11, ce qui vaut 3 : c’est une clé partagée seulement par Alice et Bob.

À la fin de l’algorithme, Alice et Bob connaissent donc la même clé secrète K = 3.

3. L'algorithme de chiffrement RSA

En 1977, les cryptologues Rivest, Shamir et Adleman se sont inspirés de l’algorithme d’échange de clés de Diffie-Hellman pour déposer un brevet pour l’algorithme de chiffrement asymétrique RSA. La différence avec Diffie-Hellman est que cet algorithme s’assure de l’identité des participants.

L’algorithme de chiffrement asymétrique RSA (d’après les initiales de ses trois inventeurs) est basé sur l’arithmétique modulaire et le problème de la factorisation de grands nombres premiers. Il repose sur des paires de clés privées et publiques.
a. Principe

Alice dispose d’une clé publique  et d’une clé privée .

Bob dispose d’une clé publique  et d’une clé privée .

Alice veut envoyer un message confidentiel à Bob, et Bob veut répondre à Alice de façon confidentielle.

Ils doivent suivre la procédure suivante.

  1. Alice envoie à Bob : .
  2. Bob envoie à Alice : .
  3. Alice envoie à Bob un message chiffré avec ,
    il n’y a que Bob qui pourra le déchiffrer avec sa clé privée .
  4. Celui-ci lui répond en chiffrant son message avec ,
    il n’y a qu’Alice qui pourra le déchiffrer avec sa clé privée .
Remarque
L’algorithme de chiffrement RSA est couteux en mémoire, du coup on l’utilise pour transmettre des clés de chiffrement symétrique complexes et longues ou pour effectuer des signatures numériques.
b. Une partie de la théorie
L’algorithme de chiffrement RSA est basé sur la factorisation d’un produit de grands nombres premiers.

Bob et Alice souhaitent se transmettre des informations.

Étape 1 – Choix de la clé

Alice choisit deux nombres premiers p et q assez grands (plus d’une centaine de chiffres) qu’elle garde secrets.

Elle calcule alors leur produit n = pq qu’on nomme module de chiffrement et qui va faire partie de sa clé publique.

Puis elle choisit un nombre entier e qui est premier avec (p – 1)(q – 1).

Rappel
Deux nombres entiers a et b sont dits premiers entre eux dans un ensemble défini, si leur plus grand diviseur commun est 1.

Elle publie alors dans un annuaire, qui peut se trouver sur le web, sa clé publique RSA (n, e).

Étape 2 – Chiffrement

Bob veut envoyer un message à Alice, il récupère dans l’annuaire la clé publique RSA (n, e) que Alice a publiée. Cette clé publique lui indique qu’il doit utiliser l’algorithme RSA avec les deux entiers n et e.

Bob découpe d’abord son message en blocs B de même taille qui représentent chacun un nombre plus petit que n.

Il transforme ensuite chaque bloc B en un bloc C qui est chiffré, grâce au calcul C = Be modulo n.

En regroupant les blocs C obtenus par calcul, Bob obtient le message chiffré qu’il va envoyer à Alice.

On voit que pour chiffrer un message, il va y avoir pas mal de calculs puisqu’il faut transformer chaque bloc B du message en clair en un bloc C qui est chiffré.

Étape 3 – Déchiffrement

Pour déchiffrer le message envoyé par Bob, Alice utilise sa clé privée k qu’elle a obtenue à partir de p et de q.

Cette clé satisfait l’équation ek = 1 modulo (p – 1)(q – 1).

Alice déchiffre chaque bloc C du message chiffré en utilisant la formule B = Ck modulo n.

En regroupant les blocs B obtenus par calcul, Alice obtient le message secret de Bob.

c. L'implémentation en Python de l'algorithme de chiffrement RSA

Pour chiffrer un bloc B en un bloc C, connaissant la clé publique RSA (ne), on doit calculer C = Be modulo n, avec et e les entiers qui composent la clé publique reçue.

On appelle cela une exponentiation rapide, et Python possède une fonction native qui permet cela : il faut taper la fonction pow, suivie de B, suivi de l’exposant e qui est lui-même suivi de n.

pow(B,e,n)

Voici le programme associé pour chiffrer un bloc B en un bloc C avec Python.

Python Explication
def chiffre(B,e,n): On définit la fonction chiffre qui va permettre de chiffrer un bloc B en un bloc C.

Cette fonction prend en paramètres le bloc B et les entiers e et n de la clé publique.

   return pow(B,e,n) On retourne le bloc chiffré C.
(C = Be modulo n)
Exemple
Voici l’exécution de ce programme sur Python Tutor, pour chiffrer le message « 11 » avec la clé publique RSA (21,5).

Le message « 2 » correspond au message chiffré du message en clair « 11 ».

Remarques
  • On peut aussi construire la fonction expo_rapide, pour obtenir le même résultat mais qui est plus longue.
  • L’implémentation pour obtenir la clé privée se base sur des notions mathématiques qui sont hors programme, avec des résolutions d’équations de Bézout.

Comment as-tu trouvé ce cours ?

Évalue ce cours !

 

Question 1/5

La médiane de 6 notes est 13. Cela signifie que :

Question 2/5

On a obtenu la série statistique suivante :

Combien vaut la médiane ?

Question 3/5

On a obtenu la série ci-dessous :

Quelle est la médiane de cette série ?

Question 4/5

On a relevé les tailles en cm des élèves d’une classe :

 

Parmi les propositions suivantes, laquelle est vraie ?

Question 5/5

Les notes en français de deux classes littéraires sont données dans le tableau suivant :

Quelle est la note médiane ?

Vous avez obtenu75%de bonnes réponses !

Recevez l'intégralité des bonnes réponses ainsi que les rappels de cours associés :

Votre adresse e-mail sera exclusivement utilisée pour vous envoyer notre newsletter. Vous pourrez vous désinscrire à tout moment, à travers le lien de désinscription présent dans chaque newsletter. Pour en savoir plus sur la gestion de vos données personnelles et pour exercer vos droits, vous pouvez consulter notre charte.

Une erreur s'est produite, veuillez ré-essayer

Consultez votre boite email, vous y trouverez vos résultats de quiz!

Découvrez le soutien scolaire en ligne avec myMaxicours

Le service propose une plateforme de contenus interactifs, ludiques et variés pour les élèves du CP à la Terminale. Nous proposons des univers adaptés aux tranches d'âge afin de favoriser la concentration, encourager et motiver quel que soit le niveau. Nous souhaitons que chacun se sente bien pour apprendre et progresser en toute sérénité ! 

Fiches de cours les plus recherchées

NSI

Décrire de manière détaillée le protocole HTTPS

NSI

Comprendre qu'un programme peut être une donnée

NSI

Introduire les notions de calculabilité et de décidabilité

NSI

Utiliser la récursivité en Python

NSI

Utiliser une API et des bibliothèques

NSI

Utiliser les paradigmes impératifs et fonctionnels

NSI

Utiliser le paradigme objet

NSI

Repérer les bugs : typages, effets de bords, débordements

NSI

Repérer les bugs : structures

NSI

Anticiper les erreurs classiques