Le 14 novembre dernier marquait le deuxième anniversaire de l'activation de la mise à jour « Taproot » sur Bitcoin. Tout comme SegWit, Taproot compte parmi les grands soft forks majeurs du protocole, ceux qui ne se produisent qu'une fois tous les trois ou quatre ans. Encore aujourd’hui, les subtilités de cette modification technique restent parfois méconnues. Pour vous éclairer sur les tenants et aboutissants de Taproot et comprendre pourquoi cette mise à jour était importante pour Bitcoin, nous vous proposons une explication simple dans cet article.
Qu’est-ce que Taproot sur Bitcoin ?
Taproot est une mise à jour majeure du protocole Bitcoin venue apporter de nouvelles fonctionnalités. Il s'agit d'un soft fork, ce qui signifie que les nouvelles règles instaurées sont rétrocompatibles avec les anciennes. Cette mise à jour a été verrouillée au bloc 687 284, le 12 juin 2021, lorsque 90 % des blocs générés pendant une période ont émis un signal favorable, manifestant ainsi la préparation des mineurs à activer la mise à jour Taproot.
L’activation a finalement eu lieu au bloc 709 632, le 14 novembre 2021, soit presque quatre ans après les premières discussions à ce sujet entre Pieter Wuille, Andrew Poelstra et Gregory Maxwell. Ce fut la première tentative de mise à jour majeure depuis l'épineuse activation de SegWit en 2017, qui avait donné lieu à des conflits au sein de la communauté.
Taproot est une sorte de package qui inclut diverses modifications pour Bitcoin. La mise à jour comprend le BIP 340, le BIP 341 et le BIP 342. Découvrons ensemble toutes ces nouveautés.
📌 Un « BIP » pour « Bitcoin Improvement Proposal » est un processus formel permettant de proposer une modification de Bitcoin.
Les signatures de Schnorr (BIP 340)
La première grande nouveauté introduite par Taproot réside dans l'implémentation d'un nouvel algorithme de signature établi sur le protocole de Schnorr.
Comme évoqué dans nos précédents articles, les bitcoins se matérialisent sur la blockchain sous forme d'UTXOs. Ce sont essentiellement des morceaux de bitcoins plus ou moins grands. Ces UTXOs sont protégés par des conditions qui spécifient la manière dont ils peuvent être débloqués. On utilise généralement un algorithme de signature électronique afin d’établir ces conditions. Ainsi, pour dépenser les bitcoins de votre portefeuille, vous devez fournir une signature avec la clé privée associée à la clé publique ayant servi à verrouiller vos UTXOs.
À la création de Bitcoin, Satoshi Nakamoto a choisi d’utiliser l’algorithme de signature électronique ECDSA (Elliptic Curve Digital Signature Algorithm). Cet algorithme fonctionne très bien, et on l’utilise encore aujourd’hui, mais Schnorr est tout de même plus performant sur certains points techniques.
On ignore pourquoi Satoshi a choisi ECDSA plutôt que Schnorr au lancement de Bitcoin. Une hypothèse souvent évoquée est que le protocole de Claus-Peter Schnorr était sous brevet jusqu'en février 2008. Bien que Bitcoin ait vu le jour seulement un an plus tard, en janvier 2009, aucune standardisation open-source pour les signatures de Schnorr n'était alors disponible.
La mise à jour Taproot nous offre dorénavant la possibilité d’utiliser ce type de signature. Par rapport à l’algorithme ECDSA, Schnorr dispose principalement de deux atouts : ses signatures sont linéaires et plus légères.
La propriété de linéarité permet l'agrégation de plusieurs clés publiques en une seule clé. Ainsi, un script multisignatures peut être condensé en une clé unique, agissant un peu comme un résumé de toutes les autres clés impliquées dans le multisig.
Cette clé publique, qui incarne en réalité un ensemble d'autres clés publiques, peut être utilisée pour sécuriser des bitcoins. De manière similaire, il est possible d'agréger les signatures issues du multisig afin de créer une signature unique, permettant de déverrouiller la clé publique.
Cette linéarité des signatures de Schnorr présente l'avantage de minimiser les frais de transaction pour les portefeuilles multisignatures, tout en renforçant leur confidentialité. En effet, ces derniers deviennent indiscernables des autres transactions sur la blockchain. Et justement, le Lightning Network utilise des scripts multisignatures pour établir des canaux de paiement. Schnorr permet donc de réduire les frais et de rendre indifférenciables les ouvertures et fermetures de canaux Lightning. De plus, cette agrégation des signatures instaure une forme de déni plausible pour l'ensemble des transactions Taproot sur Bitcoin. Il devient impossible de déterminer si un UTXO spécifique est la propriété d'une unique personne ou de plusieurs. Enfin, la linéarité a aussi l’avantage de réduire le nombre de calculs effectués par les nœuds qui vérifient la validité des transactions.
Au-delà de ces avantages liés à la linéarité, les signatures de Schnorr sont également plus légères que les signatures ECDSA. D’un point de vue technique, les signatures de Schnorr sont sécurisées de manière prouvée et sont non malléables par nature.
ECDSA et le protocole de Schnorr relèvent de la même catégorie d'algorithmes cryptographiques, connue sous le nom de « cryptographie sur les courbes elliptiques ». Ils utilisent justement la même courbe elliptique dans le cadre de Bitcoin, dénommée « secp256k1 ».
Taproot (BIP 341)
Taproot a aussi introduit le BIP 341 qui confère justement son nom à ce soft fork. Cette mise à jour introduit une nouvelle manière de bloquer des bitcoins. Ces nouvelles sorties de transaction sont appelées « SegWit V1 » ou « P2TR (Pay-to-Taproot) ».
Les bitcoins sécurisés par un script P2TR peuvent être libérés de deux manières :
soit en présentant une signature Schnorr de façon traditionnelle ;
soit en remplissant l'une des conditions énoncées dans un arbre de Merkle, également appelé « MAST ».
Autrement dit, on peut parfaitement bloquer nos bitcoins comme on le faisait auparavant avec une simple clé privée qui permet leur dépense. Mais si on le souhaite, on peut également définir des possibilités supplémentaires qui permettront, elles aussi, de débloquer nos bitcoins.
Par exemple, vous pourriez établir quatre conditions spécifiques, que nous appellerons A, B, C et D, chacune permettant le déverrouillage de vos bitcoins. Ces conditions seraient incorporées dans un arbre de Merkle. Il s'agit simplement d'une structure de données permettant de vérifier l'inclusion d'une information particulière au sein d'un ensemble plus grand.
Pour ce faire, les conditions A, B, C et D sont passées dans une fonction de hachage, générant ainsi h(A), h(B), h(C) et h(D). Ces valeurs hachées sont ensuite regroupées et hachées de nouveau par paires, jusqu'à parvenir un hachage unique, que l’on nomme « racine de Merkle ».
Cette racine de Merkle, que l'on désigne par M, est assimilée à une clé publique. Elle est ensuite combinée avec la clé principale P, qui permet une dépense classique, pour former une nouvelle clé publique nommée Q. Cette agrégation de clés est justement rendue possible par la linéarité des signatures de Schnorr.
Pour libérer les bitcoins verrouillés sur la clé publique Q, deux options s'offrent à vous :
soit apposer une signature avec la clé privée P ;
soit satisfaire une des conditions parmi A, B, C et D.
Lors de la dépense, seule la condition utilisée est révélée. Grâce à la structure en arbre de Merkle, les nœuds peuvent vérifier la validité de la condition, sans pour autant avoir accès à toutes les autres conditions. Par exemple, si vous utilisez la condition B pour dépenser les bitcoins, alors A, C et D restent cachées.
L’avantage de cette méthode de sécurisation P2TR réside dans la possibilité de configurer des scripts complexes sans avoir à les exposer publiquement sur la blockchain. Cela favorise à la fois la confidentialité des utilisateurs et le passage à l’échelle des contrats intelligents élaborés au sein du réseau Bitcoin.
Tapscript (BIP 342)
Enfin, le dernier BIP introduit avec Taproot s’appelle Tapscript. Cette mise à jour a pour objet de modifier certains opcodes du langage de script classique de Bitcoin, afin de définir le nouveau langage de script utilisé pour les dépenses Taproot.
Le langage de script est le mécanisme qui permet l'ajout de conditions de dépense sur des UTXOs. Ainsi, lorsque vous recevez des bitcoins à une adresse de réception désignée « A », ceux-ci sont protégés par un script stipulant que : « pour dépenser ces bitcoins, une signature électronique correspondant à la clé publique associée à l'adresse A doit être fournie ». Pour rédiger ces scripts, on utilise des commandes spécifiques connues sous le nom d'opcodes.
Afin de mettre en œuvre les diverses modifications associées à Taproot que nous avons évoquées dans les parties précédentes, il s'est avéré nécessaire de revisiter le langage de script. C'est là l'objet du BIP 342 qui désactive ou modifie certains opcodes, et vient en ajouter de nouveaux.
➤ Découvrir qui contrôle le protocole Bitcoin.
Conclusion
Taproot représente une évolution majeure du protocole Bitcoin, activée en novembre 2021 par le biais d'un soft fork. Cette mise à jour regroupe l'implémentation de trois BIPs distincts :
Le BIP 340, qui permet l’utilisation du protocole de Schnorr, un nouvel algorithme de signature sur Bitcoin. Son avantage principal en comparaison avec ECDSA repose sur la linéarité de ses signatures ;
Le BIP 341, qui introduit P2TR, une nouvelle méthode pour verrouiller des bitcoins. Pour débloquer des fonds soumis à ce type de script, il faut soit fournir une signature classique issue d'une clé privée, soit remplir une des conditions initialement configurées dans un arbre de Merkle ;
Le BIP 342, également désigné sous le nom de Tapscript, qui opère une refonte du langage script de Bitcoin pour le rendre compatible avec les innovations apportées par les BIPs 340 et 341.
Pour résumer, Taproot offre des bénéfices considérables en termes de confidentialité, de flexibilité et de passage à l’échelle, particulièrement pour les contrats intelligents et les scripts complexes sur Bitcoin. Il constitue un prérequis technique essentiel pour améliorer les secondes couches de Bitcoin, telles que le Lightning Network, ainsi que pour élaborer de nouveaux protocoles innovants.
➤ Comprendre la différence entre un soft fork et un hard fork sur Bitcoin.