12 September 2021

Cas d'usage d'Ethereum: Certification de documents

En tant que freelance j’ai travaillé sur la problématique de l’horodatage de documents grâce à la blockchain. C’est un problème intéressant car c’est une fonctionnalité qui n’était pas vraiment possible jusqu’à maintenant. Grâce à ce type de projet, des entreprises qui ne sont pas encore “tombées” dans la décentralisation mettent un premier pied dans la blockchain et peuvent fournir à leurs clients une fonctionnalité inédite.

Les blockchains publiques sont idéales pour l’horodatage

Une blockchain publique comme Ethereum ou Bitcoin est, en gros, une base de données vérifiée par le monde entier à chaque instant. Personne ne peut contourner les règles de la blockchain, pas même ses créateurs. Ça implique que les données qu’on y stocke sont extrêmement fiables.

Un cas d’usage de la blockchain c’est donc ce qu’on appelle l’horodatage ou le timestamping en anglais. L’idée c’est de permettre à une entité, par exemple une entreprise, de certifier un document en diffusant l’information “nous, Acme Inc. certifions la véracité de ce document à la date X."

C’est très différent d’un système centralisé: dans un système centralisé, un administrateur, ou un pirate avec les droits administrateur peut modifier les données ou le programme à tout moment, et même à postériori.

Case d’usage: Prouvez de manière irréfutable la signature d’un contrat à une date précise

Une équipe m’a contacté pour mettre en place un outil de certification de documents. Ils avaient besoin de générer et de signer des contrats avec leurs utilisateurs, et d’avoir une preuve de l’existence de chaque contrat à la date de la signature. Ces contrats ont énormément d’implications légales, et ils sont très engageants pour eux et leurs clients: la preuve doit être irréfutable.

La blockchain était une solution idéale dans ce cas, car elle permet de prouver que le contrat a bien été produit à une date précise et avec un contenu précis. Il n’y a pas de tiers de confiance, la preuve est aussi fiable que les outils cryptographiques utilisés par Ethereum.

Bases de la Crypto: Empreinte Numérique

Dans les domaines qui touchent à la Blockchain et au réseau on est très attentif au stockage de données. En effet, stocker quelques octets de données sur la blockchain implique de les dupliquer des millions de fois sur toutes les machines du réseau. C’est une opération coûteuse: on doit transmettre la donnée, la vérifier, et la stocker pour une durée indéterminée. On doit être malin quand on transmet et qu’on vérifie de la donnée.

C’est là qu’interviennent les fonctions de hachage. Ces fonctions permettent de calculer l’empreinte d’un fichier. Cette empreinte est unique, aucun autre fichier ne possède la même empreinte. Tout comme une empreinte digitale permet d’identifier un être humain, l’empreinte cryptographique d’un fichier permet d’identifier un fichier.

Par exemple, voilà l’empreinte du premier chapitre du Petit Prince d’Antoine de Saint-Exupéry: d4b4e3e2b91edaed75b7791ced10afd53441e7f19e463a8b675619a081e3152d

En changeant la première lettre, l’empreinte est complètement différente: 009d8d2e8fd8e5a049c148bece24f1fdf401b87d5a0483ef910e367f273c891d

(J’utilise l’algorithme SHA256)

On utilise aussi le terme hash (comme pour un hachis en anglais). Si je veux prouver à quelqu’un que je possède un fichier, je peux simplement lui transmettre le hash de ce fichier.

Elles sont très utiles dans notre cas: On calcule l’empreinte de chaque contrat et on publie cette empreinte. Cela nous permet de ne pas publier tout le contrat et donc de préserver la confidentialité et de réduire drastiquement nos coûts.

Smart Contract

Pour ce client, on a mis en place un “SmartContract” sur la Blockchain Ethereum. C’est un bout de logiciel qui “existe” dans la Ethereum. Au lieu d’utiliser un ordinateur précis dans le réseau du client, ce programme réside “dans” Ethereum. Ce programme bénéficie donc de toutes les propriétés du réseau: il est impossible à falsifier et on ne peut pas le modifier sans respecter les règles du réseau.

On interagit avec ce programme en envoyant des transactions Ethereum. Ces transactions contiennent de la donnée et des instructions. C’est une API qui s’exécute sur la Blockchain.

En l’occurrence le contrat d’horodatage qu’on utilise est très simple, il possède un propriétaire et une fonction “timestamp” qui émet le signal d’horodatage.

Voilà à quoi ressemble un Smart Contract:

Quelques notes:

On utilise OpenZeppelin. C’est un framework commun dans l’industrie. Il fournit une implémentation fiable pour de nombreuses fonctionnalités classiques. Ici on utilise Ownable: le contrat a un propriétaire et c’est le seul qui peut appeler la fonction d’horodatage grâce au transformer isOwner.

La fonction d’horodatage est extrêmement optimisée. On ne stocke pas de données dans la mémoire du contrat car c’est une opération coûteuse. On émet simplement un message pour garder une trace de l’horodatage. On ne pourra pas modifier la donnée plus tard mais c’est un bon compromis pour notre cas d’usage.

Le processus d’horodatage

Le processus est donc le suivant:

  1. Je calcule l’empreinte du document,
  2. En utilisant mon compte “administrateur”, j’envoie une transaction qui demande à mon SmartContract de traiter l’empreinte du document.
  3. Cette empreinte est enregistrée sur la blockchain “définitivement”.
  4. Je peux maintenant envoyer le document et la trace de la transaction à mon client, il pourra à son tour prouver de manière irréfutable que le contrat a été certifié à telle date.

Vous pouvez trouver l’exemple d’une telle transaction sur la blockchain ICI. D’après le cours d’aujourd’hui (Septembre 2021) cette opération aurait coûté 15 centimes.

La Partie Off-chain

On a vu la partie Blockchain qui est relativement simple. Dans la pratique, pour un tel projet on doit aussi gérer d’autres problématiques comme la sécurité des clés du compte administrateur, la gestion des erreurs, la scalabilité du projet, etc.

Dans notre cas on avait besoin de signer un grand nombre de contrats rapidement. Les transactions sur Ethereum sont relativement lentes. On peut attendre plusieurs minutes pour une transaction. On a donc mis en place un service qui permet au reste de l’application d’interagir avec la Blockchain de manière asynchrone.

Off-Chain Infrastructure

La complexité de la blockchain est “absorbée” par la partie off-chain et cachée au reste de l’application. Dans ces conditions la blockchain deviens un service “comme un autre” qui fournit une fonctionnalité bien précise dans notre infrastructure.

Ce n’est que le début

Ce système traite près d’une dizaine de milliers de contrats quotidiennement. Mais bien évidemment c’est une esquisse du produit final. Il nous manque encore la gestion des clés, la gestion des transactions en parallèle, les erreurs, etc. Je vais publier d’autres articles sur le sujet à vous inscrire à la newsletter ci-dessous.

Si vous voulez en savoir plus ou si vous avez des questions, je vous recommande de me contacter directement sur LinkedIn ou Twitter.


Laurent Senta

I wrote software for large distributed systems, web applications, and even robots. Now I focus on decentralization, overly-engineered software, and frugal innovation. I help companies around the world build products through SingularGarden.