EEIJ

Païou : Mandriva Linux depuis 2002. Aujourd'hui, c'est Mageia Linux


Sommaire

On se lasse de tout, sauf de comprendre.
Attribué à Virgile.

Païou essaie de comprendre quelques éléments de cryptographie

Historique

9 octobre 2013 : Reprise de la page de l'ancien site de Païou et actualisation.

Difficulté

Pour : utilisateur un peu curieux.

 Introduction

Loin d'être exhaustive, cette page voudrait simplement évoquer certaines techniques utilisée pour fiabiliser et sécuriser les échanges entre plusieurs ordinateurs.

Un ordinateur est de plus en plus rarement utilisé en isolé. La plupart du temps il est connecté à d'autres machines, soit dans un réseau local, soit par Internet. Les informations sont alors transmise d'un poste à un autre.

Les données transmises d'un ordinateur à un autre peuvent, au cours du transport, être dénaturées, être interceptées par des personnes indésirables ...

Haut

 La problématique : intégrité, authenticité et confidentialité

Ce sont trois notions bien distinctes :

Vocabulaire

On trouve trop souvent les termes de cryptage et de décryptage. Ces termes ne sont pas reconnus dans la langue française. Il faut utiliser les termes corrects : chiffrement et déchiffrement.

Haut

 Les techniques

Pour assurer l'intégrité, l'authenticité et le secret, différentes techniques sont mises en œuvre.

 Le hachage

Une fonction de hachage permet de donner une empreinte qui caractérise les données fournies en entrée.
Sa longueur est fixe et ne dépend pas de la longueur du document haché.

Le résultat d'une fonction de hachage ne permet pas de restituer les données initiales. Il permet simplement d'en contrôler l'intégrité.

Hachage

Le processus est le suivant :

  1. L'émetteur du document (message ou fichier) crée une empreinte de ce document,
  2. il envoie le document et son empreinte,
  3. le destinataire crée l'empreinte du document reçu,
  4. il compare l'empreinte qu'il vient de créer à celle qu'il a reçue.

Un bon algorithme de hachage doit donc :

Haut

 Le chiffrement par clé symétrique

L'un des concepts fondamentaux de la cryptographie symétrique est la clé secrète.
Une clé est une donnée qui, traitée par un algorithme, permet de chiffrer et de déchiffrer un message.
Expéditeur et destinataire disposent chacun d'un algorithme permettant, l'un de chiffrer, l'autre de déchiffrer.
Les algorithmes dépendent d'une seule clé que doivent s'échanger expéditeur et destinataire.

Le terme "symétrique" vient de cette particularité. C'est la même clé qui sert au chiffrement et au déchiffrement.
En particulier, expéditeur et destinataire doivent s'échanger cette clé, qui doit rester secrète sous peine qu'un tiers parvienne à déchiffrer les correspondances. Voilà pourquoi on parle aussi de chiffrement à clé secrète.

Le point fort du chiffrement symétrique est que ses temps de calcul sont assez courts.
L'échange des clés secrètes, qui doit se faire par un canal sécurisé, est souvent le point faible de ces méthodes de chiffrement.

Chiffrement symétrique

Le processus est le suivant :

  1. L'un des partenaires crée une clé secrète,
  2. il ne la transmet qu'à l'autre, d'une façon sure,
  3. l'expéditeur envoie son document dans un coffre fermé avec la clé secrète,
  4. seul le destinataire peut ouvrir le coffre à l'aide de l'autre clé secrète, celle que lui seul possède également.
Haut

 Le chiffrement par clé publique et clé privée

Ici le concept repose sur deux clés, l'une privée et secrète, l'autre publique et distribuée.

L'expéditeur doit, au préalable, posséder la clé publique du destinataire. Il chiffre son document avec cette clé publique. Seul le destinataire, possédant donc la clé privée correspondante, pourra déchiffrer le document.

Il n'y a plus le problème de l'échange confidentiel d'une clé secrète, en contre-partie, les temps de calcul sont assez longs.

Le processus :

