NUMERIQUE ET SCIENCES INFORMATIQUES

Niveau : Terminale générale, enseignement de spécialité NSI

D
É
C
O
N
N
E
C
T
É

Sécurisation des données

1 - Introduction :

Afin de sécuriser la correspondance avec les chefs des armées, César utilisait un système de cryptographie symétrique assez simple. Le principe revient à décaler le rang des lettres que composent le message d'un rang d, correspondant à la clé choisie par César. Exemple, si la clé est 3 et le message "abc", il sera crypté "def". Il devait faire parvenir la clé à l'un de ses chefs d'armée par un premier messager, puis le message par un second messager. Le chef de l'armée n'aura plus qu'à décaler dans le sens inverse les lettres de l'alphabet d'autant de rangs que la clé reçue.

cesar code

Un système cryptographique consiste essentiellement en deux éléments : l'algorithme et la clef.

Exemple :




      

Pour déchiffrer le message il suffit de remplacer le résultat dans le message et de prendre l'opposé de la clé.

2-Chiffrement symétrique

Au lieu d'utiliser un décalage, la clé peut être constituée d'une chaîne de caractères. On l'appellera "clé de chiffrement". Le microprocesseur est conçu pour effectuer des opération logiques tels que la fonction XOR (ou exclusif).

Les caractères alpha numériques du message et de la clé de chiffrement sont tous codés en binaire selon la table ASCII. 

On réalise une fonction OU exclusif entre chaque bit pour obtenir le message crypter.

Pour décrypter le message, on le renvoie avec la clé de chiffrement et la fonction OU exclusif va le déchiffrer.




      

Le problème est de pouvoir partager la clé de chiffrement en toute sécurité...

3-Échange de clés par la méthode Diffie-Hellman






4-Chiffrement asymétrique

Sources : Guide.boum.org et David Roche

Dans les années 70, des mathématiciens ont révolutionné la cryptographie en trouvant une solution aux problèmes posés par le chiffrement symétrique, en créant le chiffrement asymétrique. « Asymétrique » car il utilise, pour déchiffrer un message, une clé différente de celle qui a permis de le chiffrer.

Prenons l'exemple d'Alice, qui souhaite recevoir un message chiffré de la part de Betty. Elle envoie à Betty un cadenas ouvert, dont elle garde précieusement la clé :

Alice envoie sa clé publique à Betty
Alice envoie sa clé publique

Betty place alors son message dans une boîte, et utilise le cadenas pour fermer la boîte – elle n'a pas besoin de la clé du cadenas pour cela :

Betty chiffre un message
Betty chiffre un message

Betty renvoie alors la boîte contenant le message, protégée par le cadenas fermé, à Alice :

Betty envoie un message chiffré à Alice
Betty envoie un message chiffré

Grâce à la clé, qu'elle a toujours gardée sur elle, Alice peut ouvrir le cadenas :

Alice déchiffre le message
Alice déchiffre un message chiffré

On le voit, grâce à la cryprographie asymétrique, la seule chose qui circule sur le réseau est un cadenas ouvert, puis un cadenas fermé. Et si une personne mal intentionnée tombe sur le cadenas ouvert, ce n'est pas très grave : cela ne lui permet pas d'ouvrir un cadenas fermé.

Le chiffrement asymétrique repose sur des problèmes très difficiles à résoudre dans un sens et faciles à résoudre dans l'autre sens.

Prenons un exemple :

l'algorithme de chiffrement asymétrique RSA (du nom de ses 3 inventeurs : Rivest Shamir et Adleman), est très couramment utilisé, notamment dans tout ce qui touche au commerce électronique. RSA se base sur la factorisation des très grands nombres premiers. Si vous prenez un nombre premier A (par exemple A = 16813007) et un nombre premier B (par exemple B = 258027589), il facile de déterminer C le produit de A par B (ici on a A x B = C avec C = 4338219660050123).
En revanche si je vous donne C (ici 4338219660050123) il est très difficile de retrouver A et B. En tous les cas, à ce jour, aucun algorithme n'est capable de retrouver A et B connaissant C dans un temps "raisonnable". Nous avons donc bien ici un problème relativement facile dans un sens (trouver C à partir de A et B) est extrêmement difficile dans l'autre sens (trouver A et B à partir de C). Les détails du fonctionnement de RSA sont relativement complexes (mathématiquement parlant) et ne seront pas abordés ici. Vous devez juste savoir qu'il existe un lien entre une clé publique et la clé privée correspondante, mais qu'il est quasiment impossible de trouver la clé privée de quelqu'un à partir de sa clé publique.

Le protocole HTTPS

Nous allons maintenant voir une utilisation concrète de ces chiffrements symétriques et asymétriques : le protocole HTTPS.

Avant de parler du protocole HTTPS, petit retour sur le protocole HTTP : un client effectue une requête HTTP vers un serveur, le serveur va alors répondre à cette requête (par exemple en envoyant une page HTML au client).

échange client-serveur protocole HTTP

