|
Table des matières
LXXXII. chiffrement mcryptIntroductionCes fonctions permettent d’accéder à la bibliothèque mcrypt, qui dispose d’une grande variété d’algorithmes de chiffrement, tels DES, TripleDES, Blowfish (par défaut), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA, RC2 et GOST en modes CBC, OFB, CFB et ECB. De plus, elles acceptent aussi RC6 et IDEA qui sont considérés comme “non-libres”. Pré-requisCes fonctions utilisent mcrypt. Pour utiliser cette bibliothèque, téléchargez le fichier “libmcrypt-x.x.tar.gz” sur http://mcrypt.sourceforge.net/ et suivez les instructions d’installation fournies. Les utilisateurs Windows trouveront toutes les bibliothèques nécessaires sur http://ftp.emini.dk/pub/php/win32/mcrypt/. Depuis PHP 5.0.0, vous avez besoin de la version 2.5.6 ou suivant de la bibliothèque libmcrypt. Si vous compilez PHP avec la bibliothèque “libmcrypt 2.4.x”, les algorithmes suivants sont supportés : CAST, LOKI97, RIJNDAEL, SAFERPLUS, SERPENT ainsi que les chiffrements suivants : ENIGMA (chiffrement), PANAMA, RC4 et WAKE. Avec “libmcrypt 2.4.x” un autre mode de chiffrement est disponible : nOFB. InstallationVous devez compiler PHP avec l’option “–with-mcrypt=[DIR]” pour activer cette extension. DIR est le dossier d’installation de mcrypt. Assurez-vous de compiler libmcrypt avec l’option “–disable-posix-threads”. Configuration à l'exécutionLe comportement de ces fonctions est affecté par la configuration dans le fichier “php.ini”. Tableau 1. Options de configuration
Pour plus de détails sur les constantes PHP_INI_*, reportez-vous à Annexe G. Types de ressourcesCette extension ne définit aucune ressource. Constantes pré-définiesCes constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l’exécution. Mcrypt peut opérer en 4 modes de chiffrement (CBC, OFB, CFB, et ECB). Si vous utilisez libmcrypt-2.4.x ou plus récent, les fonctions peuvent aussi opérer en mode nOFB et en mode STREAM. Nous allons présenter la technique d’utilisation de ces modes. Pour plus de références et de détails, reportez-vous au livre suivant : Applied Cryptography by Schneier (ISBN 0-471-11709-9).
Voici quelques autres modes et méthodes de compression : “MCRYPT_ENCRYPT” (entier) “MCRYPT_DECRYPT” (entier) “MCRYPT_DEV_RANDOM” (entier) “MCRYPT_DEV_URANDOM” (entier) “MCRYPT_RAND” (entier) Mcrypt ciphersVoici une liste non exhaustive des modes de chiffrement de l’extension mcrypt. Pour disposer d’une liste complète des chiffrements supportés, voyez les définitions dans le fichier “mcrypt.h”. La règle générale avec l’API mcrypt-2.2.x API est que vous pouvez accéder au mode de chiffrement depuis PHP avec la constante MCRYPT_ciphername. Avec la bibliothèque libmcrypt-2.4.x et libmcrypt-2.5.x, ces constantes fonctionnent toujours, mais il est possible de spécifier le nom du chiffrement dans une chaîne, lors de l’appel à mcrypt_module_open().
Vous devez (mode “OFB” et “OFB”) ou pouvez (mode “CBC”) fournir un vecteur d’initialisation (IV) pour ces modes de chiffrement. IV doit être unique, et avoir la même valeur au chiffrement et au déchiffrement. Pour des données qui seront enregistrées après chiffrement, vous pouvez prendre le résultat d’une fonction telle que MD5, appliquée sur le nom du fichier. Sinon, vous pouvez envoyer IV avec les données chiffrées, (reportez-vous au chapitre 9.3 de Applied Cryptography by Schneier (ISBN 0-471-11709-9) de Schneier (ISBN 0-471-11709-9) pour plus de détails sur le sujet). ExemplesMcrypt permet de chiffrer et de déchiffrer en utilisant les méthodes mentionnées ci-dessus. Les 4 commandes importantes mcrypt_cfb(), mcrypt_cbc(), mcrypt_ecb() et mcrypt_ofb()) peuvent toutes opérer en mode “MCRYPT_ENCRYPT” et “MCRYPT_DECRYPT”.
<?php $key = "Cette clé est ultra-secrète"; $input = "Rencontrons-nous dans notre place secrète à 9 h 00."; $encrypted_data = mcrypt_ecb(MCRYPT_TripleDES, $key, $input, MCRYPT_ENCRYPT); ?> Cet exemple va retourner les données cryptées dans la variable $encrypted_data. Si vous avez compilé PHP avec libmcrypt 2.4.x, ces fonctions sont toujours disponibles, mais il est vivement conseillé d’utiliser les nouvelles fonctions avancées.
<?php $key = "Ceci est une vraie clé secrète"; $input = "Rendez-vous à 9 heures, dans notre planque."; $td = mcrypt_module_open(MCRYPT_TripleDES, "", MCRYPT_MODE_ECB, ""); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); mcrypt_generic_init($td, $key, $iv); $encrypted_data = mcrypt_generic($td, $input); mcrypt_generic_end($td); ?> Cet exemple va retourner les données cryptées dans la variable “$encrypted_data”. Pour un exemple complet, voyez mcrypt_module_open(). Table des matières mcrypt_cbc – Chiffre/déchiffre des données en mode CBCmcrypt_cfb – Chiffre/déchiffre des données en mode CFBmcrypt_create_iv – Crée un vecteur d’initialisation à partir d’une source aléatoire mcrypt_decrypt – Déchiffre un texte avec les paramètres donnésmcrypt_ecb – Obsolète : Chiffre/déchiffre des données en mode ECBmcrypt_enc_get_algorithms_name – Retourne le nom de l’algorithmemcrypt_enc_get_block_size – Retourne la taille de blocs d’un algorithmemcrypt_enc_get_iv_size – Retourne la taille du VI d’un algorithmemcrypt_enc_get_key_size – Retourne la taille maximale de la clé pour un modemcrypt_enc_get_modes_name – Retourne le nom du modemcrypt_enc_get_supported_key_sizes – Retourne un tableau contenant les tailles de clés acceptées par un algorithme mcrypt_enc_is_block_algorithm_mode – Teste le chiffrement par blocs d’un modemcrypt_enc_is_block_algorithm – Teste le chiffrement par blocs d’un algorithmemcrypt_enc_is_block_mode – Teste si le mode retourne les données par blocsmcrypt_enc_self_test – Teste un module ouvertmcrypt_encrypt – Chiffre un textemcrypt_generic_deinit – Prépare le module pour le déchargementmcrypt_generic_end – Termine un chiffrementmcrypt_generic_init – Initialise tous les buffers nécessaires mcrypt_generic – Chiffre les donnéesmcrypt_get_block_size – Retourne la taille de blocs d’un chiffrementmcrypt_get_cipher_name – Lit le nom du chiffrement utilisémcrypt_get_iv_size – Retourne la taille du VI utilisé par un couple chiffrement/mode mcrypt_get_key_size – Retourne la taille de la clé d’un chiffrementmcrypt_list_algorithms – Liste tous les algorithmes de chiffrement supportésmcrypt_list_modes – Liste tous les modes de chiffrement supportésmcrypt_module_close – Décharge le module de chiffrement mcrypt_module_get_algo_block_size – Retourne la taille de blocs d’un algorithmemcrypt_module_get_algo_key_size – Retourne la taille maximale de clémcrypt_module_get_supported_key_sizes – Retourne un tableau contenant les tailles de clés supportées par un algorithme de chiffrement mcrypt_module_is_block_algorithm_mode – Indique si un mode fonctionne par blocsmcrypt_module_is_block_algorithm – Indique si un algorithme fonctionne par blocsmcrypt_module_is_block_mode – Indique si un mode travaille par blocsmcrypt_module_open – Ouvre le module de l’algorithme et du mode à utiliser mcrypt_module_self_test – Teste un modemcrypt_ofb – Chiffre/déchiffre des données en mode OFBmdecrypt_generic – Déchiffre Travail collaboratifContribuez, en ajjoutant des elements a cette page de manuel : Merci de votre aide |