Chiffrement asymétrique
  1. Le destinataire crée deux clés, l'une privée et secrète, l'autre publique,
  2. il transmet la clé publique à tous ses correspondants,
  3. l'expéditeur envoie son document dans un coffre fermé avec la clé publique du destinataire,
  4. seul le destinataire peut ouvrir le coffre à l'aide de sa clé privée, celle que lui seul possède.
Haut

 Quelques algorithmes

 Algorithmes de contrôle et de hachage

Ces algorithmes servent donc à vérifier que le fichier ne comporte pas d'erreur.

Le contrôle de parité

Une donnée informatique est constituée par une suite de 0 et de 1. Si vous comptez le nombre de 1 dans une trame, vous obtiendrez soit un nombre pair, soit un nombre impair. Le contrôle se fait en ajoutant un bit supplémentaire (un zéro ou un un, selon le cas), de façon à toujours obtenir un nombre impair (mais on pet décider de toujours prendre un nombre pair). Si à l'arrivée le nombre n'est pas impair, c'est qu'il y a eu erreur pendant la transmission. Ce système n'est pas parfait, car deux erreurs dans la même trame peuvent se compenser. Mais il est très simple.

Utilisation

code correcteur d'erreur

Haut

Le CRC (contrôle de redondance cyclique)

Le contrôle de redondance cyclique travaille également sur les paquets de données, appelés trames.
À chaque trame est ajouté un bloc de données, de longueur bien définie, appelé code de contrôle (parfois CRC par abus de langage). Le code CRC contient des éléments redondants vis-à-vis de la trame, permettant de détecter les erreurs. Ce code de contrôle est calculé sur la trame émise et ajoutée à la trame transmise. Il est recalculé sur la trame reçue, ce qui permet de détecter une erreur de transmission.

En fait, il existe plusieurs standards de calcul du CRC : CRC-CCITT (CRC-4), Bluetooth, CRC-32 ...

Utilisation

code correcteur d'erreur

Haut

Hachage MD5 (Message Digest 5)

MD5 (Message Digest 5) est une fonction de hachage cryptographique qui calcule, à partir d'un fichier, son empreinte numérique (en l'occurrence une séquence de 128 bits ou 32 caractères hexadécimaux) avec une probabilité très forte que deux fichiers différents donnent deux empreintes différentes.

MD5 reste encore largement utilisée comme outil de vérification lors des téléchargements et l'utilisateur peut valider l'intégrité de la version téléchargée grâce à l'empreinte, même si quelques collisions ont cependant été constatées. Le contrôle peut se faire avec un programme comme md5sum.

Utilisation

contrôle de l'intégrité d'un fichier, empreinte d'un mot de passe, avec la présence d'un sel permettant de ralentir une attaque par force brute (mais à éviter),

Haut

Hachage SHA (Secure Hash Algorithm)

SHA représente une série de fonctions de hachage dont les algorithmes sont complètement différents les uns des autres.

Utilisation

SHA1 est très employé pour contrôler l'intégrité des fichiers transmis par internet, par exemple, et tend à remplacer MD5 qui peut présenter des collisions.

Pour des processus très sécurisés, tels que SSL ou TLS, c'est plutôt SHA256 ou SHA384 qui sont utilisés.

Haut

Hachage Whirlpool

Whirlpool est un autre algorithme de hachage, délivrant une empreinte de 512 bits, comme SHA-512. Whirlpool se comporte également comme un excellent générateur de nombres pseudo-aléatoires.

Utilisation

Sa robustesse le destine aux processus très sécurisés, tout comme SHA-256 et SHA-512.

Haut

 Algorithmes de chiffrement symétrique

Comme son nom l'indique, un algorithme de chiffrement permet de chiffrer un document pour le rendre illisible à toute personne qui ne possède pas la clé du déchiffrement.

En fait, dans le chiffrement symétrique il y a 3 algorithmes :

  1. de création de la clé secrète unique
  2. de chiffrement
  3. de déchiffrement

Création d'une clé secrète

La création de la clé secrète est ici primordiale. Il ne faut pas pouvoir la retrouver.
Elle peut être produite par :

Chiffrement symétrique DES (Data Encryption Standard) et triple DES

DES fait partie de la famille des chiffrements itératifs par blocs. Il transforme un bloc de 64 bits en un autre bloc de 64 bits. Il utilise une clé (secrète) de 56 bits.

Le triple DES enchaîne 3 applications successives de l'algorithme DES sur le même bloc de données de 64 bits, avec 2 ou 3 clés DES différentes.

Utilisation

De nos jours, le DES « simple » ne subsiste que dans d'anciennes applications. C'est le Triple DES qui reste très utilisé. Le standard DES a été remplacé en 2001 par l'AES (Advanced Encryption Standard).

Une version unidirectionnelle de DES a été utilisée pour hacher les mots de passe et en donner une empreinte. La sécurité étant jugée trop faible, DES n'est plus utilisé.

Haut

Chiffrement symétrique AES (Advanced Encryption Standard)

L'algorithme prend en entrée un bloc de 128 bits (16 octets), la clé fait 128, 192 ou 256 bits.

L'AES n'a pour l'instant pas été cassé.

Utilisation

Cet algorithme est conseillé pour les chiffrements symétriques.

Haut

Chiffrement symétrique Blowfish

L'algorithme prend en entrée un bloc de 64 bits (16 octets), la clé fait 32 à 448 bits. Il est plus rapide que le triple DES et que IDEA.

Utilisation

Cet algorithme est conseillé pour les chiffrements symétriques.

Une version dérivée est utilisée pour faire l'empreinte des mots de passe.

Haut

Chiffrement symétrique IDEA (International Data Encryption Algorithm)

Il utilise une clé de 128 bits, réalise un chiffrement par blocs de 64 bits

Utilisation

Cet algorithme est connu essentiellement car il a longtemps constitué la partie "cryptographie à clé secrète" du célèbre logiciel PGP.

Haut

 Algorithmes de chiffrement asymétrique

Avec le chiffrement asymétrique, il faut créer deux clés, l'une secrète et personnelle, l'autre publique et distribuée.

Avec le chiffrement asymétrique il y a également 3 algorithmes :

  1. de création des deux clés
  2. de chiffrement avec la clé publique
  3. de déchiffrement avec la clé privée

Chiffrement asymétrique RSA (de Ron Rivest, Adi Shamir et Leonard Adleman)

L'algorithme est dans le domaine public depuis l'année 2002. Il est basé sur les nombres premiers.

Génération des clés

  1. prendre deux grands nombres premiers distincts p et q (de taille à peu près égale).
  2. calculer n = pq, appelé module de chiffrement.
  3. calculer φ(n) = (p-1)(q-1), c'est la valeur de l'indicatrice d'Euler en n
  4. choisir un entier naturel e, premier avec φ(n) et strictement inférieur à φ(n), appelé exposant de chiffrement.
    Il n'a aucun facteur en commun avec (p-1)(q-1).
  5. calculer l'entier naturel d, inverse de e modulo φ(n), et strictement inférieur à φ(n), appelé exposant de déchiffrement
    e modulo φ(n) représente le reste de la division de e par φ(n)

La clé publique de chiffrement est le couple (n,e).
La clé privée de déchiffrement est le couple (n,d).

Chiffrement

Déchiffrement

Utilisation

Cet algorithme est très largement utilisé, par exemple dans les navigateurs pour les sites sécurisés et pour chiffrer les emails.

Fiabilité

La sécurité de l'algorithme RSA repose sur la difficulté à factoriser n. Pour décrypter le message, il est nécessaire de trouver d connaissant e, ce qui nécessite de recalculer φ, et donc de connaître p et q, les facteurs premiers de n.

Or, la factorisation d'un entier (de très grande taille) en facteurs premiers est extrêmement difficile, cette opération nécessitant une capacité de calcul très importante. Afin de se prémunir contre les puissances de calculs grandissantes, il est recommandé d'utiliser des clés de grandes taille.

Chiffrement asymétrique Diffie-Hellman (de Whitfield Diffie et Martin Hellman)

Jusqu'en septembre 2002, RSA était - aux Etats-Unis - breveté, donc non utilisable librement. Diffie-Hellman a donc été adopté en remplacement.

