Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain privée

325 vues

Publié le

La blockchain est la technologie buzzword du moment pour assurer une traçabilité des transactions. Beaucoup de personnes en parlent, mais très peu savent comment cela fonctionne réellement. Pire, de plus d'outils d'implémentations font leur apparition, et il est difficile de s'y retrouver.

The Linux Foundation a créé Hyperledger Fabric, un framework permettant la réalisation d'un réseau de blockchain from scratch très prometteur, que nous allons décortiquer ensemble. Nous allons donc réaliser un tour d'horizon de ce qu'il permet et explorer les tenants et aboutissants de ce qu'est concrètement la réalisation d'un tel réseau.

Cette présentation a pour vocation de vous permettre de comprendre en détail le fonctionnement de cette technologie, et surtout d'être capable de savoir si elle peut répondre à vos besoins.

Par Vincent Segouin, Développeur full-stack JS Java chez Xebia

Toutes les informations sur xebicon.fr

Publié dans : Technologie

XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain privée

  1. 1. @Xebiconfr #Xebicon18 @vsegouin Build the future Hyperledger Fabric Création d’un réseau de blockchain privée Vincent Segouin, Développeur Full Stack
  2. 2. @Xebiconfr #Xebicon18 @vsegouin Qui suis-je ? Vincent Segouin Développeur Full Stack @vsegouin
  3. 3. @Xebiconfr #Xebicon18 @vsegouin Qu’est-ce que la blockchain ?
  4. 4. @Xebiconfr #Xebicon18 @vsegouin Base de données Système permettant d’enregistrer des informations de façon distribuée. ● Les données sont détenues par l’ensemble des acteurs du réseau. ● Si un acteur fait défaut, les informations restent accessibles. ● Une donnée inscrite ne peut pas être supprimée. ● Les données sont entièrement accessibles, la blockchain n’assure en aucun cas la confidentialité. ● Tous les acteurs du réseau travaillent ensemble pour garantir l’exactitude des données. Blockchain Système permettant d’enregistrer des informations de façon centralisée. ● Un acteur détient l’ensemble des droits sur les données. ● Si le propriétaire fait défaut, la base devient inaccessible. ● Une donnée peut être modifiée à tout moment. ● Le propriétaire distribue l’information et gère la confidentialité des données. ● Le propriétaire de la donnée est l’unique responsable de l’exactitude de ce qui est enregistré.
  5. 5. @Xebiconfr #Xebicon18 @vsegouin A effectue une transaction vers B Plusieurs transactions sont regroupées dans un bloc Le bloc est validé par les noeuds du réseau au moyen de techniques cryptographiques Le bloc est ajouté à la blockchain B reçoit la transaction validée de A Comment fonctionne une blockchain ?
  6. 6. @Xebiconfr #Xebicon18 @vsegouin ● Hash = Hash du bloc n-1 + contenu du bloc ● Un bloc de bitcoin contient 500 transactions LEDGER Qu’est ce qu’un bloc ?
  7. 7. @Xebiconfr #Xebicon18 @vsegouin “The project will develop an enterprise grade, open source distributed ledger framework and free developers to focus on building robust, industry-specific applications, platforms and hardware systems to support business transactions.” The Linux Foundation - December 17, 2015 Dates : 16/09/16 : V 0.6 - First Release 11/07/17 : V 1.0 - Stable 10/10/18 : V 1.3 - Actuel Les fondateurs : Qu’est ce qu’HyperLedger Fabric ?
  8. 8. @Xebiconfr #Xebicon18 @vsegouin Blockchain publique Une blockchain privée requiert une vérification des acteurs participant au réseau, les différents tiers se connaissent ● Seuls les acteurs autorisés peuvent lire les données. ● Les personnes rejoignant le réseau sont authentifiées par une autorité de certification. ● Seuls les noeuds disposant du chaincode sont habilités à dire si une transaction est valide ou non. Blockchain privée Une blockchain publique permet à n’importe qui de rejoindre le réseau et d’y participer ● Tout le monde peut y lire les données. ● Tout le monde peut envoyer des transactions et prétendre leur validation. ● Tout le monde peut participer librement au processus de consensus pour déterminer quels blocs doivent être ajoutés à la chaîne et quel est l’état courant du système.
  9. 9. @Xebiconfr #Xebicon18 @vsegouin Qu’est ce qu’un chaincode ? ● Réalisé en Go, Java ou nodeJS. ● Est instancié sur un peer. ● Initialise et gère l’état du ledger. ● Permet de gérer un seul ledger. ● Gère un processus business. ● Simule et valide des transactions. ● L’ensemble des noeuds validant une transaction forme un consensus. const shim = require('fabric-shim'); const util = require('util'); let Chaincode = class { async Init(stub) { return shim.success(); } async createCar(stub, args) { var car = { docType: 'car', make: args[1], model: args[2], }; await stub.putState( args[0], Buffer.from(JSON.stringify(car))); }; shim.start(new Chaincode()); Le chaincode est un programme instancié sur un noeud, permettant d’effectuer des transactions sur la blockchain en validant les différents états de cette dernière.
  10. 10. @Xebiconfr #Xebicon18 @vsegouin Qu’est ce qu’un consensus ? Le consensus est un processus où les noeuds du réseau fournissent une garantie de l’ordre ainsi que de la validité des blocs qui ont besoin d’être enregistrés dans le ledger. Le consensus doit assurer les principes suivants : ● Confirmer la validité des transactions dans un bloc.. ● Convient de l'ordre et de l'exactitude et donc des résultats d'exécution, ce qui implique un accord sur l'état global. ● Il doit dépendre du chaincode pour vérifier l'exactitude d'un ensemble de transactions commandées dans un bloc.
  11. 11. @Xebiconfr #Xebicon18 @vsegouin Qu’est ce qu’un consensus ? Le consensus dans Hyperledger Fabric est séparé en 3 étapes : l’approbation, la commande, la validation. ● L’approbation est gérée par les endorseers peer, qui simule la transaction et vérifie si l’état final de la blockchain est cohérente.. ● La phase de commande récupère les transactions approuvées, elle valide l’ordre d’arrivée des transactions pour les enregistrer dans le ledger. ● La validation prend les blocs et confirme la validité des résultats. Cette méthode s'appelle le Permissioned voting based consensus
  12. 12. @Xebiconfr #Xebicon18 @vsegouin Comment fonctionne Hyperledger Fabric ?
  13. 13. @Xebiconfr #Xebicon18 @vsegouin Fonctionnement d’Hyperledger Fabric Simule la transaction Propose une transaction Renvoie l’approbation signée Renvoie la liste des approbations Vérifie les polices Package les approbations La transaction est envoyée aux noeuds Peer Un noeud contenant la blockchain et permet la redondance du système. Endorser Peer Un peer sur lequel un chaincode est instancié et permet de simuler les transactions. Orderer Un noeud qui agrège les résultats des simulations et transmet les changements d’état aux différents noeuds Peer Peer Peer Peer
  14. 14. @Xebiconfr #Xebicon18 @vsegouin Configuration & Topologie Organisation 1 EP1 P2 Organisation 2 P3 EP1 EP2 P4 Organisation 3 P2 EP1 P3 Application 2 Application 1 C H A N N E L Application 3 Ordering Service Read / Write Read Read / Write
  15. 15. @Xebiconfr #Xebicon18 @vsegouin Focus sur un use case
  16. 16. @Xebiconfr #Xebicon18 @vsegouin ● L’organisation 1 (Org1) enregistre un document afin qu’un utilisateur de l’organisation 2 (Org2) puisse le lire. Enregistrer Lire Besoin : Problématique : ● La blockchain n’est pas faite pour stocker des documents. Organisation 1 Organisation 2 Définition du use case
  17. 17. @Xebiconfr #Xebicon18 @vsegouin ● L’utilisateur de Org2 remplit le document, le signe et le met à jour dans la blockchain. Remplit et met à jour le document + signature Besoin : Problématique : ● La blockchain ne détruit pas de document et ne se met pas à jour stricto sensus. Organisation 2 Définition du use case
  18. 18. @Xebiconfr #Xebicon18 @vsegouin Lecture seule Besoin : Problématique : ● Gestions des permissions et des MSP. Organisation 3 Définition du use case ● Un utilisateur de l’organisation 3 (Org3) a l’autorisation de lire le document mais n’a pas le droit de le modifier.
  19. 19. @Xebiconfr #Xebicon18 @vsegouin ● Chaque action doit être enregistrée dans la blockchain. Demande une action (Lecture, écriture etc) Besoin : Problématique : ● Une lecture du contenu de la blockchain n’est pas enregistrée. Utilisateur Action enregistrée Définition du use case
  20. 20. @Xebiconfr #Xebicon18 @vsegouin ● Si un utilisateur le souhaite, on doit être en mesure de rendre un document inaccessible. Demande de suppression Besoin : Problématique : ● Le concept de suppression n’existe pas dans la blockchain : tout ce qui est enregistré l’est définitivement. Utilisateur Suppression du document Définition du use case
  21. 21. @Xebiconfr #Xebicon18 @vsegouin Mise en place du réseau
  22. 22. @Xebiconfr #Xebicon18 @vsegouin Architecture AWS Utilisateur 1 Utilisateur 2 Utilisateur 3
  23. 23. @Xebiconfr #Xebicon18 @vsegouin Architecture AWS Utilisateur 1 Utilisateur 2 Utilisateur 3
  24. 24. @Xebiconfr #Xebicon18 @vsegouin Configuration configtx.yaml genesis.block channel.tx configtxgen Crypto-config.yaml ca-certscryptogen # crypto-config.yaml OrdererOrgs: - Name: Orderer Domain: example.com Specs: - Hostname: orderer PeerOrgs: - Name: Org1 Domain: org1.example.com Template: Count: 1 Users: Count: 1 - Name: Org2 Domain: org2.example.com Template: Count: 2 Users: Count: 1 #Configtx.yaml Organizations: - &SampleOrg Name: SampleOrg ID: SampleOrg MSPDir: msp AnchorPeers: - Host: 127.0.0.1 Port: 7051 Orderer: &OrdererDefaults OrdererType: solo Addresses: - 127.0.0.1:7050 BatchTimeout: 2s BatchSize: MaxMessageCount: 10 AbsoluteMaxBytes: 10 MB PreferredMaxBytes: 512 KB MaxChannels: 0 SampleSingleMSPChannel: Consortium: SampleConsortium Application: <<: *ApplicationDefaults Organizations: - *SampleOrg
  25. 25. @Xebiconfr #Xebicon18 @vsegouin Configuration CLI Orderer C H A N N E L Peer Peer Peer Peer channel.tx create-channel genesis.block #Docker_compose_cli.yaml version: '2' networks: basic: cli: container_name: cli image: hyperledger/fabric-tools tty: true environment: - GOPATH=/opt/gopath - CORE_LOGGING_LEVEL=DEBUG - CORE_PEER_ID=cli - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer command: /bin/bash volumes: - /var/run/:/host/var/run/ - ./../chaincode/:/opt/gopath/src/github.com/ networks: - basic #docker_compose_orderer.yaml version: '2' networks: basic: services: orderer.example.com: container_name: orderer.example.com image: hyperledger/fabric-orderer environment: - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 - ORDERER_GENERAL_GENESISMETHOD=file - ORDERER_GENERAL_GENESISFILE=/etc/hyperledger/configtx/gen esis.block - ORDERER_GENERAL_LOCALMSPID=OrdererMSP working_dir: /opt/gopath/src/github.com/hyperledger/fabric/orderer command: orderer ports: - 7050:7050 volumes: - ./config/:/etc/hyperledger/configtx networks: - basic #docker_compose_peer.yaml version: '2' networks: basic: services: peer0.org1.example.com: container_name: peer0.org1.example.com image: hyperledger/fabric-peer environment: - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - CORE_PEER_ID=peer0.org1.example.com - CORE_LOGGING_PEER=debug - CORE_CHAINCODE_LOGGING_LEVEL=DEBUG - CORE_PEER_LOCALMSPID=Org1MSP - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 working_dir: /opt/gopath/src/github.com/hyperledger/fabric command: peer node start ports: - 7051:7051 - 7053:7053 volumes: - /var/run/:/host/var/run/ - ./config:/etc/hyperledger/configtx depends_on: - orderer.example.com networks: - basic docker_compose.yaml docker-compose up
  26. 26. @Xebiconfr #Xebicon18 @vsegouin Configuration CLI Orderer C H A N N E L Peer Peer Peer Peer channel.tx create-channel genesis.block #Docker_compose_cli.yaml version: '2' networks: basic: cli: container_name: cli image: hyperledger/fabric-tools tty: true environment: - GOPATH=/opt/gopath - CORE_LOGGING_LEVEL=DEBUG - CORE_PEER_ID=cli - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer command: /bin/bash volumes: - /var/run/:/host/var/run/ - ./../chaincode/:/opt/gopath/src/github.com/ networks: - basic #docker_compose_orderer.yaml version: '2' networks: basic: services: orderer.example.com: container_name: orderer.example.com image: hyperledger/fabric-orderer environment: - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 - ORDERER_GENERAL_GENESISMETHOD=file - ORDERER_GENERAL_GENESISFILE=/etc/hyperledger/configtx/gen esis.block - ORDERER_GENERAL_LOCALMSPID=OrdererMSP working_dir: /opt/gopath/src/github.com/hyperledger/fabric/orderer command: orderer ports: - 7050:7050 volumes: - ./config/:/etc/hyperledger/configtx networks: - basic #docker_compose_peer.yaml version: '2' networks: basic: services: peer0.org1.example.com: container_name: peer0.org1.example.com image: hyperledger/fabric-peer environment: - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - CORE_PEER_ID=peer0.org1.example.com - CORE_LOGGING_PEER=debug - CORE_CHAINCODE_LOGGING_LEVEL=DEBUG - CORE_PEER_LOCALMSPID=Org1MSP - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 working_dir: /opt/gopath/src/github.com/hyperledger/fabric command: peer node start ports: - 7051:7051 - 7053:7053 volumes: - /var/run/:/host/var/run/ - ./config:/etc/hyperledger/configtx depends_on: - orderer.example.com networks: - basic genesis.block peer channel join chaincode.js install chaincode chaincode.js instantiate chaincode chaincode.js chaincode.js Chaincode Instance Chaincode Instance const shim = require('fabric-shim'); const util = require('util'); let Chaincode = class { async Init(stub) { return shim.success(); } async createCar(stub, args) { var car = { docType: 'car', make: args[1], model: args[2], }; await stub.putState( args[0], Buffer.from(JSON.stringify(car))); }; shim.start(new Chaincode());
  27. 27. @Xebiconfr #Xebicon18 @vsegouin Communiquer avec la blockchain Utilisateur 1 Utilisateur 2 Utilisateur 3
  28. 28. @Xebiconfr #Xebicon18 @vsegouin Configuration REST Api Service CA client BC ClientPersistence Utilisateur Certificate Authority Endorser Peer Ordering Service Endorser Peer DB const state_store = await Fabric_Client.newDefaultKeyValueStore({ path: store_path}); fabric_client.setStateStore(state_store); const user_context = await fabric_client.getUserContext('user1', true); const store_path = path.join(__dirname, 'hfc-key-store'); const channel = fabric_client.newChannel('mychannel'); const peer = fabric_client.newPeer('grpc://localhost:7051'); channel.addPeer(peer); let tx_id = null; const request = { chaincodeId: 'fabcar', fcn: 'queryAllCars', args: [''] }; const response = await channel.queryByChaincode(request); S3
  29. 29. @Xebiconfr #Xebicon18 @vsegouin Workflow type d’une transaction S3 Application DB Ordering Service Endorser peer Endorser peer Certificate Authority Peer Peer ConnexionUpload
  30. 30. @Xebiconfr #Xebicon18 @vsegouin RGPD et droit à l’oubli
  31. 31. @Xebiconfr #Xebicon18 @vsegouin RGPD et droit à l’oubli Le droit à l’oubli Problème ● Ce qui est inscrit dans une blockchain l’est définitivement. ● Il n’y a pas de notion de suppression. ● Si une donnée venait à être supprimée, toute la chaîne est invalidée. ● On peut demander la suppression d’une clé, mais la donnée reste présente dans les blocs. L’article 17 de la RGPD dispose que toute personne justifiant de son identité d’exiger du responsable d'un traitement que soient, selon les cas, rectifiées, complétées, mises à jour, verrouillées ou effacées les données à caractère personnel la concernant
  32. 32. @Xebiconfr #Xebicon18 @vsegouin RGPD et droit à l’oubli Solutions Utiliser un système de chiffrement des données et de n’enregistrer dans le bloc uniquement les informations chiffrées. ● Chaque donnée sensible est chiffrée par une clé unique. ● il suffit de détruire la clé de chiffrement, les informations ainsi stockées ne pourront plus être déchiffrées. Si une information n’est pas suffisamment chiffrée, il reste possible à un attaquant la possibilité de faire une brute force sur la donnée.
  33. 33. @Xebiconfr #Xebicon18 @vsegouin RGPD et droit à l’oubli Solutions Utiliser la solution de collection privée fourni par Hyperledger Fabric, qui est constituée de deux parties : ● L’information privée, envoyée en peer-2-peer aux organisations autorisées. La donnée est stockée sur les noeuds dans une base de données privée. L’ordering service n’est pas utilisé pour enregistrer ces informations. ● Les hashs de ces données, qui passent par le processus de validation standard et qui est enregistré dans le ledger global. Ces hashs peuvent être utilisés comme preuve de transaction et être utilisé lors d’un audit.
  34. 34. @Xebiconfr #Xebicon18 @vsegouin Schéma du système de collection privée
  35. 35. @Xebiconfr #Xebicon18 @vsegouin Que doit-on en retenir ?
  36. 36. @Xebiconfr #Xebicon18 @vsegouin Concernant le use case ● Use case 1 : Enregistrer un document. - Utilisation d’une base de donnée à part (S3) et la blockchain stock les métadonnées. ● Use case 2 : Lire le document, le modifier et le mettre à jour. - Utilisation du système de permission fourni par Hyperledger Fabric - Utilisation de S3 pour le document ● Use case 3 : Autorisation d’accès en lecture seule. - Utilisation du système de permission fourni par Hyperledger Fabric ● Use case 4 : Chaque action doit être enregistrée dans la blockchain. - Impossible d’assurer cette règle, un acteur autorisé peut lire directement le ledger. ● Use case 5 : Rendre un document inaccessible. - Il suffit de détruire le document original ou bien chiffrer les informations dans la blockchain et détruire les clés utilisé pour le chiffrement.
  37. 37. @Xebiconfr #Xebicon18 @vsegouin Avantages et inconvénients Avantages Inconvénients Réseau décentralisé Complexe et Long à mettre en place Souplesse dans la configuration Temps de traitement Soutenu par beaucoup de sociétés Coûts d’infrastructures Possibilité de le lier à kafka Des problématiques de mises à jour. Pas de Proof Of Work coûteux en traitement Peu de use case. Chaincode fait en go, java ou nodeJs, ce qui rend sa réalisation facile.
  38. 38. @Xebiconfr #Xebicon18 @vsegouin Blockchain ou base de données ?
  39. 39. @Xebiconfr #Xebicon18 @vsegouin Merci de votre attention Des questions ?

×