IMA4 2018/2019 P22 : Différence entre versions

De Wiki de Projets IMA
(Preuve de Travail : (Proof of work))
(Choix techniques : matériel et logiciel)
Ligne 130 : Ligne 130 :
 
==Cahier des charges==
 
==Cahier des charges==
 
==Choix techniques : matériel et logiciel==
 
==Choix techniques : matériel et logiciel==
 +
 +
===Logiciel===
 +
Les spécificités du projet et l'étude initiale ont conduit au choix du framework Hyperledger pour la réalisation du prototype. Les outils de développement disponible dans ce framework sont open source et supportés par la Linux Foundation. Cette plateforme offre aussi un choix assez varié pour les langages de développement. Dans notre cas et affin de s'assurer d'un bonne compatibilité ainsi que pour bénéficier d'une documentation assez riche, nous optons pour une implémentation sur "node.js" en "javaScript".
 +
 +
 +
===Matériel===
 +
Le projet est essentiellement software donc le matériel requis est:
 +
* Une Raspberry Pi 3 avec Wifi inclus (ou Pi 2 avec le Dongle Wifi)
 +
 
==Liste des tâches à effectuer==
 
==Liste des tâches à effectuer==
 
==Calendrier prévisionnel==
 
==Calendrier prévisionnel==

Version du 9 décembre 2018 à 15:00


Présentation générale

Dépôt Git

Afin de consulter le travail effectué sur ce projet un dépôt Git est disponible ici. Pour y accéder, vous devez au préalable disposer d'un compte sur la plateforme Git-hub et faire une demande d'accès à l'adresse: ait.mouheb.arezki@gmail.com

Présentation Générale

Introduction

schéma abstrait Blockchain

Blockchain est une technologie de stockage et de transmission d’informations basé sur la cryptographie. Elle peut être vue comme une sorte de base de données distribuée, sécurisée et partagée. Autrement dit, c'est une structure de données qui contient des informations et qui n'est pas détenue par un serveur centralisé mais par toutes les machines connectées au réseau. Ces informations sont groupées en blocs d'une taille définie et chaque bloc est lié à celui qui le précède par un Hash Cryptographique créant ainsi une chaîne. Le véritable attrait de la Blockchain est de créer un registre de données qui est au même temps commun et extrêmement difficile à altérer.

Plusieurs implémentations de la technologie existent et beaucoup d'autres sont en cours de développement. Historiquement, la première et la plus connue reste la Cryptomonnaie Bitcoin qui est une variante spécifique dite publique c'est à dire que tous les utilisateurs ont les mêmes droits d'accès. Le potentiel d'application de la technologie a conduit à l'apparition d'autres variantes plus adaptées aux nouveaux usages.

Blockchain Fédérée

On peut distinguer 2 autres types:

  • Privée: propriété d'un individu ou organisation. Un nœud central décide d'octroyer les privilèges d'accès aux autres nœuds
  • Fédérée ou Consortium: propriété d'un groupe. Les nœuds fédérateurs se réservent le droit de vérifier les blocs, voire de les créer.

Description du projet

L'idée de ce projet est d'explorer cette technologie par l'implémentation d'une variante fédérée de celle-ci qui sera illustrée par un système d'annonce public. Dans ce système, les membres du réseau peuvent se connecter et ainsi avoir accès aux messages diffusés mais seuls certains membres seront autorisés à émettre/valider une annonce. Les messages publiés seront protégés contre l'altération par les mécanismes de cryptage et de sécurité blockchain.

Objectifs