En travaux Travaux







 Le contrôle de l'intégrité des messages

Le signal électrique qui relie les ordinateurs peut subir des perturbations (distorsion, présence de bruit), notamment lors du transport des données sur un long trajet. Ainsi, le contrôle de la validité des données est nécessaire pour certaines applications (professionnelles, bancaires, industrielles, confidentielles, relatives à la sécurité, ...).

C'est pourquoi il existe des mécanismes permettant de garantir un certain niveau d'intégrité des données, c'est-à-dire de fournir au destinataire une assurance que les données reçues sont bien similaires aux données émises.

 Le contrôle de l'authenticité du message et de son émetteur

Message Authentification Code

Les codes d'authentification de message, plus connus sous l'acronyme MAC, de l'anglais Message Authentification Code, sont des fonctions cryptographiques destinées à vérifier l'intégrité de données et à en authentifier l'origine.
Ces MAC fonctionnent comme les fonctions de hachage (voir le chapitre Algorithmes) : ils calculent à partir d'un message de longueur arbitraire une empreinte de longueur fixe (on appelle ce résumé un haché). Mais, contrairement aux fonctions de hachage, cette empreinte dépend aussi d'une clé secrète K.

Centre de contrôle

Lors d'une communication entre individus ou systèmes, on utilise les codes d'authentification de message de la façon suivante :

  1. Expéditeur et destinataire commencent par se mettre d'accord sur une clé secrète K, par un canal sécurisé,
  2. l'expéditeur veut envoyer un message M; il calcule son MAC à l'aide de la clé secrète K,
  3. il envoie les deux documents : le message M et son code MAC
  4. à l'arrivée, le destinataire calcule lui aussi le MAC à l'aide de sa propre secrète et le compare à la version envoyée,

Si les deux coïncident, il est sûr à la fois de qui lui a expédié le message et aussi que ce message n'a pas été modifié. Sinon, c'est que quelque chose ne va pas!

En travaux Travaux




Signature numérique avec deux jeux de clés publiques/privées

Signature numérique

Certificat

Le contrôle de la confidentialité du message

Haut

 Le hachage

Une fonction de hachage permet de donner une empreinte qui caractérise les données fournies en entrée.
Sa longueur est fixe et ne dépend pas de la longueur du document haché.

Le résultat d'une fonction de hachage ne permet pas de restituer les données initiales. Il permet simplement d'en contrôler l'intégrité.

Le processus est le suivant :

  1. L'émetteur du document (message ou fichier) crée une empreinte de ce document,
  2. il envoie le document et son empreinte,
  3. le destinataire crée l'empreinte du document reçu,
  4. il compare l'empreinte qu'il vient de créer à celle qu'il a reçue.

Un bon algorithme de hachage doit donc :

 La confidentialité du mot de passe

Mot de passe de la connexion à votre ordinateur

Les mots de passe ne doivent pas être stockés en clair dans l'ordinateur. Le bon processus est le suivant :

  1. Lors de l'établissement d'un mot de passe, une empreinte du mot de passe est faite par un hachage du mot de passe, avec un sel donné, avec plusieurs passes,
  2. cette empreinte est sauvegardée,
    (elle débute par un code représentant le type de hachage suivi du sel utilisé ou du nombre de passes).
  3. Lors de la connexion d'un utilisateur, le mot de passe qu'il tape (en aveugle) est soumis au même hachage, avec le même sel et le même nombre de passes.
  4. l'empreinte obtenue est comparée à celle qui est stockée. Elles doivent être identiques, puisque réalisées dans les mêmes conditions.

Dans le fichier /etc/shadow, vous pouvez lire une ligne de la forme $code$sel$empreinte
ou de la forme $code$Itérations$empreinte

Les lignes ci-dessous indiquent les principaux codes utilisés, l'utilisation d'un sel ou d'un nombres d'itérations, ainsi que la longueur de l'empreinte obtenue :

Autres mots de passe

Mais, bien sûr, les mots de passe ne concernent pas que la connexion à votre ordinateur.

En travaux Travaux




 Le hachage DES

Le hachage des mots de passe, sous Linux, se faisait avec un algorithme DES un peu modifié. Le mot de passe utilisateur est tronqué à 8 caractères réduits à 7 bits (le huitième servant simplement de contrôle de parité). Ceci donne une clé de 56 bits.
Cette clé est ensuite utilisée pour chiffrer à plusieurs reprises un bloc de 64 bits, (généralement tous à 0). Un sel de 2 caractères rend le craquage plus difficile. Le résultat est une série de 13 caractères ASCII imprimables (les deux premiers caractères représentent le sel lui-même).

L'algorithme DES n'est plus considéré comme étant assez sûr et n'est normalement plus utilisé pour hacher les mots de passe.

Haut

 Les fonctions de hachage, les mots de passe

Une fonction de hachage permet de donner une empreinte qui caractérise les données fournies en entrée.

Le résultat d'une fonction de hachage ne permet pas de restituer les données initiales. Il permet simplement d'en contrôler l'intégrité.

Un bon algorithme de hachage doit normalement :

Utilisation

Dans la transmission des données, par internet par exemple, le hachage permet le contrôle de l'intégrité du fichier reçu.

En cryptographie, la fonction de hachage permet d'obtenir l'empreinte numérique d'un fichier (le message), afin de pouvoir en vérifier l'authenticité.

Le hachage permet également des mécanismes d'authentification par mot de passe, sans stockage de ce dernier.

Pour rendre le déchiffrage encore plus difficile (surtout pour le hachage des mots de passe), on peut combiner le hachage des données, avec un autre élément, appelé le sel.

Haut

 L'algorithme DES

L'algorithme DES transforme un bloc de 64 bits en un autre bloc de 64 bits.

Chiffrement

Le hachage DES (Data Encryption Standard) est utilisé pour le chiffrement de documents. Cet aspect sera vu plus bas.

Mot de passe

Le hachage des mots de passe, sous Linux, se faisait avec un algorithme DES un peu modifié. Le mot de passe utilisateur est tronqué à 8 caractères réduits à 7 bits (le huitième servant simplement de contrôle de parité). Ceci donne une clé de 56 bits.
Cette clé est ensuite utilisée pour chiffrer à plusieurs reprises un bloc de 64 bits, (généralement tous à 0). Un sel de 2 caractères rend le craquage plus difficile. Le résultat est une série de 13 caractères ASCII imprimables (les deux premiers caractères représentent le sel lui-même).

L'algorithme DES n'est plus considéré comme étant assez sûr et n'est normalement plus utilisé pour hacher les mots de passe.

Haut Haut

 Le hachage SHA (Secure Hash Algorithm)

Mot de passe

SHA permet également de réaliser l'empreinte des mots de passe. Certaines distributions Linux l'utilisent (par defaut, Arch utilise SHA-512 pour les mots de passe. Idem pour Redhat et CentOS)

Chiffrement

En travaux Travaux




Haut

 Le hachage avec blowfish

Blowfish est un algorithme de chiffrement symétrique par blocs conçu par Bruce Schneier en 1993.

Contrôle d'intégrité des messages

Je n'ai pas vu d'exemple utilisant Blowfish en contrôle d'intégrité d'un message. Blowfish ne semble pas être sûr.

Mot de passe

Les mots de passe dans Mageia commencent par $2a$. Ceci signifient qu'ils utilisent Blowfish.

PHP permet l'utilisation de Blowfish pour hacher les mots de passe à l'aide de la fonction crypt. Elle s'utilise de la façon suivante :
crypt(str,salt) avec str = mot_de_passe et salt = sel
Pour Blowfish, le sel sera de la forme $2y$14$wHhBmAgOMZEld9iJtV./aq
avec 2y = blowfish, 14 = 214 tours de chiffrement, wHhBmAgOMZEld9iJtV./aq = 22 octets de sel

Chiffrement

Le hachage Blowfish est utilisé pour le chiffrement de documents. Cet aspect sera vu plus bas.

En travaux Travaux




Mot de passe

Haut

 Test de plusieurs types de hachage