Magazine High tech

CwsCrypto : Créer et vérifier un hash avec l'algorithme bcrypt ou PBKDF2

Publié le 01 septembre 2013 par Cr@zy @crazyws

CwsCrypto : Créer et vérifier un hash avec l'algorithme bcrypt ou PBKDF2

Suite à l'article pour sécuriser un mot de passe en base de données, je vous propose la classe PHP CwsCrypto regroupant actuellement les deux meilleures méthodes pour hacher un mot de passe.

La première est bcrypt qui est sans doute la meilleure façon de hacher un mot de passe. C'est un algorithme de hachage qui s'adapte en fonction de la puissance de votre machine. Il utilise Eksblowfish qui se rapproche beaucoup de Blowfish. La phase de hachage est la même que Blowfish mais la phase de planification de la clé de Eksblowfish assure que tout état ultérieur dépend à la fois du salt et du mot de passe utilisateur et aucun état ne peut être précalculé à l'insu des deux.
Dans cette classe, je me suis basé sur l'implémentation effectuée par Openwall, en particulier pour générer le salt Blowfish.
Vous aurez besoin d'un champs de 60 caractères en base de données pour stocker le hash bcrypt.

Ensuite l'algorithme PBKDF2 (Password Based Key Derivation Function) est une fonction de dérivation de clé faisant partie des standards de cryptographie à clé publique (PKCS). Elle remplace une norme antérieure, PBKDF1, qui ne pouvait produire que de clés dérivées allant jusqu'à 160 bits.
Ici j'ai utilisé l'implémentation faite par havoc de defuse.ca. J'ai effectué quelques modifications, notamment par la mise en place d'un nombre aléatoire d'itérations (entre 1024 et 2048).
Vous aurez besoin d'un champs de 191 caractères en base de données pour stocker le hash PBKDF2.

J'ai également intégré une méthode dans cette classe permettant de générer aléatoirement une chaîne de caractères sécurisée. Celle-ci utilise 5 méthodes :

  • mcrypt_create_iv : Une fonction PHP pour créer un vecteur d'initialisation (IV) à partir d'une source aléatoire.
  • openssl_random_pseudo_bytes : Une fonction PHP pour génèrer une chaine pseudo-aléatoire d'octets.
  • GetRandom() : Si votre serveur est sur Windows, il utilisera cette méthode si les précédentes échouent. Pour cela on utilisera la classe utilitaire CAPICOM de Microsoft.
  • /dev/urandom : Pour ceux sur un système d'exploitation de type Unix, cette fonction sera utilisée pour générer une chaîne aléatoire sécurisée.
  • microtime et getmypid : Si toutes les méthodes ci-dessus échouent, alors on se rabattra sur les fonctions PHP microtime et getmypid pour générer une chaîne aléatoire.

Vous trouverez également deux fonctions de chiffrement/déchiffrement de données générant une clé de chiffrement symétrique avec l'algorithme Blowfish en utilisant le mode CFB et une clé de chiffrement. Attention, cette fonction de chiffrement ne devrait pas être utilisée pour des données vraiment sensibles.

CwsCrypto : Créer et vérifier un hash avec l'algorithme bcrypt ou PBKDF2

Vous pouvez télécharger gratuitement la classe PHP CwsCrypto sur GitHub. Si vous rencontrez des problèmes ou si avez des idées d'améliorations, merci de poster une issue sur GitHub.


Retour à La Une de Logo Paperblog

A propos de l’auteur


Cr@zy 408 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte