{"id":1033,"date":"2013-12-07T21:01:59","date_gmt":"2013-12-07T20:01:59","guid":{"rendered":"http:\/\/signal.eu.org\/blog\/?p=1033"},"modified":"2013-12-12T23:44:36","modified_gmt":"2013-12-12T22:44:36","slug":"comprendre-le-minage-bitcoin","status":"publish","type":"post","link":"https:\/\/signal.eu.org\/blog\/2013\/12\/07\/comprendre-le-minage-bitcoin\/","title":{"rendered":"Comprendre le minage Bitcoin"},"content":{"rendered":"\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=pbeyssac\" class=\"twitter-share-button\">Tweet<\/a><\/div>\n<p>Ayant poursuivi mes r\u00e9flexions apr\u00e8s mon <a href=\"http:\/\/signal.eu.org\/blog\/2013\/12\/02\/petit-cours-de-bitcoin-pour-les-nuls\/\">article pr\u00e9c\u00e9dent<\/a>, je me suis int\u00e9ress\u00e9 au fonctionnement du minage de bitcoins.<\/p>\n<h2>Pour commencer, une petite d\u00e9monstration de math\u00e9matiques<\/h2>\n<p>Supposons que vous ne soyez pas tr\u00e8s bon en maths et que vous ne connaissiez que la multiplication, pas la division.<\/p>\n<p>Par quels chiffres doit-on compl\u00e9ter les <strong>xxx<\/strong> dans <strong>4025249123xxx<\/strong> pour que le r\u00e9sultat de sa multiplication par 7 se termine par <strong>30<\/strong> ?<\/p>\n<p>Le plus simple est d&#8217;essayer les combinaisons une par une :<\/p>\n<ul>\n<li>4025249123<strong>000<\/strong> x 7 = 28176743861000<\/li>\n<li>4025249123<strong>001<\/strong> x 7 = 28176743861007<\/li>\n<li>4025249123<strong>002<\/strong> x 7 = 28176743861014<\/li>\n<li>4025249123<strong>003<\/strong> x 7 = 28176743861021<\/li>\n<li>4025249123<strong>004<\/strong> x 7 = 28176743861028<\/li>\n<li>4025249123<strong>005<\/strong> x 7 = 28176743861035<\/li>\n<li>&#8230;<\/li>\n<\/ul>\n<p>En continuant ainsi on finit par tomber sur une bonne combinaison :<\/p>\n<ul>\n<li>4025249123<strong><span style=\"color: #ff6600;\">090<\/span><\/strong> x 7 = 281767438616<strong><span style=\"color: #ff6600;\">30<\/span><\/strong><\/li>\n<\/ul>\n<p>Mais ce n&#8217;est pas la seule, on aurait pu \u00e9galement trouver :<\/p>\n<ul>\n<li>4025249123<strong><span style=\"color: #ff6600;\">190<\/span><\/strong> x 7 = 281767438623<strong><span style=\"color: #ff6600;\">30<\/span><\/strong><\/li>\n<\/ul>\n<p>Une fois la solution trouv\u00e9e, n&#8217;importe qui sachant calculer une multiplication peut la v\u00e9rifier tr\u00e8s rapidement.<\/p>\n<h2>Revenons \u00e0 nos bitcoins&#8230;<\/h2>\n<p>Ce qui pr\u00e9c\u00e8de, c&#8217;est le principe g\u00e9n\u00e9ral du &#8220;travail&#8221; Bitcoin, qui permet simultan\u00e9ment de rendre compliqu\u00e9es la cr\u00e9ation de monnaie et la validation des transactions, afin que n&#8217;importe qui ne fasse pas n&#8217;importe quoi, tout en rendant tr\u00e8s facile leur v\u00e9rification.<\/p>\n<p>\u00c0 la place de la multiplication par 7, on utilise <strong>une fonction de cryptographie appel\u00e9e un hachage<\/strong>, ici SHA256, qui \u00e0 partir d&#8217;un paquet de donn\u00e9es binaires produit 256 bits de r\u00e9sultat (d&#8217;o\u00f9 son nom), d&#8217;une mani\u00e8re qu&#8217;on ne sait pas inverser. Ce genre de fonction est abondamment utilis\u00e9 pour des signatures \u00e9lectroniques : le seul moyen pour trouver un paquet en entr\u00e9e fournissant la sortie voulue, c&#8217;est de faire un grand nombre d&#8217;essais au hasard en appliquant la fonction (on dit <em>force brute<\/em>).<\/p>\n<p>Ainsi le hachage SHA256 du paragraphe qui pr\u00e9c\u00e8de est <span style=\"color: #0000ff;\">2756436ec1d5614b9e22840bf4f5bbbc580c897973d1e4607dc0a723f8d75073<\/span>. En enlevant juste la premi\u00e8re lettre, on obtient <span style=\"color: #0000ff;\">6b8dc910fa3b2c8e3d40244869d5e1a5fe7753a1862eed5a306d2fceb6fe60fb<\/span>.<\/p>\n<p>\u00c0 la place du nombre <em> <\/em>\u00e0 compl\u00e9ter, on utilise <strong>une liste de transactions Bitcoin d\u00e9j\u00e0 sign\u00e9es<\/strong> par les cl\u00e9s des \u00e9metteurs, avec un emplacement \u00e0 remplir appel\u00e9 la <em>nonce<\/em>. (en fait le principe est similaire mais un petit peu plus compliqu\u00e9, voir <a href=\"http:\/\/blog.spyou.org\/wordpress-mu\/2013\/04\/18\/comment-ca-marche-les-bitcoins-3\/\">ce billet chez Turblog<\/a> pour des d\u00e9tails techniques plus pr\u00e9cis).<\/p>\n<p>Au lieu de chercher un nombre se terminant par 30, on cherche un nombre inf\u00e9rieur \u00e0 une certaine valeur<strong>, <\/strong>donc <strong>commen\u00e7ant par un certain nombre de z\u00e9ros<\/strong>.<\/p>\n<p>Et tous les ordinateurs du r\u00e9seau Bitcoin cherchent simultan\u00e9ment des solutions \u00e0 ce paquet, ce qui revient en gros \u00e0 effectuer des tirages au sort v\u00e9rifiables <em>a posteriori<\/em>.<\/p>\n<p>En fait, plus pr\u00e9cis\u00e9ment, chaque ordinateur cherche <strong>sa<\/strong> solution : car dans le paquet, il indique la transaction vers <strong>son compte, qui b\u00e9n\u00e9ficiera des Bitcoins<\/strong> qui r\u00e9mun\u00e9reront son travail pour le paquet. Donc chacun trouve des valeurs SHA256 totalement diff\u00e9rentes.<\/p>\n<p>Le premier \u00e0 trouver une solution a gagn\u00e9. Il empoche le nombre de Bitcoins attribu\u00e9s au paquet (25 actuellement, 50 au d\u00e9but, et ce nombre va se r\u00e9duire au fil du temps), et les commissions sur toutes les transactions du paquet.<\/p>\n<p>La difficult\u00e9 du probl\u00e8me (le nombre de chiffres pr\u00e9d\u00e9termin\u00e9s dans la sortie) est ajust\u00e9e afin qu&#8217;en moyenne, un nouveau paquet soit calcul\u00e9 toutes les 10 minutes.<\/p>\n<h2>Quel int\u00e9r\u00eat concret \u00e0 \u00eatre mineur ?<\/h2>\n<p>\u00c9videmment, les ordinateurs rapides sont avantag\u00e9s, et apr\u00e8s l&#8217;exploitation des capacit\u00e9s de calcul rapide des cartes graphiques 3D, il existe maintenant des circuits \u00e9lectroniques sp\u00e9cialis\u00e9s pour calculer beaucoup plus vite des hachages de paquets Bitcoin. Apr\u00e8s les FPGA (circuits reprogrammables par le client), <del>plus rapides<\/del> moins gourmands en \u00e9lectricit\u00e9 (merci \u00e0 Y. Rougy pour la pr\u00e9cision) que les cartes graphiques, le Bitcoin est entr\u00e9 dans l&#8217;\u00e8re des ASIC (circuits int\u00e9gr\u00e9s classiques, fabriqu\u00e9s en usine pour cette application particuli\u00e8re, beaucoup plus rapides).<\/p>\n<p>Ainsi, \u00e0 la difficult\u00e9 actuelle, il faudrait en moyenne 6882 ann\u00e9es \u00e0 mon ordinateur de bureau (14 millions de hachages par seconde) pour trouver un bloc et gagner 25 bitcoins. C&#8217;est ce que me dit ce <a href=\"http:\/\/www.bitcoinx.com\/profit\/\">calculateur de minage<\/a>. C\u00f4t\u00e9 Litecoin, les algorithmes et difficult\u00e9s sont diff\u00e9rents, il ne me faudrait qu&#8217;environ 11 ans d&#8217;apr\u00e8s <a href=\"https:\/\/www.litecoinpool.org\/calc\">https:\/\/www.litecoinpool.org\/calc<\/a>.<\/p>\n<p>Pour comparaison, avec les circuits sp\u00e9cialis\u00e9s les plus rapides du moment cit\u00e9s sur cette page de <a href=\"https:\/\/en.bitcoin.it\/wiki\/Mining_hardware_comparison\">comparaison des performances mat\u00e9rielles<\/a>, il faut environ 4 jours par bloc Bitcoin.<\/p>\n<p>Plus il existe d&#8217;ordinateurs dans le r\u00e9seau, et plus ils sont rapides, plus la difficult\u00e9 est augment\u00e9e afin qu&#8217;il ne soit pas trop facile de cr\u00e9er de la monnaie et que le rythme moyen reste constant. Je ne sais pas si la r\u00e9ciproque est vraie (mais je pense que oui, le protocole semblant bien pens\u00e9) : on peut imaginer que la force de calcul se r\u00e9duise soudainement, soit par disparition d&#8217;une \u00e9quipe de mineurs, soit par panne, etc.<\/p>\n<p>Il existe en tout cas une v\u00e9ritable course aux capacit\u00e9s de calcul : l&#8217;ajout de capacit\u00e9 avantage celui qui la d\u00e9tient, mais pousse la difficult\u00e9 g\u00e9n\u00e9rale \u00e0 la hausse, toutes choses \u00e9gales par ailleurs en termes de services effectifs rendus.<\/p>\n<p>La rentabilit\u00e9 du minage de bitcoins d\u00e9pend du cours de celui-ci, de la difficult\u00e9 des calculs et des co\u00fbts d&#8217;investissement et de fonctionnement (\u00e9lectricit\u00e9 et climatisation, notamment). Si l&#8217;activit\u00e9 est tr\u00e8s rentable, elle attirera beaucoup de mineurs, ce qui en r\u00e9duira m\u00e9caniquement la rentabilit\u00e9 de deux mani\u00e8res, augmentation de la difficult\u00e9 et r\u00e9partition des gains sur un plus grand nombre de mineurs.<\/p>\n<h2>Groupes de minage ou minage solo<\/h2>\n<p>Il existe un \u00e9cueil au minage : les temps \u00e9lev\u00e9s pour d\u00e9couverte d&#8217;un bloc. On gagne beaucoup, mais tr\u00e8s rarement, et rien du tout la plupart du temps. C&#8217;est pour cela que des groupes se constituent, visant \u00e0 multiplier les chances de r\u00e9cup\u00e9rer des blocs, et lissant les gains en les r\u00e9partissant au sein du groupe.<\/p>\n<p><a href=\"https:\/\/en.bitcoin.it\/wiki\/Pooled_mining\">Cette page<\/a> sur le wiki Bitcoin pr\u00e9sente plus en d\u00e9tail l&#8217;activit\u00e9 des groupes de mineurs, et <a href=\"https:\/\/en.bitcoin.it\/wiki\/Comparison_of_mining_pools\">ce comparatif<\/a> d\u00e9crit les groupes, notamment les diff\u00e9rentes fa\u00e7ons de r\u00e9partir les gains.<\/p>\n<p>La gestion de groupes introduit un autre probl\u00e8me int\u00e9ressant : le taux de d\u00e9couverte de bloc \u00e9tant tr\u00e8s faible, comment s&#8217;assurer que les mineurs qui ne trouvent pas cherchent effectivement et ne sont pas des parasites qui ne viennent qu&#8217;empocher leur part des gains ? Des m\u00e9thodes ont \u00e9t\u00e9 invent\u00e9es pour donner des preuves de travail.<\/p>\n<h2>Solo = Loto ?<\/h2>\n<p>Pour rire, j&#8217;ai voulu comparer les esp\u00e9rance de gain du minage en solo \u00e0 celles, assez similaires, d&#8217;un gain de <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Loto\">5 num\u00e9ros au Loto<\/a> pour quelqu&#8217;un qui jouerait une fois par semaine.<\/p>\n<p>Sauf erreur de ma part, donc :<\/p>\n<ul>\n<li>gain (calcul\u00e9 sur un cours de 600\u20ac par bitcoin soit 25 bitcoins = 15 000\u20ac) environ 6 fois plus faible<\/li>\n<li>chances de gain 3 fois plus \u00e9lev\u00e9e (temps moyen par bloc : 6882 ans au lieu de 20 000 ans environ)<\/li>\n<li>d\u00e9pense \u00e9quivalente : en supposant une consommation de l&#8217;ordinateur d&#8217;environ 100 W donc 16,8 KWh chaque semaine, soit 2,23\u20ac, contre 2\u20ac la grille de Loto.<\/li>\n<li>et je n&#8217;ai pas inclus le co\u00fbt d&#8217;acquisition et d&#8217;amortissement de l&#8217;ordinateur.<\/li>\n<li>il faut ajouter, aux gains du Bitcoin, les commissions de transaction, qui repr\u00e9sentent relativement peu actuellement (environ 0,2 \u00e0 0,4 bitcoin par bloc en g\u00e9n\u00e9ral ; tout cela est visible sur <a href=\"https:\/\/blockchain.info\/fr\/stats\">blockchain.info<\/a>)<\/li>\n<\/ul>\n<p>Je pr\u00e9cise que cette \u00e9valuation \u00e0 la louche ne tient pas compte d&#8217;autres facteurs potentiels, notamment les refus peut-\u00eatre plus probables d&#8217;un bloc si votre ordinateur est vraiment tr\u00e8s lent, ou des d\u00e9lais de transmission, qui r\u00e9duisent peut-\u00eatre notablement les chances effectives de gains. En effet je n&#8217;ai jamais trouv\u00e9 un bloc Bitcoin de ma vie, ce qui n&#8217;est pas \u00e9tonnant quand on sait que je n&#8217;ai pas beaucoup tent\u00e9 ma chance.<\/p>\n<p>Si on int\u00e8gre les rapports complets du Loto (tous les gains, pour toutes les combinaisons de chiffres), c&#8217;est moins glorieux pour le Bitcoin. En effet, au Loto on peut esp\u00e9rer r\u00e9colter environ 1\u20ac par semaine, soit 358 000 euros en 6882 ann\u00e9es, ce qui repr\u00e9sente 24 fois les gains en Bitcoin au cours actuel.<\/p>\n<p>Mais, quand on se rappelle que tout cela chatouille gentiment les pieds des \u00c9tats, des banques centrales et des banques de d\u00e9tail, ce que ne fait pas du tout le Loto, on conviendra que cette satisfaction immat\u00e9rielle a elle aussi une certaine valeur.<\/p>\n<p>Commentaires et corrections bienvenus, bien entendu.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ayant poursuivi mes r\u00e9flexions apr\u00e8s mon article pr\u00e9c\u00e9dent, je me suis int\u00e9ress\u00e9 au fonctionnement du minage de bitcoins. Pour commencer, une petite d\u00e9monstration de math\u00e9matiques Supposons que vous ne soyez pas tr\u00e8s bon en maths et que vous ne connaissiez que la multiplication, pas la division. Par quels chiffres doit-on compl\u00e9ter les xxx dans 4025249123xxx &hellip; <a href=\"https:\/\/signal.eu.org\/blog\/2013\/12\/07\/comprendre-le-minage-bitcoin\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Comprendre le minage Bitcoin<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[19,11,15,7],"tags":[],"_links":{"self":[{"href":"https:\/\/signal.eu.org\/blog\/wp-json\/wp\/v2\/posts\/1033"}],"collection":[{"href":"https:\/\/signal.eu.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/signal.eu.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/signal.eu.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/signal.eu.org\/blog\/wp-json\/wp\/v2\/comments?post=1033"}],"version-history":[{"count":18,"href":"https:\/\/signal.eu.org\/blog\/wp-json\/wp\/v2\/posts\/1033\/revisions"}],"predecessor-version":[{"id":1051,"href":"https:\/\/signal.eu.org\/blog\/wp-json\/wp\/v2\/posts\/1033\/revisions\/1051"}],"wp:attachment":[{"href":"https:\/\/signal.eu.org\/blog\/wp-json\/wp\/v2\/media?parent=1033"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/signal.eu.org\/blog\/wp-json\/wp\/v2\/categories?post=1033"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/signal.eu.org\/blog\/wp-json\/wp\/v2\/tags?post=1033"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}