Nous évoquons régulièrement la blockchain Bitcoin en tant que grand registre de transactions. Et de fait, il s’agit bien là pour nous de sa fonction première.
Pourtant, nous ne devons pas perdre de vue qu’elle peut également être utilisée pour enregistrer n’importe quel autre type de données… et ce, de manière tout aussi immuable et transparente. Dans les années ‘90, le premier modèle de blockchain mis au point par les ingénieurs Stuart Haber et Scott Stornetta avait été conçu pour recevoir des certificats de dépôts de brevets. De nos jours, enregistrer des documents sur la blockchain Bitcoin signifie les intégrer sous forme de données non financières dans les transactions. Pour ce faire, on a recours à des techniques bien rodées que nous allons survoler ensemble. Voici donc un petit article destiné à nous faire monter d’un cran dans la compréhension de cet objet métamorphe qu’est le bitcoin !
1. Le champ OP_RETURN
Bon, nous n’irons pas plus loin dans le jargon de codeur.
Mais l’existence de cet espace particulier, introduit dans Bitcoin dans sa version de mars 2014 et qui permet de stocker jusqu’à 80 octets de données, est une avancée importante dans le domaine. Il ne s’agit pas de la dernière méthode en date mais nous la mentionnons en premier car elle a le mérite de vouloir standardiser l’inscription de données arbitraires sur la blockchain. Elle est en outre celle qui présente le moins d’encombrement (étant donné sa limite) et qui encourage les utilisateurs à stocker uniquement les métadonnées essentielles.
Aujourd’hui, elle est couramment utilisée par des prestataires privés pour enregistrer des empreintes numériques (les fameux ‘hashs’) de documents divers et variés. Ceci étant dit, la création et la diffusion d’une transaction avec OP_RETURN nécessitent malgré tout un peu d’expertise technique que nous ne souhaitons pas forcément maîtriser ici. Alors, contentons-nous d’observer son usage à travers un exemple mythique.
Veux-tu m’épouser… sur la blockchain ?
Un couple pour le moins fantasque, Joyce et David Mondrus, a attiré l’attention des médias et de la communauté Bitcoin en devenant le premier à enregistrer son mariage sur la blockchain Bitcoin. Celui-ci a eu lieu lors d’une conférence Bitcoin à Orlando, en octobre 2014. Les deux bitcoineurs amoureux ont souhaité inscrire leur engagement matrimonial de manière permanente et immuable dans une volonté de démontrer que la blockchain pouvait être utilisée pour graver un contrat ou tout autre type d’enregistrement légal dans du marbre numérique, tout en mettant l’éclairage sur la transparence et la sécurité offertes par cette technologie.
L’événement a constitué un exemple marquant de l’usage de l’ OP_RETURN. En premier lieu, le contrat de mariage du couple est passé par la fonction de hachage SHA256 (on dit alors qu’il a été ‘haché’) pour produire une empreinte numérique, le hash. Pour rappel, le hachage est cette fonction employée en cryptographie qui transforme les données en une chaîne de caractères binaires de longueur toujours fixée préalablement (ici 256) et qui produit un reliquat condensé et unique de ces données, leur empreinte digitale en quelque sorte.
Ensuite, une transaction Bitcoin est construite comme à l’habitude – avec une adresse de destinataire et un montant à envoyer – mais mentionnant en particulier le hachage du contrat de mariage dans son champ OP_RETURN. Enfin, la transaction est diffusée sur le réseau Bitcoin pour finir par être incluse dans un bloc par un mineur. Une fois confirmée, l’inscription du mariage est devenue immuable et son empreinte visible publiquement sur la blockchain !
En relisant les données de cette transaction, on retrouvera à tout jamais la mention du hash qui constitue la preuve d’existence de ce contrat de mariage, à sa date et son heure précises. Une réflexion qui vient tout naturellement, c’est le coût d’une telle opération puisqu’elle nécessite d’effectuer une transaction. Pas d’inquiétude, une telle inscription est indépendante du montant – souvent dérisoire – et de plus, il s’agit la plupart du temps d’une transaction impliquant deux adresses appartenant au même propriétaire. Son véritable coût se limite alors au pourboire du mineur.
2. Les scripts Bitcoin
Les scripts Bitcoin sont de petits programmes exécutables dans le cadre des transactions et accompagnant celles-ci. Ils sont écrits dans un langage simple, spécifique à Bitcoin et servent à décrire les conditions suffisantes à la dépense des bitcoins concernés. En général, pour l’exécution d’une transaction conventionnelle, ils présentent une taille réduite. Mais ils peuvent être plus importants et amener une complexité nécessaire à certaines transactions, comme par exemple les transactions multi-signatures, l’ouverture et la fermeture des canaux du Lightning Network, les transactions à condition temporelle, etc.
Lors de la diffusion des transactions, les nœuds du réseau Bitcoin exécutent ces scripts pour valider les conditions de dépense. Or, il se trouve que ces scripts peuvent inclure des données arbitraires que nous pourrions qualifier d’adjacentes’ aux conditions de dépense. Les scripts offrent même une flexibilité accrue par rapport à OP_RETURN car ils ne présentent pas de limite technique à l’espace occupé. Présenté ainsi, cela paraît encore bien abstrait alors voyons ce que ça donne en pratique.
Pour enregistrer un document dans un script, il suffit de l’insérer dans les lignes du script en identifiant ses données comme étant ‘informatives’. De cette manière, elles ne perturbent en rien la bonne exécution de celui-ci. Mais bien évidemment, ce script n’est plus standard, il devient personnalisé en quelque sorte. En conséquence, la transaction doit être construite grâce à un portefeuille Bitcoin dit ‘avancé’ qui permet la création de transactions munies de ces scripts personnalisés.
Le document une fois inclus dans les données du script, la transaction est alors diffusée sur le réseau et mise en attente dans la Mempool jusqu’à ce qu’un mineur la prenne pour l’insérer dans un bloc. Ceci fait, son script et les données qu’il contient se trouvent ipso facto inscrits de manière immuable sur la blockchain. Il y a cependant un inconvénient très fréquent à l’usage des scripts : leur taille. Généralement, les données sont insérées directement et sans compression particulière, ce qui augmente l’encombrement des transactions et en conséquence les frais de minage (…et in fine la taille de la blockchain). À employer avec modération donc !
3. Les transactions multi-signatures
Il s’agit d’une variation sur le thème abordé dans le paragraphe précédent. Dans le cas présent, il va être fait usage de scripts spécifiques à la redemande de signatures, qui sont typiques des transactions multisignatures. Comme leur nom l’indique, ces transactions nécessitent plusieurs signatures pour être validées (un peu comme dans un compte partagé à plusieurs). Tout d’abord, une adresse multisignatures est créée via un portefeuille Bitcoin en combinant plusieurs clés publiques, par exemple trois.
La condition de dépense est alors définie, disons que l’on accepte deux signatures sur les trois pour pouvoir dépenser les fonds. Au moment d’effectuer une transaction à partir de cette adresse, le script relatif à la combinaison des signatures peut alors être personnalisé par l’ajout de données supplémentaires (i.e. les informations spécifiques au document à enregistrer). Dès que les signatures requises sont obtenues, la transaction est diffusée et puis insérée dans un bloc.
Pour valider la transaction qui autorise la dépense, les nœuds vérifient que le nombre requis de signatures correctes est bien présent en exécutant ce script. La transaction multisignatures munie des données du document se retrouve ainsi inscrite de manière immuable sur la blockchain.
4. Les transactions Null Data
Peu de choses pertinentes à dire si ce n’est que ces transactions contiennent des sorties non standard qui peuvent stocker des données. Cependant, cette méthode n’est plus employée car les transactions finissent régulièrement rejetées par des nœuds du réseau qui voient en ces sorties des états non valides.
Écris dans un livre toutes les paroles que je t’ai dites (Jérémie 30:2)
Après ce petit survol technique, revenons à l’essentiel : pourquoi enregistrer des documents sur la blockchain Bitcoin ? Parce qu’il s’agit d’une blockchain publique, aisément consultable par tous sans autorisation et qui ne requiert pas l’aval d’une autorité sur son contenu. Elle est donc transparente et incorruptible. En dehors de toute considération monétaire, la blockchain Bitcoin est ainsi parfaitement utilisable pour générer
– la preuve de l’existence de documents importants, à un moment précis
– la preuve d’une propriété intellectuelle, par la mention d’une empreinte qui prouve sa création
– l’enregistrement de données scientifiques dans le cadre d’une validation de recherche, etc.
Elle permet en outre une traçabilité et un audit fiables, permanents et très facilement accessibles
– de la chaîne d’approvisionnement d’une marchandise
– de son authenticité
– de la transparence de documents financiers d’une société
– de la gestion des actifs, etc.
Aux portes du Web 3,0, elle rend possible la création et la gestion d’identités numériques
– rapidement vérifiables et sécurisées
– authentifiables sans informations supplémentaires
En conclusion
Enregistrer des documents sur la blockchain Bitcoin est une opération somme toute assez triviale pour des techniciens. Elle constitue une solution innovante et sécurisée pour assurer une immuabilité, une transparence et une vérifiabilité non invasive des informations. Que ce soit par l’utilisation du champ OP_RETURN, des scripts Bitcoin ou des transactions multisignatures, cette technologie a le potentiel de transformer, de simplifier divers secteurs en offrant des solutions robustes pour la gestion et la vérification des informations. À terme, nous pensons qu’elle sera l’outil de prédilection des notaires, le plus sûr et le plus apprécié.