Je vais vous parler dans cet article de la génaration des adresses Bitcoin en les filtrant pour qu’elles coïncident avec une chaîne de caractère donnée en utilisant Vanitygen qui est un logiciel écrit en C et Open Source présent sur Github. Vanitygen propose de trouver des adresses Bitcoin contenant des caratctères spéciaux en utilisant le principe de regex pour filtrer les caractères présents dans l’adresse générée.

Mise en garde

Tout d’abord, je dois vous mettre en garde des sites qui proposent le même service en ligne. Le site http://bitcoinvanitygen.com est un site frauduleux. Vous pouvez le vérifier sur bitcointalk. Ce site vous propose d’entrer une chaîne de caractère et de lancer les tests pour trouver une adresse comportant une forme de la chaîne de caractère voulue. Par exemple: 1ChiHeBC44AqKLdBtuaxh9hnbaToySRuEB . Vous pouvez noter que mon nom ChiHeB est présent dans cette adresse Bitcoin. Cependant, en donnant cette adresse publique, le site vous donne aussi la clé privée de cette adresse. Et c’est là où réside la fraude! L’adresse publique et sa clé privée seront enregistrés dans la base de donnée du site et, donc, ceux qui gèrent ce service auront un accès instantanée aux fonds en Bitcoin de cette adresse! Vos Bitcoins seront en danger si vous importez l’adresse donnée sur vos portefeuille Bitcoin’!!! Et c’est pourquoi, il ne faut jamais partager vos clés privées avec quiconque! JAMAIS et NEVER !!!

Vanitygen: Le logiciel Open Source

Vanitygen est un logiciel en ligne de commande qui génère des adresses Bitcoin “offline” en suivant cet exemple d’adresse: 1_CHAINE_DE_CARACTERE
Exemple:
$ ./vanitygen 1Boat
Difficulty: 4476342
Pattern: 1Boat
Address: 1BoatSLRHtKNngkdXEeobR76b53LETtpyT
Privkey: 5J4XJRyLVgzbXEgh8VNi4qovLzxRftzMd8a18KkdXv4EqAwX3tS
Vanitygen inclut des composants qui permettent de faire la recherche des adresses Bitcoin en utilisant les ressources de vos CPU et OpenCL-compatible GPU (oclvanitygen). Cette recherche consomme beaucoup de ressources matérielles en fonction de la complexcité de la chaîne de caractère entrée.
Taux de recherche des clés
   CPU                    |       GPU         |   clé/s     |    Commentaires        
------------------------ | ----------------- | ----------- | ----------------------
Core i5 750 @2.67 GHz | nVidia GTS 250 | 1.54 Mkey/s | 110% CPU
Core2 Duo 6600 | nVidia GTX 285 | 3.5 Mkey/s | 100% CPU / 90% GPU
Sempron 140 | AMD 5830 | 5.5 Mkey/s | 100% CPU / 60% GPU
Core i7 | AMD Radeon r7 240 | 4 Mkey/s |
Core i7 | AMD 6500M | 4.5 Mkey/s | 98% GPU
Core i7 | GeForce GTX 680M | 14-16 Mkey/s|
Core i7 | GeForce GTX 970 | 38 Mkey/s |
Core i7-4702MQ 2.2Ghz | Asus Strix GTX 970| 40Mkey/s |
Core i7-4702MQ 2.2Gh | GeForce GTX 780 | 50-60 Mkey/s|
Remarque: L'utilisation de vanitygen sur une architecture 64bits fera une énorme différence sur les taux de recherche des clés. La performance de la recherche peut toucher les 50% d’amélioration.
Difficultés de la recherche des adresses avec vanitygen
    Chaîne de caractère         |      Difficultés       
------------------------------ | ----------------------
1AAAAA | 259,627,881
1QLbz6 | 259,627,881
1QLbz7JHiBTspS962RLKV8GndWE | 2.9597E+45
1QLbz7 | 837,596,142
1QLbz7JHiBTspS962RLKV8GndWG | 1.6489E+47
1QLbz8 | 837,596,142
1aaaaa | 15,318,045,009
1zzzzz | 15,318,045,009
111111 | 1,099,511,627,776
Rmarque: Le cas de 111111 est spécial c’est pourquoi sa difficulté est très élevée.
Usage de vanitygen pour des attaques contre des adresses Bitcoin?
Cette manière de génération des adresses peut nous guider à penser qu’on peut chercher une séquence bien déterminée d’une adresse Bitcoin qui contient déjà des fonds afin de trouver sa clé privée; donc voler les bitcoins qui sont dedans. Dans le tableau qui va suivre, je vais vous donner un aperçu de combien du temps il nous faut avec le matériel qu’on possède aujourd’hui pour cracker une seule adresse Bitcoin et déterminer sa clé privée avec vanitygen.
          Chaine de caractère     |         Difficulté          |   Approximation du temps  
---------------------------------| --------------------------- | ------------------------
1B | 22 | inférieur à 1s
1Bi | 1,330 | inférieur à 1s
1Bit | 77,178 | inférieur à 1s
1Bitc | 4,476,342 (4.48E+6) | inférieur à 10s
1Bitco | 259,627,881 (2.6E+8) | 3 minutes
1Bitcoi | 15,058,417,127 (1.506E+10) | 3 heures
1Bitcoin | 8.7339E+11 | Une semaine
1BitcoinE | 5.0657E+13 | Une année
1BitcoinEa | 2.9381E+15 | 60 ans
1BitcoinEat | 1.7041E+17 | 3500 ans
1BitcoinEate | 9.8837E+18 | 200 000 ans
1BitcoinEater | 5.7325E+20 | 11,700,000 ans
1BitcoinEaterAddressDontSend | 1.6209E+47 | 3.3E+33 ans