22. 280 263
Ce qui diminue le temps de recherche par un facteur de
131 072!
http://www.iacr.org/conferences/crypto2005/r/2.pdf
23. Md5
1 000 < 0.002 s
100 000 < 0.1 s
1 000 000 < 0.8 s
Sha1
< 0.003 s
< 0.1 s
<1s
PC Portable
Core i5 vPro
4Go de ram
Windows 7 etc...
24. Basé sur l'algorithme de chiffrement par bloc Blowfish
S’utilise avec la fonction crypt() de php
crypt('azerty123', '$2a$08$salt$');
2a = BCrypt, 2y = BCrypt, with fixed unicode problem
08 = Coût
Et le salt !
26. Facteur temps
md5
sha1
bcrypt 4
x1200
x1900
bcrypt 10
x11 000
x100 000
bcrypt 12
x420 000
x390 000
Temps réalisé sur portable perso
Purement indicatif.
Etrangement, les sha1 sur de petites chaines sont plus rapide que leur équivalent md5
27. Il existe aussi sha2 (disponible en 256-384-512 bits)
Fonctionne sur le même principe que sha1.
Round
Temps
5 000 0.05 s
Avantage :
Il est possible de définir un “round” (itération) qui
augmente le cout CPU.
Inconvénient :
Empreinte CPU fluctuante suivant l’architecture du CPU.
Empreinte mémoire inférieur à celle de Bcrypt
20 000 0.1 s
100 000 0.4 s
28. Petite info:
Il existe une étude scientifique de 2008 qui démontre qu’
il est possible d’optimiser un CPU polymorphic (MOLEN)
pour générer des hash sha2.
Résultats de fou!
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.148.7900&rep=rep1&type=pdf
29. En php il existe plusieurs méthodes pour générer des hashs dont :
crypt() (>php4)
Supporte plusieurs algorithmes
hash() (>php 5.1)
Supporte plusieurs algorithmes. Nécessite l’extension HASH.
30. Avec PHP5.5 il existe de nouvelles méthodes :
password_get_info();
Obtient des infos sur l’algo utilisée et son “coût”.
password_hash();
Permet de générer un hack d’un mot de passe, les options de l’algo sont directement envoyé par un tableau php et
plus un salt.
password_needs_rehash();
Détermine si le mot de passe correspond à l’aglo fournie
password_verify();
Obtient les informations sur le hash, applique l’algo et les options identique à une chaine et compare.
31. Et pour générer de superbes hash avec php :
Il existe une petite extension bien pratique!
mcrypt_create_iv(int $size);
string(20) "’™É€á7hüwy–ÕOÌI(ê"
string(20) "ÌD (=3Ç×D¶Lhe(êæèã"
string(20) "±Á.7“/ª³YŠ¯KË£W߯²"
string(20) ".>¤-Á¾ çw}c(ß÷X¢sò"
Enregistrement en BASE64 impérativement !