TUTORIELS 
Les méthodes de cryptographie standard
Présentation des principaux algorithmes de chiffrement, et de leurs implémentations dans les principaux langages.  (26 septembre 2002)
 

Suite à notre article précédent présentant le vocabulaire de la cryptographie et quelques méthodes et algorithmes, nous allons à présent passer à une présentation un peu plus concrète de la cryptographie, en présentant les divers algorithmes et méthodes disponibles en standard dans les langages les plus courants. Cela nous amènera ensuite à une mise en pratique de ces méthodes dans un cas concret.

Deux méthodes de chiffrement sont pratiquées: le chiffrement réversible (two-way encryption, ou reversible encipherment) et le chiffrement à sens unique (one-way encryption, ou irreversible encipherment). Si la première est généralement utilisée pour la transmission de messages cryptés entre deux entités disposant d'une clé pouvant décrypter le chiffrement, la seconde est utilisée dès qu'il s'agit de stocker une donnée qui n'a pas sensée être déchiffrée, même par ceux connaissant la méthode de chiffrement (par exemple, un mot de passe).

Le chiffrement réversible suppose qu'il existe toujours un moyen de décrypter le texte chiffré, que ce soit par les deux interlocuteurs (à l'aide d'une seule clé de chiffrement/déchiffrement) ou par un seul (à l'aide d'une clé publique pour le chiffrement et d'une clé privée pour le déchiffrement). L'outil PGP est l'exemple-type de système de chiffrement à clé publique (cryptographie asymétrique), tandis que le DES (Data Encryption Standard) est le plus connu des algorithmes à clé unique (cryptographie symétrique), et n'est donc plus très sûr - l'AES/Rijndael (pour Advanced Encryption Standard) est destiné à le remplacer.

Le chiffrement à sens unique, pour sa part, fait le plus souvent appel à une seule et même technique: le "hashage". Parce que la donnée chiffrée n'est pas sensée être déchifrée par quiconque, les algorithmes de hashage ne chiffrent pas à proprement parler la donnée, mais la convertissent en un message de longueur fixe (en général de longueur inférieure à la donnée d'origine). Le but est d'utiliser le message hashé (ou "hash") comme "empreinte digitale" de la donnée originale, qu'il identifie de manière univoque (précise et n'acceptant qu'une seule interprétation). Ainsi, l'algorithme de chiffrement MD5 (pour Message Digest algorithm, version 5), développé par Ronald L. Rivest du MIT et de RSA Technologies, transforme un message de longueur quelconque en un message de 128 bits (le hash).
C'est une méthode de chiffrement très souvent utilisée pour les systèmes de mots de passe, où seul le hash est stocké. Lorsque l'utilisateur entre son mot de passe, celui-çi est à nouveau "hashé", et le hash résultant est comparé à celui stocké sur le système. Si les deux correspondent, c'est que le mot de passe est le bon. A noter: si l'utilisateur a oublié son mot de passe, la seule solution sera de lui en créer un nouveau. Dans le cas où l'on souhaite avoir accés aux mots de passe d'un système (au risque de compromettre sa sécurité), le chiffrement à sens unique n'est pas la technique à utiliser.
Le hashage permet aussi de vérifier l'intégrité d'un fichier: si le hashage d'un fichier reçu ne donne pas le même hash qui celui fourni par l'expéditeur du fichier, c'est que celui-ci est corrompu, ou a été modifié en cours de route. Il ne faudra donc pas faire confiance au fichier.

Quasiment tous les langages modernes disposent maintenant de méthodes internes de chiffrement. Dans le cas contraire, les librairies permettant d'ajouter cette fonctionnalité sont monnaie courante. Nous allons donc tenter de résumer en un tableau les principales fonctions disponibles en standard ou facilement intégrables à un environnement de travail...

Les différentes méthodes de chiffrement
Langages
Méthodes
Fonctions/librairies
Algorithmes
PHP
chiffrement à sens unique
DES, MD5, Blowfish
MD5
MD5, SHA-1, GOST...
chiffrement réversible mcrypt
Blowfish, DES, AES...
ASP
les deux
DES, MD5, SHA, S/MIME...
MD5, SHA, DES, AES...
Perl
chiffrement à sens unique
?
les deux nombreux modules... quasiment tous...
Java
les deux
DES, Blowfish, HmacMD5...
C# / .NET
les deux
les principaux ...
Delphi
les deux
MD5, DES, IDEA, Blowfish...
DES, AES, MD5, SHA-1...
JavaScript
chiffrement à sens unique
MD4, MD5, SHA-1
chiffrement réversible
DES, TripleDES
Flash MX
chiffrement à sens unique
MD5
SHA-1
MD5

Ce ne sont là que quelques-unes des nombreuses implémentations d'algorithmes de chiffrement disponibles pour chaque langage. Nous présenterons dans notre prochain article une application concrète de certaines de ses fonctions.

 
[ Xavier Borderie JDNet
 
Accueil | Haut de page