Le protocole HTTP pose 2 problèmes en termes de sécurité informatique :

  • Un individu qui intercepterait les données transitant entre le client et le serveur pourrait les lire sans aucun problème (ce qui serait problématique notamment avec un site de e-commerce au moment où le client envoie des données bancaires)
  • grâce à une technique qui ne sera pas détaillée ici (le DNS spoofing), un serveur "pirate" peut se faire passer pour un site sur lequel vous avez l'habitude de vous rendre en toute confiance : imaginez vous voulez consulter vos comptes bancaires en ligne, vous saisissez l'adresse web de votre banque dans la barre d'adresse de votre navigateur favori, vous arrivez sur la page d'accueil d'un site en tout point identique au site de votre banque, en toute confiance, vous saisissez votre identifiant et votre mot de passe. C'est terminé un "pirate" va pouvoir récupérer votre identifiant et votre mot de passe ! Pourquoi ? Vous avez saisi l'adresse web de votre banque comme d'habitude ! Oui, sauf que grâce à une attaque de type "DNS spoofing" vous avez été redirigé vers un site pirate, en tout point identique au site de votre banque. Dès vos identifiant et mot de passe saisis sur ce faux site, le pirate pourra les récupérer et se rendre avec sur le véritable site de votre banque. À noter qu'il existe d'autres techniques que le DNS spoofing qui permettent de substituer un serveur à un autre, mais elles ne seront pas évoquées ici.
Attaque DNS Spoofing

HTTPS est donc la version sécurisée de HTTP, le but de HTTPS est d'éviter les 2 problèmes évoqués ci-dessus. HTTPS s'appuie sur le protocole TSL (Transport Layer Security) anciennement connu sous le nom de SSL (Secure Sockets Layer)

Comment chiffrer les données circulant entre le client et le serveur ?

Les communications vont être chiffrées grâce à une clé symétrique. Problème : comment échanger cette clé entre le client et le serveur ? Simplement en utilisant une paire clé publique / clé privée !

Voici le déroulement des opérations :

  • le client effectue une requête HTTPS vers le serveur, en retour le serveur envoie sa clé publique (KpuS) au client
  • le client "fabrique" une clé K (qui sera utilisé pour chiffrer les futurs échanges), chiffre cette clé K avec KpuS et envoie la version chiffrée de la clé K au serveur
  • le serveur reçoit la version chiffrée de la clé K et la déchiffre en utilisant sa clé privée (KprS). À partir de ce moment-là, le client et le serveur sont en possession de la clé K
  • le client et le serveur commencent à échanger des données en les chiffrant et en les déchiffrant à l'aide de la clé K (chiffrement symétrique).

On peut résumer ce processus avec le schéma suivant :

principe protocole TSL

Ce processus se répète à chaque fois qu'un nouveau client effectue une requête HTTPS vers le serveur.

Comment éviter les conséquences fâcheuses d'une attaque de type DNS Spoofing ?

Pour éviter tout problème, il faut que le serveur puisse justifier de son "identité" ("voici la preuve que je suis bien le site de la banque B et pas un site "pirate"). Pour ce faire, chaque site désirant proposer des transactions HTTPS doit, périodiquement, demander (acheter dans la plupart des cas) un certificat d'authentification (sorte de carte d'identité pour un site internet) auprès d'une autorité habilitée à fournir ce genre de certificats (chaque navigateur web possède une liste des autorités dont il accepte les certificats). Comme dit plus haut, ce certificat permet au site de prouver son "identité" auprès des clients. Nous n'allons pas entrer dans les détails du fonctionnement de ces certificats, mais vous devez juste savoir que le serveur envoie ce certificat au client en même temps que sa clé publique (étape 2 du schéma ci-dessus). En cas d'absence de certificat (ou d'envoi de certificat non conforme), le client stoppe immédiatement les échanges avec le serveur. Il peut arriver de temps en temps que le responsable d'un site oublie de renouveler son certificat à temps (dépasse la date d'expiration), dans ce cas, le navigateur web côté client affichera une page de mise en garde avec un message du style "ATTENTION le certificat d'authentification du site xxxxx a expiré, il serait prudent de ne pas poursuivre vos échanges avec le site xxxxx".

Exercice :

Dans cette partie, pour une meilleure lisibilité, des espaces sont placées dans les écritures binaires des nombres. Il ne faut pas les prendre en compte dans les calculs.

Pour chiffrer un message, une méthode, dite du masque jetable, consiste à le combiner avec une chaîne de caractères de longueur comparable.

Une implémentation possible utilise l’opérateur XOR (ou exclusif) dont voici la table de vérité :

aba XOR b
000
011
101
110

Dans la suite, les nombres écrits en binaire seront précédés du préfixe 0b.

Pour chiffrer un message, on convertit chacun de ses caractères en binaire (à l’aide du format Unicode), et on réalise l’opération XOR bit à bit avec la clé.

Après conversion en binaire, et avant que l’opération XOR bit à bit avec la clé n’ait été effectuée, Alice obtient le message suivant :

m = 0b 0110 0011 0100 0110

    Le message m correspond à deux caractères codés chacun sur 8 bits : déterminer quels sont ces caractères.

    Réponse :

    On fournit pour cela la table ci-dessous qui associe à l’écriture hexadécimale d’un octet le caractère correspondant (figure 2). Exemple de lecture : le caractère correspondant à l’octet codé 4A en hexadécimal est la lettre J.

    Pour chiffrer le message d’Alice, on réalise l’opération XOR bit à bit avec la clé suivante :

    k = 0b 1110 1110 1111 0000

    Donner l’écriture binaire du message obtenu.

    Réponse :

Dresser la table de vérité de l’expression booléenne suivante : (a XOR b) XOR b

a XOR bb(a XOR b) XOR b
?
?
?
?
?
?
?
?
?
?
?
?

Bob connaît la chaîne de caractères utilisée par Alice pour chiffrer le message. Quelle opération doit-il réaliser pour déchiffrer son message ?

Réponse :

Fond :  Texte :  Tables :  Thème du langage: