La sécurité des transactions

Bases de cryptographie

Les services fournis

Historiquement, la cryptographie est l'étude des méthodes permettant de transmettre des données de manière confidentielle :

Les transformations appliquées pour chiffrer ou déchiffrer un message sont des fonctions mathématiques dépendant d'un paramètre appelé la clé.
Le décryptage est l'activité consistant à retrouver le texte clair sans connaître la clé.

De nos jours, le but de la crytographie n'est plus seulement la confidentialité des transmissions mais de fournir un certain nombre de services parmi lesquels :

Les techniques employées

Le chiffrement est à la base des services de confidentialité.

Pour le reste, on emploie des méthodes de scellement et de signature ainsi que des protocoles d'authentification mutuelle avec échange de clef.

La confidentialité des données

Rappelons que la confidentialité consiste à transmettre un message sans qu'un tiers ne puisse avoir connaissance de sa teneur.

C'est historiquement le service le plus ancien fourni par la cryptographie.

Les techniques employées sont les algorithmes de cryptage à base de clés.

Il existe deux grandes familles de tels algorithmes :

Le chiffrement symétrique

clé partagée

Le principe

La clé doit être tenu secrète : elle sert aussi bien à chiffrer qu'à déchiffrer le message.

Déroulement des opérations :

  1. L'expéditeur chiffre le message clair avec la clé secrète.
  2. Le message chiffré incompréhensible résultant est transmis au destinataire.
  3. Celui-ci déchiffre le message avec la même clé secrète.

Les algorithmes à clé secrète

Ils se partagent en deux familles :

Les algorithmes de chiffrement en continu

Aussi appelés stream cipher, ils agissent sur un bit à la fois sans attendre la réception complète des données à crypter.
Les stream-ciphers sont utilisés aujourd'hui par différentes applications. Pour chiffrer les flux, l'algorithme RC4 est très utilisé.

Les algorithmes de chiffrement par blocs

Aussi appelés block cipher, ils agissent sur un bloc de données de taille fixe (généralement 64 bits).

Les plus célèbres sont

Quatre modes de chiffrement par bloc sont utilisés : Electronic CodeBook (ECB), Cipher Block Chaining (CBC), Cipher FeedBack (CFB) ou Output FeedBack (OFB).

Problème de l'échange des clés

Il faut disposer d'un canal de communication sûr pour pouvoir échanger les clés secrètes.

Le chiffrement asymétrique

clé partagée

Le principe

Ils sont basés sur des problèmes difficiles à résoudre tels que la factorisation de grands nombres.

Les clés de chiffrement et de déchiffrement sont distinctes. L'une est privée (secrète), l'autre est publique.La connaissance de la clé publique ne permet pas de découvrir la clef secrète.

Déroulement des opérations :

  1. L'expéditeur chiffre le message clair avec la clé publique.
  2. Le message chiffré incompréhensible résultant est transmis au destinataire.
  3. Celui-ci déchiffre le message avec la clé privée qu'il est seul à posséder.

Étant donné que tous les algorithmes à clé publique sont bien plus lents que les algorithmes à clé secrète, on se contente généralement de les utiliser pour transmettre au destinataire la clé secrète d'un algorithme à clé secrète, le reste du message étant alors chiffré avec cet algorithme plus rapide.

Les algorithmes à clé publique

Le plus célèbre est RSA du nom de ses inventeurs (Rivest, Shamir et Adelman en 1977).

Le principe en est le suivant :

  1. On choisit p et q deux grands nombres premiers
  2. On calcule n = p·q
  3. On calcule aussi φ(n) = (p-1)·(q-1)
  4. On choisit un entier e qui soit premier avec (p-1) et (q-1), et donc avec φ(n)
  5. On calcule à l'aide de l'algorithme d'Euclide un entier d tel que e·d = 1 modulo φ(n)
  6. Soit M le message clair à transmettre. Le message chiffré correspondant est :
    C = Me modulo n
  7. Le destinataire déchiffre en calculant Cd modulo n, c'est-à-dire Med modulo n ou encore M1 modulo n puisque ed = 1 modulo φ(n).

Remarques :

Exemple :

  1. Choisissons p = 31 et q = 23 (dans la réalité, p et q sont beaucoup plus grands)
  2. On obtient n = 713
  3. On calcule φ(n) = 660
  4. Choisissons e = 7, premier avec 30 et 22, donc avec 660
  5. On calcule la clé secrète : le nombre 3x660+1 est divisible par 7, le quotient vaut 283.
    Ceci sera la clé secrète de déchiffrement
  6. Soit à coder le nombre 10 : le reste de la division de 107 par 713 vaut 175.
    La valeur chiffrée est donc 175.
  7. En élevant 175 à la puissance 283 et en prenant le reste de la division par 713, on obtient à nouveau 10.

Jouons : dans le formulaire ci-dessous, choisir les entiers p et q, l'entier e et la valeur du message à coder.

p
q
n = p·q  
φ(n) = (p-1)(q-1)  
e
d  
M
C=Me modulo n  
Cd modulo n  

Chiffrement mixte

Chiffrement mixte

Le chiffrement mixte se définit par l'utilisation conjointe d'algorithmes symétriques et asymétriques pour chiffrer des données.

Le chiffrement asymétrique est utilisé pour chiffrer une clé de session, choisie aléatoirement par l'expéditeur.

Le message lui-même est chiffré avec cette clé de session à l'aide d'un algorithme de chiffrement symétrique.

Le principe détaillé est le suivant :

  1. l'expéditeur chiffre le message avec une clé secrète d'un algorithme de chiffrement symétrique
  2. il chiffre également la clé secrète avec la clé publique du destinataire en utilisant un algorithme de chiffrement asymétrique
  3. Il transmet le message crypté en 1 et la clé secrète cryptée en 2
  4. le destinataire déchiffre la clé secrète avec sa clé privée
  5. il l'utilise alors pour déchiffrer le message reçu

L'authentification et l'intégrité

Il s'agit ici d'être capable de s’assurer que le message reçu

Authentification

La manière la plus classique d'assurer l'authentification consiste à utiliser un algorithme de cryptage asymétrique en inversant le rôle des clés publiques et privées.

L'expéditeur ayant chiffré son message avec sa clé privée (qu'il est donc seul à connaître), tout un chacun possédant la clé publique correspondante peut déchiffrer le message et ainsi être assuré de son origine.

Remarque :

Intégrité

Pour vérifier l'intégrité du meessage transmis, il est possible d'utiliser la technique des empreintes ("hash" ou "checksum", ou "message digest") : une empreinte caractéristique du message est calculée à partir du message à transmettre. Elle est transmise par un canal sûr en même temps que le message : le destinataire pourra alors recalculer l'empreinte du message reçu et la comparer avec l'empreinte qui lui a été transmise : si les deux empreintes sont différentes, le message a été altéré au cours de la transmission.

Remarque :

Les fonctions de hachage

Le principe

Une fonction de hachage convertit une chaîne de longueur quelconque en une chaîne de taille inférieure, généralement fixe, appelée empreinte.

Pour être sûres, les fonctions de hachage doivent avoir certaines propriétés :

Les fonctions de hachage sont en général obtenues par itération d'une compression : le message M est décomposé en blocs. Puis une fonction de compression est appliquée à chaque bloc et au résultat de la compresion du bloc précédent : le résultat de la fonction de hachage est le résultat de la dernière compression.

Les algorithmes de hachage

Le scellement

Sceller un message consiste à lui apposer un sceau garantissant son authenticité (authentification + intégrité).

Principe

Scellement

Un MAC (Message Authentication Code) est une empreinte calculée à partir du message par une fonction de hachage à sens unique indexée par une clef secrète : on ne se contente pas de calculer l'empreinte du message, mais on y ajoute une clé secrète connue seulement de l'expéditeur et du destinataire.

Le re-calcul de l'empreinte d'un message modifié par un tiers mal intentionné n'est donc plus possible.

Par contre, dans la mesure où le destinataire partage le secret de la clé avec l'expéditeur, un correspondant mal intentionné pourra modifier le message, recalculer son MAC et prétendre avoir reçu ou expédié ce message modifié : c'est ce que l'on appelle la répudiation.

Le scellement n'offre pas le service de non-répudiation : il faudra utiliser pour cela des techniques de signature électronique.

Techniques utilisées

DES-MAC

Le DES-MAC consiste à chiffrer le message avec DES en mode CBC et à utiliser comme MAC le dernier bloc du cryptogramme ainsi obtenu.

Keyed-MAC

Une autre technique consiste à faire opérer une fonction de hachage classique tel que MD5 ou SHA-1 sur le message auquel on a rajouté des données secrètes : le MAC est généralement le résultat de H(secret, message, secret).

Exemples : Keyed-MD5, Keyed-SHA-1

HMAC

HMAC est une technique plus élaborée et plus sûre que Keyed-MAC. Elle peut être utilisée avec n'importe quelle fonction de hachage itérative telle que MD5, SHA-1 ou RIPE-MD.

Elle consiste à calculer H(Ko, H(Ki,M))Ki et Ko sont obtenus en appliquant un Ou exclusif à la clé secrète et à une chaîne constituée du caractère 0x36 pour Ki et 0x5C pour Ko.

Une pratique courante consiste à tronquer la sortie pour ne garder comme MAC qu’un nombre réduit de bits.
Exemple : HMAC-SHA-1-96 calcule une empreinte de 160 bits tronqué à 96.

La signature numérique

La norme ISO 7498-2 définit la signature numérique comme "des données ajoutées à une unité de données, ou transformation cryptographique d'une unité de données, permettant à un destinataire de prouver la source et l'intégrité de l'unité de données et protégeant contre la contrefaçon (par le destinataire par exemple)". La mention "protégeant contre la contrefaçon" signifie que seul l'expéditeur doit être capable de générer la signature.

Une signature numérique fournit donc tout à la fois les services d'authentification, d'intégrité et de non-répudiation

Signature numérique

Le principe

Il consiste à chiffrer l'empreinte à l'aide de la clé privée d'un algorithme asymétrique.

L'empreinte ainsi signée est transmise en même temps que le message en clair : pour s'assurer que les données n'ont pas été modifiées, le destinataire recalcule l'empreinte des données. Puis il déchiffre l'empreinte qui accompagnait les données lorsqu'il les a reçues grâce à la clé publique de l'expéditeur (qui est en général jointe aux données signées).
Il compare ensuite ces deux résultats :

Remarques :

Algorithmes

Un algorithme de signature numérique est simplement l'association d'une fonction de hachage à sens unique et d'un algorithme de cryptage asymérique.

On utilise en général MD5 + RSA ou SHA-1 + RSA.

Echange de valeurs publiques

Echange de valeurs publiques

L'échange de valeurs publiques permet à deux tiers de générer un secret partagé sans disposer d'aucune information préalable l'un sur l'autre.Le secret généré peut ensuite être utilisé pour dériver une ou plusieurs clés secrètes (clefs de chiffrement symétrique par exemple).

L'algorithme de Diffie-Hellman met en oeuvre l'échange de valeurs publiques entre deux protagonistes P1 et P2. Le principe en est le suivant :

  1. on choisit un nombre entier n tel que (n-1)/2 soit premier et un nombre g premier avec n. Ces deux valeurs sont publiques.
  2. P1 choisit un grand nombre entier a qui constituera sa clé privée. Il calcule la clé publique correspondante :
    A = ga mod n
  3. P2 choisit un grand nombre entier b qui constituera sa clé privée. Il calcule la clé publique correspondante :
    B = gb mod n
  4. P1 et P2 échangent alors leurs clés publiques
  5. Recevant B, P1 l'élève à la puissance a modulo n et obtient K = gab mod n
  6. Recevant A, P2 l'élève à la puissance b modulo n et obtient aussi K = gab mod n

Un tiers qui intercepterait la communication connaîtrait n, g, A et B, ce qui ne lui permet pas de déduire facilement K.

Le point faible de l'algorithme réside dans l'échange des clés publiques : un tiers mal intentionné peut intercepter la communication et envoyer ses propres clés publiques à la fois à P1 et P2.

L'algorithme de Diffie-Hellman authentifié consiste à authentifier les clés publiques lors de leur échange. En règle général, cette authentification se fait par l'emploi de certificats.

Certificats

Un certificat est une carte d'identité numérique possédant une durée de vie limitée et attestant qu'une clé publique appartient à une entité particulière.

Plus précisement, le rôle du certificat est d'associer de facon non équivoque une clé publique avec une entité.

Attester de la validité d'une clé publique

Lorsque l'on recoit un message signé d'une entité E, le certificat permet de vérifier que le message a bien été émis par E. La vérification de la signature avec la clé publique de E (KpE) ne permet pas d'affirmer que c'est bien E qui a envoyé le message. Il faut en effet vérifier que KpE est bien la clé publique de E. C'est le rôle du certificat X509.

Un tel certificat est émis par une autorité de confiance (Certification Authority, CA en anglais) pour attester que la clé publique qu'il contient est bien la clé publique de l'entité désignée dans le certificat.

Pour cela, le certificat doit être signé par l'entité CA. Cette entité possède elle-même un certificat signé par une autorité supérieure. Les autorités de certification (CA) sont organisées en structure d'arbre. Au sommet de la hiérarchie se trouve le root qui signe lui-même son certificat.

Composition d'un certificat

Certificat X509

Un certificat comporte principalement les informations suivantes :

Les extensions de la version 2

La version 2 du standard X509 a introduit les deux champs optionnels suivants :

Les extensions de la version 3

Les extensions qui sont apparues dans la version 3 du standard X509, peuvent être classées en 4 catégories :

Informations sur la clé

Elles renseignent sur l'utilisation qui doit être faite de la clé publique et du certificat

Informations sur l'utilisation du certificat

Ce groupe d'extensions, qui contient deux champs, permet à un émetteur de certificats de spécifier les façons dont un certificat doit être utilisé, en accord avec la politique qu'il a définie (PC). Les deux champs sont : Certificate Policies et Policy Mappings.

Attributs des utilisateurs et des AC

