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.
|