Assurer la non-répudiation de vos données grâce à la Blockchain
Une façon décentralisée et standardisée d’assurer à vos utilisateurs la non-répudiation de leurs données.
1. Le besoin
Nous organisons un événement public Tech For Good qui nécessite une inscription préalable des participants. Les places étant limitées, nous sommes dans l’obligation de donner la priorité aux premiers inscrits.
Comment certifier aux autres membres, arrivés trop tard, que l’ordre des inscriptions n’a pas été modifié, truqué ou altéré ?
Most good relationships are built on mutual trust and respect.
En d’autres termes, comment leur prouver de manière neutre et juste que les personnes sélectionnées se sont inscrites avant eux ?
2. Le standard Chainpoint
C’est quoi ?
Chainpoint est un standard permettant de créer une ancre sur la blockchain. Cette ancre peut représenter tout type de données (un fichier, des données, un processus, etc …) et sera datée.
L’idée est de pouvoir vérifier l’existence et surtout l’intégrité des données à un instant T, sans devoir se fier à un tiers de confiance.
Comment ça marche ?
Le standard Chainpoint permet de lier un hash (type sha-256) de vos données à une blockchain (Bitcoin ou Ethereum) et de vous retourner une preuve datée de l’ancrage de ces données :
- Un service Chainpoint reçoit les hashes de données à ancrer
- Ces hashes sont agrégés ensemble en utilisant un Merkle tree.
- La racine de l’arbre obtenu est ancrée sur une blockchain
En d’autres termes, on crée une preuve Chainpoint qui sera mise à jour de façon continue. Une fois définitive, cette preuve définit une liste d’opérations qui lie (cryptographiquement parlant) vos données à une ou plusieurs blockchain
C’est quoi une “Chainpoint Proof” ?
Une “Chainpoint Proof” est un document JSON-LD. Il contient toutes les informations nécessaires pour vérifier de façon cryptographique que les données sont bien ancrées dans la blockchain.
Plus d’information ici
3. Tierion
Pas de panique. À première vue, tout ça semble légèrement compliqué pour certains néophytes. Mais une plateforme nommée Tierion a implémenté le standard Chainpoint et met à disposition des API et des outils simples pour vous permettre de passer les étapes un peu “tricky”.
Tierion nous permet d’ancrer gratuitement 1000 hashes de données par heure. Bien assez pour notre cas d’utilisation.
Hash API :
En oubliant les services d’authentification que je vous laisse découvrir ici et parmi tous les autres endpoints que met à disposition Tierion sur sa Hash API, nous allons nous attarder sur trois d’entre eux :
Il vous permet d’ancrer vos données préalablement hashées. Vous recevrez en retour un identifiant de reçu. Stockez soigneusement cette nouvelle donnée car elle sera nécessaire pour l’étape suivant. N’oubliez pas de lier cet identifiant aux données que vous avez hashées (sinon impossible de retrouver à quelles données en clair un hash correspond).
Les transactions blockchain n’étant pas immédiates, la preuve d’ancrage ne peut pas être disponible en temps réel. Ce service vous permet de souscrire à la création de bloc en passant en paramètre une URL de callback.
Dès que le bloc est terminé, Tierion vous POST en retour une requête. À vous de retrouver les reçus en attente et d’aller récupérer les Chainpoint Proof correspondantes.
Lorsque vous êtes notifié par Tierion qu’un bloc a été créé, vous n’avez plus qu’à appeler le service de récupération de reçu en fournissant son identifiant (obtenu en retour de l’ancrage d’un hash)
4. Concrètement ?
Données simples
Reprenons notre cas d’utilisation d’inscription à un événement. Voici un exemple de données en claire à ancrer sur la blockchain :
Après avoir stocké ces données dans notre base de données préférée (MongoDB du coup), on les hash soigneusement (avec un peu de sel et de poivre) et on obtient :
9dfb8b2ff422658571e88b87b403763b967629ccdc5760d71a945fc1cc9ffe66
Ce hash, on le POST sur le service d’ancrage de Tierion : https://hashapi.tierion.com/v1/hashitems
On stocke l’identifiant de reçu que l’on obtient en retour et on attend sagement un appel sur notre URL de callback.
Données plus complexes
Imaginons que pour des besoins de KYC, nous voulons embarquer des fichiers de type scan de carte d’identité ou autre.
Ce que nous vous proposons, c’est de convertir le ou les fichiers en base64, puis de le(s) hasher en sha-256 individuellement. On obtiendrait alors :
Nous pouvons ensuite hasher une nouvelle fois le tout pour obtenir un hash unique qui contient une empreinte ET des données ET des fichiers.
Avec l’exemple ci-dessus, on obtient ce hash (sans sel) :
3a95f55dfeca560abc00ed80cfcc2bcb7f47c50077c4b9b6b3bb2496b8a98009
Valider un reçu :
On a tendance à l’oublier mais l’étape de validation des données est la plus importante car c’est finalement le but ultime de notre plateforme d’inscription : Prouver à un utilisateur que ses données n’ont pas été altérées.
Plusieurs choix s’offrent à nous pour valider une Chainpoint Proof :
- Page de validation de reçu mise à disposition par Tierion :
https://tierion.com/validate - Librairie Node.js pour valider des preuves Chainpoint https://github.com/chainpoint/chainpoint-validate-js
- Data API mise à disposition par Tierion (plus d’explication en fin d’article)
https://tierion.com/docs/dataapi#api-validate-receipt
Quelque soit votre choix, vous aurez besoin de fournir la chainpoint proof obtenu suite à la création de nouveau bloc.
5. Aller plus loin
Attention :
Chainpoint ne transforme pas la blockchain en base de données. Vous avez nécessairement besoin de vos données stockées dans votre base, que vous allez hasher et ancrer ensuite sur la Blockchain.
Sans votre base de données en clair, impossible de prouver à quelqu’un que le hash que vous lui présentez correspond à ses propres données.
Notez que Tierion met également à disposition une Data API que j’ai volontairement éludée et qui vous permettra de stocker vos données sur leur plateforme et de les laisser gérer le hash, l’ancrage et la mise à jour de reçu. Mais attention, on perd légèrement la main sur les données et sur le côté décentralisé de notre plateforme.
Et le GDPR me direz-vous ?
Le GDPR, qui entre en vigueur en mai 2018, obligera (entre autre) aux organisations d’être en mesure de supprimer physiquement (sans laisser de traces) toutes les données personnelles dont elles disposent. Et ce sur simple demande de l’utilisateur.
Dans notre cas (inscription de personnes physiques), nous manipulons des données personnelles.
Ces données, bien que hashées, sont-elles soumises aux obligations dictées par le GDPR ?
La question semble ouverte, et on trouve de nombreux débats sur ce point précis, entre spécialistes de la Blockchain et experts GDPR.
Quoiqu’il en soit nous ne sommes pas encore en mai : alors profitons, tout en préservant l’anonymat de nos inscrits 🙂 Et d’ici mai, suivons les directions et les interprétations qui seront données au GDPR sur ce sujet.
Sources :
Tierion met à disposition une implémentation js de sa Hash API.
Pour les besoins d’un autre projet, on a aussi développé une implémentation Kotlin de Hash API. Elle n’est pas complète et doit évoluer prochainement. N’hésitez pas à jeter un coup d’oeil sur notre GitHub.