• STATISTIQUES
  • Il y a eu un total de 0 membres et 49984 visiteurs sur le site dans les dernières 24h pour un total de 49 984 personnes!
    Membres: 2 605
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] PHP Débutant
    Apprendre le PHP par l'exemple, facilement et simplement. Réservé d'abord aux débutants....
    Programmation
    [FR] Zmaster
    Articles sur l'informatique, le hacking, le P2P, les divx, les astuces windows XP, les GSM, Emule, la cryptograph...
    Hacking
    [FR] PHP France
    Pour tout savoir sur le PHP, en français. Vous trouverez des tutoriels, des exemples, des astuces, toute la do...
    Hacking
    [EN] HackQuest
    Logic: 12, JavaScript: 14, Applet: 6, CrackIt: 13, Crypto: 11, Internet: 3, Exploit: 7, Stegano: 12, Flash: 1, Programmi...
    Challenges
    [FR] Le top web
    Nous offrons une sélection la plus large possible de resources webmaster gratuites, hébergement gratuit...
    Webmaster
    [EN] Hack this site
    Basic: 11, Realistic: 17, Application: 18, Programming: 12, Extbasic: 14, Javascript: 7, Stego: 17
    Challenges
    [FR] Secuser
    Actualité de la sécurité informatique, fiches virus et hoax, alertes par email, antivirus gratui...
    Hacking

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[PHP] _password_hash
13-06-2014, 15h18
Message : #9
Ekroz Hors ligne
Membre actif
*



Messages : 77
Sujets : 13
Points: 43
Inscription : May 2013
RE: [PHP] _password_hash
Alors voilà je me suis documenté un peu au niveau des fonctions de hachage et nous sommes tous dans le faux. Big Grin
hash ( $password . $salt ) et même hash_hmac ( $password , $salt ) ne sont pas considérés comme sûrs pour stocker des mots de passe.
Apparemment la raison viendrait des Rainbow Tables couplés à la puissance des GPU.

En réalité les fonctions de hachage ne sont pas faites pour être coûteuses en ressources et donc longues à bruteforcer, mais bel et bien pour faire une "signature" rapide avec le moins de risque de collisions possibles.

La librairie PHPASS ainsi que l'algorithme PBKDF2 par exemple, effectuent environ 1000 passes afin d'augmenter le coup en ressource et l'entropie du résultat.

Quand on sait que le SHA-512 utilise maximum 256 octets de mémoire pour générer un hash et qu'aujourd'hui le publique a accès à des cartes graphiques de 12 Go à 7 GHz et 5760 coeurs à 876 MHz, imaginez bien ce dont dispose la NSA, en faite on se rend compte que les NIST approvals and co signifient "vous pouvez vous en servir, on sait déjà le casser Big Grin".

A l'heure actuelle, c'est la librairie scrypt qui produit les hashs de meilleure qualité, avec une consommation de 20 à 40 Mo par mot de passe.
Malheureusement elle n'est pas encore pour l'instant disponible pour PHP, il est donc conseillé de se rabattre sur bcrypt.
Du coup j'ai pondu la fonction suivante :

Code PHP :
<?php
function _password_hash($password)
{
    
/* Vérifie l'existence d'une constante. */
    
$password_bcrypt defined "PASSWORD_BCRYPT" ) ;
    
$algo = (PHP_VERSION_ID 50500 && $password_bcrypt == TRUE) ? PASSWORD_BCRYPT PASSWORD_DEFAULT;

    
/* Retourne les informations sur le système d'exploitation. */
    
$php_uname php_uname "s" ) ;

    
/* Retourne un segment de chaîne. */
    
$substr substr $php_uname ) ;

    if (
$substr === FALSE)
    {
        return 
FALSE;
    }

    
/* Renvoie une chaîne en majuscules. */
    
$strtoupper strtoupper $substr ) ;
    
$source = (PHP_VERSION_ID 50300 && $strtoupper == "WIN") ? MCRYPT_RAND MCRYPT_DEV_URANDOM;

    
/* Crée un vecteur d'initialisation (IV) à partir d'une source aléatoire. */
    
$mcrypt_iv mcrypt_create_iv 217 $source ) ;

    if (
$mcrypt_iv == FALSE)
    {
        return 
FALSE;
    }

    
$timeTarget 0.5;
    
$options = array
    (
        
"salt" => $mcrypt_iv,
        
"cost" => 9
    
);

    do
    {
        
$options["cost"]++;
        
        
/* Retourne le timestamp UNIX actuel avec les microsecondes. */
        
$start microtime TRUE ) ;
        
        
/* Crée une clé de hachage pour un mot de passe. */
        
$password_hash password_hash $password $algo $options ) ;
        
$end microtime TRUE ) ;
    } while ((
$end $start) < $timeTarget);

    if (
$password_hash == FALSE)
    {
        return 
FALSE;
    }
    
    return 
$password_hash;
}

printf(_password_hash("rasmuslerdorf"));
?>

- Compatible avec les versions de PHP antérieures à la 5.3.0
- Calcule le cost algorithmique le plus optimisé pour le serveur. Bon on va encore me dire que je fais un calcul inutile comme pour le coup du hash_algos ( ) mais c'est juste un exemple, à vous d'adapter le code pour stocker le résultat dans la configuration de votre site web et de le recalculer à chaque mise à jour de PHP et/ou migration du site sur une autre plateforme.
+1 (0) -1 (0) Répondre


Messages dans ce sujet
[PHP] _password_hash - par Ekroz - 10-06-2014, 15h00
RE: [PHP] _password_hash - par Ark - 10-06-2014, 15h42
RE: [PHP] _password_hash - par gruik - 10-06-2014, 16h20
RE: [PHP] _password_hash - par b0fh - 10-06-2014, 16h42
RE: [PHP] _password_hash - par Ark - 10-06-2014, 16h49
RE: [PHP] _password_hash - par Ekroz - 10-06-2014, 16h42
RE: [PHP] _password_hash - par b0fh - 10-06-2014, 17h22
RE: [PHP] _password_hash - par Ekroz - 11-06-2014, 18h48
RE: [PHP] _password_hash - par Ekroz - 13-06-2014, 15h18
RE: [PHP] _password_hash - par Ark - 13-06-2014, 16h37

Atteindre :


Utilisateur(s) parcourant ce sujet : 3 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut