PRATIQUE OUTILS 
MySQL : chiffrer ses données
 
Quelles sont les méthodes de chiffrement/déchiffrement disponibles par défaut ? Comment les utiliser pour sécuriser simplement les informations stockées ? Les réponses. (06/10/2006)
  Forum

Réagissez dans les forums de JDN Développeurs

Il suffit de peu pour que les informations stockées dans une base de données deviennent accessibles : retrouver le login d'un compte, ou même exploiter une faille donnant accès à la base, et les données privées peuvent devenir publiques. Plutôt que de stocker en clair les informations, et se reposer sur un login que l'on espère suffisamment introuvable, le développeur peut s'appuyer sur le chiffrement de données.

MySQL fait partie de ces systèmes qui n'ont pas besoin de se reposer sur le langage côté serveur (PHP ou autres) pour chiffrer et déchiffrer des données. Dans sa version 5.1, près de 10 algorithmes sont disponibles à cette fin, dont 4 disposent d'algorithmes inverses - les autres ne sont pas réversibles, et servent donc à créer des hash de vérification.

Les algorithmes réversibles sont les classiques encode et compress, ainsi que les plus avancées DES et AES. Parmi les algorithmes non réversibles se trouvent d'autres classiques : encrypt, MD5, et deux méthodes de transformation binaire d'une chaîne : old_password() et son successeur amélioré password().

Les usages sont différents (lire notre article "Les méthodes de cryptographie standard") : chiffrement irréversible pour les données dont seule la validité doit être vérifiée (identifiant, mot de passe...), réversible pour les données à stocker de manière sécurisée, tout en conservant la possibilité de les déchiffrer pour les afficher ou les modifier.

Ces méthodes sont le plus souvent installées par défaut au sein de MySQL, mais nécessitent parfois l'ajout d'une bibliothèque, comme zlib pour compress() ou le support SSL. De fait, elles sont appelées directement depuis le code SQL, ce qui permet de modifier facilement la méthode utilisée, ou sa force de chiffrement.

Pour un simple mot de passe :
Stockage :
INSERT INTO utilisateurs
(identifiant, motdepasse) VALUES ('$id', MD5('$mdp'));

Vérification :
SELECT id FROM utilisateurs WHERE identifiant = '$idTest' AND motdepasse = MD5('$mdpTest');

Pour du contenu sécurisé à afficher :

Stockage :
INSERT INTO dossiersSecrets(titre, contenu) VALUES ('$titre', AES_ENCRYPT('$contenu','motdepasse'));

Récupération :
SELECT titre, AES_DECRYPT(contenu,'motdepasse') AS contenu FROM dossiersSecrets;

 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page