Voici (en anglais) l’article que j’ai coécrit avec Ricardo Perez-Marco sur l’étude des probabilités de double-dépense dans le réseau Bitcoin. Il s’agit notamment d’une correction à l’article fondateur du Bitcoin, Bitcoin: A Peer-to-Peer Electronic Cash System. Nous donnons une formule fermée pour la probabilité de réussite de double-dépense et nous prouvons le fait que cette probabilité tend exponentiellement vers zéro en fonction du nombre de confirmations requises, un résultat souvent cité mais jamais démontré. Enfin, nous menons une analyse plus fine de cette tentative de double dépense en prenant en compte le temps mis par les honnêtes mineurs pour miner
blocs, une information disponible par le marchand qui s’apprête à envoyer son bien de consommation au possible attaquant.
J’ai écrit « correction ». C’est un mot un peu fort mais pourtant, on a beau le tourner dans tous les sens, la partie mathématique de l’article (section 11 « Calculations ») est légèrement incorrecte.
Le raisonnement de Satoshi
Son approximation
Satoshi estime que les mineurs honnêtes qui disposent d’une puissance de calcul relative égale à mettent exactement
pour miner
blocs avec
minutes. C’est évidemment une grossière approximation. En réalité, les honnêtes mineurs mettent en moyenne
pour miner un bloc et
pour miner
blocs. Cette approximation sert ensuite à Satoshi pour dire que pendant ce temps, l’attaquant qui cherche à réaliser une double-dépense a réussi à miner
où
est un processus de Poisson d’intensité
où
est la puissance de calcul relative dont dispose l’attaquant. Le fait qu’il y ait ici un processus de Poisson est tout à fait naturel. Cela vient du fait que la fonction de hachage SHA256 est supposée parfaite. Cette hypothèse a pour conséquence que le temps de minage inter-bloc suit une loi exponentielle et que le processus de comptage qui compte le nombre de blocs minés est un processus de Poisson. Par suite, le nombre de blocs minés par l’attaquant suit une loi de Poisson d’intensité
. C’est ce qu’a écrit Satoshi.
Le calcul final
La probabilité de réussite de double-dépense s’obtient ensuite simplement en utilisant la formule des probabilités totales : . Ici,
désigne l’événement « l’attaquant réussit son attaque » et
désigne l’événement « l’attaquant a réussi a miné
blocs au moment où les honnêtes mineurs viennent de miner
blocs ». La probabilité
a été vue plus haut. Ici
est fixé.
Lorsque , on a bien sûr
et lorsque
, l’attaquant a autant de chance qu’un joueur qui joue contre la banque à pile ou face avec un retard de
: à chaque lancer de pièce de monnaie truquée en faveur de la banque (la banque a une probabilité
de gagner) le joueur avance ou recule de
. S’il finit par rattraper la banque, il a gagné. Ce calcul est classique. Satoshi renvoie au célèbre livre de Feller An introduction to probability theory and its applications. C’est un exemple élémentaire de marche aléatoire. On a
. D’où la formule finale que donne Satoshi en réarrangeant un peu les termes de sa somme :
à la suite de quoi, Satoshi présente un petit code en C pour calculer numériquement cette somme.
Le vrai calcul
Une loi binomiale négative
Seulement voilà, le temps mis par les honnêtes mineurs est aléatoire et n’a aucune raison d’être égale à sa moyenne . La formule donnée plus haut pour
est fausse. En réalité, si l’on désigne par
le temps mis par les honnêtes mineurs pour miner
blocs, la loi de
est une loi Gamma de paramètre
et le nombre de blocs minés par l’attaquant au moment où les honnêtes mineurs découvrent leur
ème bloc est
. Un petit calcul montre que la loi de
est une loi binomiale négative de paramètre
. C’est normal. Tout se passe en effet comme si la course au minage était un tirage multiple avec remise d’une urne remplie de boules noires et blanches jusqu’à l’obtention de
boules blanches. Tirer une boule noire signifie : « l’attaquant découvre un nouveau bloc » et tirer une boule blanche signifie « les honnêtes mineurs découvrent un nouveau bloc ». Au total, le nombre de boules noires tirées représente le nombre de blocs minés par l’attaquant au moment où les honnêtes mineurs découvrent leur
ème bloc…
La formule de Meni Rosenfeld
La véritable probabilité de réussite de double dépense est
. En utilisant le fait que
est une loi binomiale négative de paramètre
comme expliqué ci-dessus, on en déduit que
. Nous ne le savions pas au moment de la rédaction de notre article, nous ne l’avons découvert qu’après mais cette formule avait déjà été publiée par Meni Rosenfled dès décembre 2012 dans Analysis of hashrate-based double-spending… Notons que Meni Rosenfeld vient tout juste de publier un article qui a l’air fort intéressant : Decentralized Prediction Market without Arbiters.
Une formule fermée
En fait, on peut triturer la formule de Rosenfeld pour obtenir une formule fermée. Cela vient de ce que la fonction de répartition d’une loi binomiale négative est une certaine fonction bêta incomplète régularisée. On montre que la probabilité de réussite de double-dépense est tout simplement avec
et
où
est la célèbre fonction Gamma :
pour
. Notons que la fonction beta régularisée incomplète est une fonction extrêmement classique et implémentée dans tous les logiciels de calcul moderne. En R par exemple, la fonction qu’il suffit d’invoquer est « pbeta ». Et inutile pour cela de charger des packages…
Autrement dit, Satoshi s’est fatigué pour rien ! En menant un calcul correct, sans aucune approximation, on obtient une formule élémentaire pour la probabilité de réussite de double-dépense. La conclusion que l’on peut en tirer, je crois, est que Satoshi était un génie mais n’était pas un vrai mathématicien. Certains avaient avancé le nom de John Nash mais cela nous semble impossible.
Des asymptotiques…
Ensuite, nous avons calculé l’asymptotique de . Grâce à notre formule fermée mettant en jeu une fonction bêta, il est facile de montrer que
avec toujours
. Quant à la probabilité (erronée) de Satoshi que l’on note
, nous montrons que l’on a
avec
. Il est vrai que cette probabilité tend exponentiellement vers
mais simplement, la formule est fausse !
Comparaison entre les deux probabilités
D’après les formules données pour et
, il s’avère que Satoshi a sous-estimé la probabilité de double-dépense. On a clairement d’après les formules ci-dessus :
. On peut aussi s’amuser à calculer un rang explicite à partir duquel Satoshi s’est (vraiment) trompé, i.e., un rang à partir duquel on a
… Cela donne lieu à des calculs d’inégalités un peu pénible avec les fonctions Gamma. Il ne s’agit que d’un jeu mathématique…
Une analyse plus fine
Enfin, on calcule la probabilité de réussite de double-dépense sachant que les honnêtes mineurs ont mis
pour miner
blocs avec
(cf plus haut). Autrement dit,
mesure l’écart par rapport à l’hypothèse de Satoshi… Là encore, on obtient une formule fermée bien que légèrement plus compliquée que celle donnant
. Explicitement, on a
où
désigne la fonction Gamma régularisée incomplète. On analyse cette fonction de
,
. Notons que
.
A la fin de l’article, nous avons publié des tables pour en fonction de
et
.
Author’s Bitcoin Beer Address
Je dois dire que ce fut un plaisir pour moi de travailler avec Ricardo. J’espère que notre collaboration ne se terminera pas là. Les maths du bitcoin sont évidemment loin d’être finies d’explorer !
Si vous avez aimé notre travail et souhaitez encourager notre recherche (au pub), vous pouvez nous envoyer des sous ! Voici notre ABBA (Author’s Bitcoin Beer Address) :
1KrqVxqQFyUY9WuWcR5EHGVvhCS841LPLn
Vous pouvez aussi plus sobrement financer notre séminaire de cryptofinance pour nous donner les moyens de développer la recherche académique autour du bitcoin et de la blockchain.
Last, but not least, nous avons naturellement dédié cet article à André Warusfel qui fut notre professeur de mathématiques bien-aimé et qui est décédé récemment. Cher Warus, vous auriez certainement apprécié le bitcoin et ses mathématiques !