Un peu de « Salts » avec vos mots de passe ?

Un nouveau tutoriel sur les mots de passe vient de sortir sur www.apprendre-php.com. Il traite de comment sécuriser les mots de passe adéquatement. Tout le monde connait et utilise bien sur le hashshage à l’aide de md5 ou sha1. Ce qui a piqué m’a curiosité dans ce tutoriel ce sont les salts.

Qu’est ce que les salts ? Les salts ne sont en fait que des sortes de clés, gardé secrètes du côté de votre application PHP et qui combinés à vos mots de passe renforce la sécurité de ceux ci. Mais pourquoi utiliser les salts alors que les hashs ne sont pas réversibles ? À cause des Tables Arc-en-ciel. Comment ça les table arc-en-ciel me direz-vous ? Vous devez pensez que je débloque complètement là non ?

Ces tables sont en fait des dictionnaires qui nous permettent rapidement de savoir un mot de passe à partir d’un hash. Vous comprennez donc qu’il s’agit d’un jeu d’enfant d’essayer de retrouver le bon mot de passe à partir d’un hash. Voyons donc un exemple:

Créons les salts dans votre fichier de configuration.

// config.inc.php
 
$salt1 = 'Windor!';
$salt2 = 'NosCompliments!';

Comment les utilisons nous:

// index.php
 
// On inclut notre fichier de configuration.
require_once('conf/config.inc.php');
 
// On obtient le hash dans la base de données.
$hashDb = getHashDb();
 
// On construit le hash du mot de passe fournit par l'utilisateur.
$hashMdp = md5 ( $salt1 . $mdp . $salt2 );
 
// On compare les hashs.
if( $hashMdp === $hashDb ) {
    echo 'Mot de passe valide !';
} else {
    echo 'Mot de passe invalide !';
}

Voilà ! Aussi simple que ça !

Rien ne vous empêche d’ajouter plus de salts ou de combiner plusieurs méthodes de hash dans votre vérification.

par exemple:

$monHash = sha1( md5( $salts1 ) . sha1( $mdp ) . md5( md5( $salts2 ) . md5( $salts3) ) );