Païou : Mandriva Linux depuis 2002. Aujourd'hui, c'est Mageia Linux
On se lasse de tout, sauf de comprendre.
Attribué à Virgile.
9 octobre 2013 : Reprise de la page de l'ancien site de Païou et actualisation.
Pour : utilisateur un peu curieux.
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 ...
Ce sont trois notions bien distinctes :
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.
Pour assurer l'intégrité, l'authenticité et le secret, différentes techniques sont mises en œuvre.
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 :
Un bon algorithme de hachage doit donc :
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.
Le processus est le suivant :
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 :
Ces algorithmes servent donc à vérifier que le fichier ne comporte pas d'erreur.
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
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
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),
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.
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.
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 :
La création de la clé secrète est ici primordiale. Il ne faut pas pouvoir la retrouver.
Elle peut être produite par :
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é.
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.
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.
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.
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 :
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
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.
Jusqu'en septembre 2002, RSA était - aux Etats-Unis - breveté, donc non utilisable librement. Diffie-Hellman a donc été adopté en remplacement.
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.
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.
Lors d'une communication entre individus ou systèmes, on utilise les codes d'authentification de message de la façon suivante :
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!
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 :
Un bon algorithme de hachage doit donc :
Les mots de passe ne doivent pas être stockés en clair dans l'ordinateur. Le bon processus est le suivant :
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 :
$5$ = SHA256, 43 octets
$6$ = SHA512, 86 octets
Mais, bien sûr, les mots de passe ne concernent pas que la connexion à votre ordinateur.
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.
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 :
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.
L'algorithme DES transforme un bloc de 64 bits en un autre bloc de 64 bits.
Le hachage DES (Data Encryption Standard) est utilisé pour le chiffrement de documents. Cet aspect sera vu plus bas.
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.
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)
Blowfish est un algorithme de chiffrement symétrique par blocs conçu par Bruce Schneier en 1993.
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.
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
Le hachage Blowfish est utilisé pour le chiffrement de documents. Cet aspect sera vu plus bas.