Ce groupe d'extensions permet de mieux spécifier l'identification des utilisateurs et des certificats.

Contraintes sur la co-certification

Les trois extensions de ce groupe permettent de limiter et contrôler la confiance envers d'autres AC en cas de co-certification.

Le fonctionnement détaillé

Supposons qu'une société X veuille faire du commerce en ligne : pour des raisons de sécurité évidentes, les numéros de carte bancaire de ses clients devront au moment du paiement être chiffrés afin d'empêcher leur interception par un tiers.

Signature numérique

La société X va donc faire parvenir à son client sa clé publique PKX.

Pour que le client soit certain que cette clé publique est bien celle de la socité X, cette clé PKX va être englobée dans un certificat émis par exemple par l'autorité de certification Y.

Nous supposons que le client dispose déjà de la clé publique PKY de l'autorité de certification Y et qu'il a confiance dans cette clé.

Que contient exactement le certificat de la société X ?

Le certificat de la société X peut être décomposé en deux sous-ensembles distincts :

Cette signature est composée de l'empreinte de CX (calculée avec un algorithme précisée dans le certificat) chiffrée ensuite avec la clé secrète SKY de l'autorité de certification CA.

Signature = chiffrement_asymétrique(SKY, Empreinte(CX))

Comment vérifier la validité de la clé publique ?

Pour vérifier la validité de la clé publique contenue dans le certificat de la société X, le client va

  1. Déchiffrer cette signature avec la clé publique PKY de l'autorité de certification Y (supposée en sa possession). Le résultat est donc l'empreinte du certificat CX.
  2. Re-calculer lui-même cette empreinte (avec l'algorithme spécifié) à partir du certificat CX qui lui a été communiqué.

Si ces deux empreintes sont identiques, alors le client a l'assurance (fournie par l'autorité de certification Y) de l'authenticité du certificat CX.

Il peut donc raisonnablement utiliser la clé publique PKX contenue dans CX pour chiffrer les données transmises lors du paiement par exemple.

À l'autre bout, la société X utilisera sa clé secrète SKX pour déchiffrer ce message.

Quid de la confiance dans le CA ?

Dans le processus décrit ci-dessus, le client est censé avoir confiance dans la clé publique de l'AC.

En pratique, les applications telles que les navigateurs disposent d'un certain nombre de clés publiques de telles autorités de confiance (plus d'une centaine dans IE !).

Certificat IE

Si ce n'est pas le cas, il est toujours possible de ré-appliquer ce même processus pour vérifier l'authenticité de la clé publique de l'AC à partir de la clé publique de l'autorité de confiance qui a signé le certificat de l'AC.

Évidemment, parvenu à la racine de l'arbre, on arrive à un certificat auto-signé, émis par une autorité en qui il faudra bien avoir confiance...

Législation

En France, la loi du 13 mars 2000 sur la valeur de la preuve dans les documents électroniques confère à la signature numérique le même pouvoir de preuve qu'une signature écrite.

Autres textes :

Voir aussi :

Références

Cryptographie

Vue d'ensemble

Introduction à la cryptographie

Chiffrements asymétrique

La cryptographie à clé publique - le RSA

Le codage RSA

Le RSA

RSA - Wikipédia

Cryptographie asymétrique - Wikipédia

L'algorithme RSA

Codage RSA

Cryptographie : le code RSA

Cryptographie : Pourquoi, comment ?

L'algorithme d'Euclide étendu

L'identité de Bezout

Chiffrement symétrique

La cryptographie à algorithmes symétriques

Signature numérique

Signature numérique

Fonctions de condensation

Authentification : MAC et HMAC

Signature électronique et chiffrement mixte

Certificats

Certificat SSL : contient un script automatisant la signature d'une requête par le CA

Comment créer votre propre certificat numérique X509 : décrit la marche à suivre pour créer un certificat sous Windows

Les PKI : très complet

Exemples de certificats

Certificats X509 v3 : le format des certificats : lecture conseillée

SSL

Le protocole SSL

SSL-TLS : Sécurisation de flux applicatifs

C'est quoi SSL, SSH, HTTPS ?

SSH

Authentification forte avec SSF

SSF/SSH par l'exemple

OpenSSL

Utilisation d'OpenSSL pour les applications SSL/TLS

Articles de synthèse

Sécurité du support de communication

Fonctionnement des PKI

Certificats (électroniques) : Pourquoi ? Comment ?

Certificats X509 et infrastructures de gestion de clé

Faut-il brûler vos certificats ?

Législation

Les principaux textes français relatifs à la signature électronique

Textes de loi relatifs à la signature électronique en France

Manuel des commandes utilisées

openssl

openssl ciphers

openssl genrsa

openssl req

openssl asn1parse

openssl ca

openssl passwd

openssl pkcs12