Ce projet est essentiellement un sujet d'exploration et de ce fait les objectifs peuvent évoluer. Néanmoins, nous pouvons initialement lister les suivants:

  • Étude des différentes technologies de développement Blockchain (Ethereum, Hyperledger ...) disponibles et définition de la plus adaptée au projet.
  • Appropriation des outils de développement liés au choix technologique.
  • Prototype 0:
    • Réalisation d'un premier système de diffusion d'annonce public libre d’accès.
    • Réalisation d'un API Rest pour interagir avec le système.
    • Implémentation de clients simples visualisant les messages (Exemples: ligne de commande, Page web ...).
  • Prototype 1:
    • Ajouter les mesures de sécurité et de vérification pour réserver le droit de diffusion aux nœuds fédérateurs et gérer l'accès au système.
    • Implémentation de clients avancés qui devront interagir avec les messages diffusés (Exemples: Dispositif embarqué, Système d'alarme ...etc).
  • Faire évoluer le prototype.

Analyse du projet

Positionnement par rapport à l'existant

La technologie blockchain est très récente et fait l'objet de beaucoup de projets de développement. Parmi ces derniers, certaines applications se rapprochent de l'objectif de ce projet c'est à dire la création d'un système de diffusion de contenu (annonce, messages). Parmi les plus aboutis, nous retrouvons deux projets majeurs.

Analyse du premier concurrent

Civil

La plateforme Civil

Civil est une start-up qui propose un nouveau business modèle pour le journalisme. Ils proposent un système décentralisé de publication basé sur la Blockchain. Leur système permet à la communauté de voter pour élire les Newsrooms (groupes de journalistes représentant des nœuds dans le réseau) qui auront le droit de publier et de vérifier le contenu journalistique. Le droit de vote est acquis en disposant de Consumer Tokens, l'équivalent d'une monnaie client.

Spécificités:

  • Plateforme de développement utilisée: Ethereum
  • Système de diffusion à monnaie interne..
  • Contenu partagé: Articles journalistiques, vidéos, podcasts ...
  • Accès: Public.

Analyse du second concurrent

DNN:The Decentralised News Network

La plateforme DNN

DNN "Decentralized News Network est une start-up qui utilise la technologie Blockchain pour la diffusion de l'information de façon vérifiable, transparente et protégée contre la censure en incitant les utilisateurs à contribuer à la validation et la vérification de contenu à travers un processus de revue rémunérant.

Spécificités:

  • Plateforme de développement utilisée: Ethereum.
  • Système de diffusion à monnaie interne: Ether.
  • Contenu partagé: Articles journalistiques, podcasts ...
  • Accès: Public.

Synthèse

Les concurrents analysés proposent des fonctionnalités très avancées de partage contenu et sont implémentés sur une plateforme (Ethereum) destinée à une architecture à accès public. Ce choix a ses avantages mais aussi des contraintes liées à l'utilisation obligatoire d'une monnaie locale incitant à la vérification des publications. Il faut savoir aussi que dans ce modèle toutes les diffusions sont publiques et donc consultables par toute personne ayant internet. Cette architecture utilise des protocoles de consensus pour résoudre les conflits qui sont efficaces mais impliquent des coûts calculatoires important. Enfin, le déploiement sur la plateforme Ethereum est orienté B2C et implique l'usage de la cryptomonnaie Ether.

A terme ce projet doit aboutir sur une architecture fédérée de validation avec des nœuds diffuseurs prédéfinis, sans avoir à utiliser de cryptomonnaie, exploitant des ressources libres pour le développement telles que Hyperledger de la Linux foundation qui sont plus flexibles tout en tirant profit des avantages d'une application décentralisée et sécurisée blockchain.

Scénario d'usage du concept

concept du projet

Un possible scénario d'usage est l'archivage, la protection et l'exploitation des informations communiquées par certains organes critiques d'une structure ou organisation.

Dans ce cas de figure, ces organes seront les nœuds fédérateurs et diffuseront des communiqués sur le réseau qui lui tiendra un registre chronologique immuable de toutes les communications.

Un nœud client peut suivre les communications d'un ou plusieurs organes et agir en conséquent.


Cette organisation peut être:

  • Un état
    • Les différents ministères (la défense, la finance ...) constituent les nœuds fédérateurs.
    • Un nœud client peut être:
      • Un citoyen qui souhaite s'informer et accède au flux à travers une application web/mobile pour connaître les transactions liées aux dépenses publiques.
      • Une institution de contrôle qui souhaite investiguer.
      • Un dispositif d'urgence qui s'enclenche suite à une alerte du ministère de la défense.
      • ...

Réponse à la question difficile

Qu'est-ce qui fait la sécurité de la Blockchain?

Fonction de hashage
Liaison entre blocs

Dans le domaine de l'informatique l'usage des fonctions de hachage cryptographiques telles que SHA256 est assez fréquent. Ce sont des fonctions qui, à une donnée de taille arbitraire, associent une image de taille fixe (digest ou hash). La propriété essentielle de ces fonctions est le fait qu'elles sont pratiquement impossibles à inverser. En d'autre termes, à partir d'un hash il s'avère très difficile de retrouver la donnée qui l'a produit. D'une autre part un petit changement dans la donnée d'entrée engendre un hash totalement différent.

Lorsque l'on insère un nouveau bloc dans une blockchain, on le relie au reste de la chaîne en y ajoutant un champ contenant le digest du bloc précédent. D'après ce qu'on a vu dans le paragraphe précédent, si l'on modifie un bloc (n), son digest ne sera plus le même donc le bloc suivant (n+1) n'aura plus un lien valide il faudra de ce fait le recalculer. En recalculant le lien dans le (n+1) nous changeons maintenant son contenu. Du coup, le bloc (n+2) n'aura plus un lien valide ...etc jusqu'au dernier bloc de la chaîne.

Ceci n'est pas suffisant pour garantir une sécurité car dans ce sens le calcul des Hash reste toujours faisable. C'est alors qu'intervient une autre composante importante qu'on appelle "protocole de consensus". Différents types de protocoles existent selon le type de système que l'on souhaite mettre en place.

Les protocoles de consensus

Nous n'allons pas détailler ici tous les protocoles existant mais nous allons nous intéresser à deux exemples bien précis l'un pour sa popularité étant donné son usage dans le réseau bitcoin et l'autre de par son usage dans le framework Hyperledger sur lequel nous allons baser notre travail.

1- Preuve de Travail : (Proof of work)
Preuve de travail

C'est un protocole basé sur l'asymétrie du coût de calcul : le travail doit être difficilement réalisable, mais facilement vérifiable. Une implémentation de ce protocole peut être d'ajouter un champs dans le bloc "nonce" qui serait juste un chiffre dont le rôle est de faire varier le hash du bloc construit précédemment. D'une autre part on spécifie un critère pour le protocole par exemple :"Le hash après le calcul de la preuve de travail doit commencer par six '0' successifs." Comme les fonctions de hash ne sont pas réversibles, la seule façon d y arriver est de calculer le Hash du bloc pour chaque valeur du "nonce" jusqu'à ce que le critère soit satisfait. Cette tache est très demandeuse en terme de puissance de calcul. Un fois que le critère est satisfait le bloc est validé par le protocol qui calcule le hash du bloc et le compare à la preuve de travail. S'il correspond, le bloc est ajouté à la chaîne. Pour comprendre le niveau de sécurité de cette solution, essayons de voir ce qu'il faut faire pour réussir à la contourner. Supposons qu'un nœud malveillant décide de modifier un bloc (n) pour quelque raison que ce soit. En faisant cela, il devra refaire la preuve de travail pour le bloc (n) puis recalculer le champ "Prev hash" dans le (n+1) puis sa preuve de travail et ainsi de suite pour le (n+2),(n+3)...etc ce qui s'avère être une tâche vorace en terme de puissance de calcul. Même s'il y arrive, il doit continuer à valider les nouveaux blocs (calculer la preuve de travail) pour maintenir la chaîne altérée qu'il vient de créer car le protocole est fait de telle sorte à considérer la chaîne la plus longue comme étant la chaîne de référence. Ceci donc nous amène à considérer les limites de cette solution:

  • Si une entité malveillante possède 51% de la puissance de calcul du réseau elle pourra donc imposer sa version de la chaîne ce qui implique que le réseau doit être suffisamment grand pour que ça ne soit pas pratiquement possible qu'une entité puisse s'accaparer autant de puissance.
  • Cet algorithme de consensus est vorace en énergie.

Conclusion: cet algorithme initial de consensus est certes très intéressant d'un point de vue sécurité sous resserve de certaines conditions mais ne correspond pas à tout type d'application.

Framework Hyperledger

  • Nourrir le concept et raconter un bon scénario d'usage.
  • Le stockage ne nuit-il pas au peer-to-peer?
  • Spécifier de façon clair les communications entre nœuds. Qui peut communiquer avec qui.

Préparation du projet

Cahier des charges

Choix techniques : matériel et logiciel

Logiciel

Les spécificités du projet et l'étude initiale ont conduit au choix du framework Hyperledger pour la réalisation du prototype. Les outils de développement disponible dans ce framework sont open source et supportés par la Linux Foundation. Cette plateforme offre aussi un choix assez varié pour les langages de développement. Dans notre cas et affin de s'assurer d'un bonne compatibilité ainsi que pour bénéficier d'une documentation assez riche, nous optons pour une implémentation sur "node.js" en "javaScript".


Matériel

Le projet est essentiellement software donc le matériel requis est:

  • Une Raspberry Pi 3 avec Wifi inclus (ou Pi 2 avec le Dongle Wifi)

Liste des tâches à effectuer

Calendrier prévisionnel

Réalisation du Projet

Feuille d'heures

Tâche Prélude Heures S1 Heures S2 Heures S3 Heures S4 Heures S5 Heures S6 Heures S7 Heures S8 Heures S9 Heures S10 Total
Analyse du projet 0


Prologue

Semaine 1

Semaine 2

Documents Rendus