From f3c0e874a11fc12db7e258bff73502368cc6a92d Mon Sep 17 00:00:00 2001 From: librelois <elois@ifee.fr> Date: Mon, 29 Jan 2018 15:43:02 +0100 Subject: [PATCH 1/6] add toile-de-confiance.md --- content/pages/wiki/toile-de-confiance.md | 278 +++++++++++++++++++++++ 1 file changed, 278 insertions(+) create mode 100644 content/pages/wiki/toile-de-confiance.md diff --git a/content/pages/wiki/toile-de-confiance.md b/content/pages/wiki/toile-de-confiance.md new file mode 100644 index 0000000..ed8ecda --- /dev/null +++ b/content/pages/wiki/toile-de-confiance.md @@ -0,0 +1,278 @@ +Title: La toile de confiance en détail +Order: 9 +Date: 2017-07-12 +Slug: toile-de-confiance +Authors: librelois + +L'Objet de cet article est de détailler le fonctionnement des différents paramètres d'une toile de confiance duniter ainsi que d'expliquer comment on été choisies les valeurs de ses paramètres dans le cas de la monnaie Ğ1. + +Aucune connaissance particulière n'est requise pour comprendre ce qui suit, car je vais à chaque fois bien définir toutes les notions abordés et tout les termes utilisés :) +Cependant nous irons assez loin, nous rentrerons nottament dans le détail du protocole duniter (uniquement sur les parties toile de confiance bien sur) ainsi que dans des aspects de théorie des graphes car cela me semble essentiel pour vraiment comprendre tout les rouages d'une toile de confiance duniter. +Rassurez vous, nous allons y aller progressivement, nous commencerons par une vision d'ensemble pusi nosu détaillerons graduellement :) + +## Prérequis +Avant de lire cet article, il est vivement recommendé d'étudier la [licence Ğ1](https://duniter.org/fr/files/licence_g1.txt) et de lire les pages suivantes : +* [Devenir membre de la toile de confiance Ğ1](../devenir-membre) +* [Certifier de nouveaux membres](../certifier-de-nouveaux-membres) +* [Question Fréquentes sur la toile de confiance](../faq) + +## Pourquoi à t'on besoin d'une toile de confiance + +Nous avons besoin d'une toile de confiance pour répondre à 2 objectifs : +1. S'assurer que chaque être humain membre de la monnaie co-créer bien le même nombre de Dividende Universel par intervalle de création (Dans le cas de la Ğ1 cet intervalle vaut `86400` (=1 jour exprimé en secondes), c'est le paramètre monétaire* `dt`). +2. Identifier les calculateurs de block pour leur affecter une difficulté personnalisée. Cela est nécessaire afin d'éviter que le mécanisme de [preuve de travail](../duniter/preuve-de-travail) ne permette une centralisation du support de la monnaie (la blockchain) comme c'est hélas le cas dans de nombreuses crypto-monnaies non-libres. + +> Attend c'est quoi un "paramètre monétaire" ? + +Chaque monnaie duniter possède sa propre blockchain au sein de laquelle sont définis ses propres paramètres monétaires (dans le bloc zéro), il s'agit d'un ensemble de "curseurs" qu'il faut ajuster en fonction des objectifs visés. A l'heure ou j'écris ces lignes le protocole duniter (noté DUP) comporte 21 paramètres monétaires dont 10 concernent la toile de confiance ! +Nous décrirons en détail les 10 paramètres qui concernent la toile de confiance, nous n'aborderons pas les autres. +Sachez simplement que dans le cas de la monnaie Ğ1 le DU est créer toutes les 24h (86400secondes) mais que cet intervalle de temps régit par le paramètre `dt` peut très bien etre fixée a d'autres valeurs d'autres monnaies. + +Nous ne traiterons pas ici le 2ème objectif relatif a la preuve de travail car ce n'est pas l'objet de cet article, la seule chose a comprendre c'est que la toile de confiance nous permet **d'identifier** les membres qui calculent des blocks, et cette identification nous permet d'imposer une rotation des membres calculateurs, ce ne serait pas possible sans système d'identification. Cette rotation des membres calculateurs est essentielle, sans elle un membre très riche pourrait investir dans des fermes de calcul géante pour prendre le controle de la blockchain et paraliser toute la communauté ! + +Revennons donc au 1er objectif, s'assurer que chaque humain n'est qu'un seul compte membre. +En pratique, le risque zéro n'existe pas, notre objectif n'est donc pas de concevoir une toile de confiance au sein de laquelle la fraude serait impossible (ce qui est de toute manière impossible). +Voici donc une reformulation plus réaliste en 4 sous-objectifs : +1. Rendre l’acte de certification suffisamment lourd pour obliger les membres à un minimum de vigilance. +2. Rendre la fraude suffisamment difficile pour qu'elle soit marginale. +3. Éviter que les éventuelles attaques sybil est un impact significatif sur la monnaie. (_que les faux DU créer est un poid négligeable par rapport a la masse monétaire légitime._) +4. Rendre la croissance de régions sybil suffisamment lente pour que la communauté est le temps de +réagir. + +> **Attend, une attaque quoi ?** + +Une [**attaque sybil**](https://fr.wikipedia.org/wiki/Attaque_Sybil), c'est le nom que l'on donne à une attaque d'un système de réputation par la création de fausses identités. +Une toile de confiance est en cas particulier de [**système de réputation**](https://en.wikipedia.org/wiki/Reputation_system). + +Il y a beaucoup de stratégies de scénarios d'attaques sybil possibles ainsi que de mobiles différents. +Notre objectif est que la toile de confiance nous prémunisse des attaques sybil susceptibles de compromettre le bon fonctionnement de la monnaie ou/et du réseau informatique qui la porte. +Ce qui veut dire que les micro attaques sybil orchestrés par un petit groupe dont l'objectif est seulement un petit enrichissement personnel ne nous intéressent pas ici, ce n'est pas a la toile de confaince de nous prémunir de ces micro attaques, mais a la justice de la communauté concernée, tout comme ce n'est pas a la commune de vous prémunir d'un cambriolage chez vous, mais la commune vas vous garantir le fonctionnement des réseaux d'eau, le nettoiement de la voirie, etc +De la même façon, la toile de confiance duniter nous garantie collectivement le bon fonctionnement de notre monnaie et du réseau informatique qui la porte, et c'est déjà énorme ! + +## l'Importance de l'indépendance à tout autre systèmes d'identification + +Il nous ai très régulièrement proposé de nous baser sur des systèmes d'identification centralisés et alimentés par des monnaies non-libre dépendant d'un état ou d'un autre. +Mais nous serions alors dépendant de ces systèmes d'identification centralisés pour le bon fonctionnement de notre toile de confiance, ça n'a pas de sens. +De plus, les membres d'une monnaie libre peuvent être de n'importe quelle nationalité ou culture, nous perdrions cette universalité en dépendant d'un système d'identification d'un état ou d'un autre, en plus cela exclurait les sans-papier et les apatrides. +Il est essentiel pour nous de ne dépendre d'aucun état ni d'aucune institution. Nous ne dépendons que du réseau internet, et encore, il existe d'autres réseaux, si internet vennait a s'étteindre les humains membres d'une monnaies libres pourrait très bien créer leur propre réseau d'information, c'est déjà ce que font certaines associations en créant leurs propres bout de réseau, donc c'est possible. + +## Quelques bases en théorie des graphes + +### un peu de vocabulaire + +graphe : Ensemble de point(nommé sommets) reliées entre eux par des flèches (nommés arcs). + +graphe simple : graphe sans boucle (arc reliant un sommet a lui-même) et sans arcs superposés (plusieurs arcs reliant le même couple de sommets dans le même sens). + +graphe orientés : graphe ou les arcs ont un sens, l'arc A->B est donc différent de l'arc B->A. + +extrémité initiale et finale d'un arc : l'arc A->B à pour extrémité initiale A et pour extrémité finale B. + +sommet isolé : sommet n'étant lié a aucun arc. + +degré d'un sommet : nombre d'arc reliant ce somment (dans les deux sens). + +demi-degré extérieur d'un sommet A : nombre d'arc ayant pour extrémité initiale le sommet A + +demi-degré intérieur d'un sommet A : nombre d'arc ayant pour extrémité finale du sommet A + +chemin : trajet qu'il faut suivre pour se rendre d'un sommet A à un sommet B en respectant le sens des arcs. Le nombre d'arc traversés est la longueur du chemin. + +### définition d'une toile de confiance duniter + +Les toiles de confiance duniter (une par monnaie) sont des graphes simples orientés et sans sommets isolés. +Les sommets en sont les membres et les arcs les certifications. + +Pourquoi orientés ? +Certifier est un acte personnel qui n'engage que l'émetteur de la certification, la confiance qu'il accorde au receveur n'est pas forcément réciproque dans tout les cas (elle l'est souvent), mais on peut pas imposer au receveur de faire confiance a l'emetteur. + +De plus, tout les sommets sont des identités membres ou ayant déjà été membres par le passé, les sommets correspondant aux anciens membres sont dans un état particulier dit "désactivé". Les sommets désactivés ne peuvent plus émettrent ou recevoirs de nouvelles certifications, mais les certifications qu'ils ont émis et reçus avant de perdre leur statut de membre restent actives sur les autres membres jusqu'a leur date d'expiration dans le but d'éviter un éffondrement de la toile en cascade. Si ces anciens membres ne redeviennent pas membres alors les certifications qu'ils avaient émis et reçus finiront par expirés, et les sommets "désactivés" en question finiront donc par devenir des sommets isolés. + +Pour finir sur cet histoire d'ancien membre, au bout d'un certain délai qui dépend d'un paramètre monétaire le sommet désactivé est supprimé et l'identité associée passe à l'état révoquée, c'est a dire que cette identité ne pourra plus jamais redevenir membre. l'Humain qui possédais cette identité reste toutefois libre de redemander son adhésion dans la toile sous une nouvelle identité :) + +> Qu'entend tu par identité ? + +Une identité c'est un groupe de 3 informations : une clé publique, un nom, et un blockstamp*. +Un blockstamp c'est une référence a un block précis d'une blockchain ce qui permet de dater le moment auquel l'identité a été créée, et de relier l'identité a une blockchain particulière, donc a une monnauie particulière (car chaque monnaie a sa propre blockchain). + +Une identité peut etre dans 5 états différents : en attente*, membre, ancien membre, révoqué ou exclu. +Nous reviendrons plus en détail sur chacun de ses états. + +Résumons tout cela avec un exemple : + + A -> B -> C + | + \--> D + + Si pour une raison x ou y A perd son statut de membre alors la toile s'éffondre et tout les autres membres perdent aussi leur statut de membre en cascade. pour éviter cela, la certification A->B restera valide jusqu'à sa date d'expiration, laissant a B le temps de ce faire certifier par C ou D par exemple. + +L'absence de sommet isolé implique également que lorsque qu'un nouveau membre est ajouté a la toile de confiance il faut ajouter en même temps (c'est à dire dans le même bloc) l'ensemble des certifications qui lui permette devenir membre. +C'est pourquoi nous avons besoin d'un espace de stockage intermédiaire qui contient les identités **en attente*** de devenir membre ainsi que les certifications émises par des membres envers ces identités, c'est espace c'est la fameuse "piscine" des noeuds duniter (que l'on aurait aussi pu nommer "bac a sable" puisque dans le code de duniter c'est le terme `sandbox` qui est utilisé). Attention ces "piscine" contiennent également d'autres types de documents qui ne sont pas mentionnés ici. + +## Définition des règles d'une toile de confiance duniter + + Les toiles de confiance duniter (une par monnaie) sont régies par 8 règles présentées ci-après. +L'application de ses règles dépendent de 11 paramètres variables d'une monnaie à l'autre, la valeur de 10 d'entre eux sont fixés dans le block zéro, le 11ème paramètre `msPeriod` est en dur dans le code car il a été ajouté après l'écriture du bloc zéro de la Ğ1. +Cette partie ne présente que les définitions des règles, les raisons d'être de ces règles sont présentés dans le cadre de l'historicité de leur apparition dans la partie "Origine des règles et cas de la Ğ1". + +### 1. Règle de distance et Membres Référents + + paramètres : **StepMax** et **xPercent** + + Ces deux paramètres sont très fortement liés et définissent ensemble une seule et même règle : la règle de distance. + Pour définir la règle de distance, nous devons au préalable définir ce qu'est un membre référent : + +> **Membre référent** : un membre A est référent si et seulement si ses deux demi-degrés sont supérieurs ou égaux à `CEIl(N^(1/stepMax))` où N est le nombre total de membres.** + +Nous pouvons maintenant définir la règle de distance : + +> **Règle de distance** : un membre A respecte la règle de distance si et seulement si pour plus de xPercent % des membres référents R il existe un chemin de R vers A d'une longueur inférieure ou égale à `stepMax`.** + +La notion de membre référent ne sert qu'a l'application de la règle de distance, les membres référents n'ont aucun privilèges sur les membres non-référents. +Dans un toile aboutie, c'est à dire dans une toile ou chaque membre a certifier tout les membres qu'il est en mesure de légitimement certifier, tout les membres devraient êtres référents, mais de part la croissance progressive de la toile d'une part et le remplacement générationnel d'autre part, il existe a tout instant t des membres qui n'ont pas encore certifier tout les membres qu'il sont en mesure de légitimement certifier, ces membres là serait bloquants s'il était pris en compte dans la règle de distance, et la toile de confiance ne pourrait jamais acceuillir de nouveaux membres. (Vous pouvez le visualiser sur la page "qualité toile" de currency-monit en cochant l'option "si le concept de membre référent n'existait pas"). + +> **Quand s'applique la règle de distance ?** + +la vérification de la règle de distance étant couteuse en calcul, elle ne s'applique que lors de l'obtention et du renouvellement du statut de membre. (Voir partie "renouvellement du statut de membre"). +_Cas particulier : la règle de distance ne s'applique pas au block zéro (écriture de la toile initiale)._ + +### 2. Règle du nombre minimal de certifications reçus + + paramètre : **sigQty** + +C'est la règle la plus simple, elle stipule que tout membre doit a tout moment (comprendre a tout bloc) être le destinataire d'au moins `sigQty` certifications actives. +Si ne serait-ce que pour le temps d'un seul bloc, un membre A se retrouve avec moins de `sigQty` certifications actives reçus, alors il perd le statut de membre a ce bloc là , il doit alors publier une demande de renouvellement. + +### 3. Règle de renouvellement + + paramètres : **msValidity**, **msPeriod** et **msWindow** + +L'obtention du statut de membre n'est pas un acquis pour la vie, mais pour une durée de `msValidity` secondes. + +Tout membre (ou ancien membre non révoqué et non exclu définitivement) peut a tout moment émettre une demande de renouvellement a condition que son dernier renouvellement date de plus de `msPeriod` secondes (Lorsque qu'un membre ne s'est jamais renouveller la date de dernier renouvellement correspond a la date d'obtention du statut de membre). +Lorsqu'une demande de renouvellement est émise, elle est stockée en "piscine" pour une durée maximale de `msWindow` secondes, puis elle sera inscrite en blockchain dés que le membre en question respectera la règle de distance **et** la règle sigQty (s'il les respectent déjà , dés qu'un noeud ayant reçu la demande de renouvellement trouve un block). + +Tout membre dont le dernier renouvellement date de plus de `msValidity` secondes perd le statut de membre au premier bloc ou cette durée est atteinte. Dans ce cas, l'ancien membre dispose a nouveau d'une durée de `msValidity` secondes pour redevenir membre par cette même procédure de renouvellement. Passé ce délai, donc `2*msValidity` après le dernier renouvellement, l'ancien membre est exclu définitivement et ne pourra plus jamais redevenir membre avec ce compte. S'il souhaite redevenir membre il devra se créer un nouveau compte à partir de zéro. + +### 4. Règle d'expiration des certifications + + paramètre : **sigValidity** + +Toute certification inscrite en blockchain expire **sigValidity** secondes après son émission. + +/!\ l'émission et l'écriture d'une certification sont des instants différents. Lorsque membre A émet une certifiation à un instant t1, elle est d'abord stockée en piscine à cet instant t1, puis sera écrite en blockchain a un instant t2, dés que les règles de la toile de permette, il peut y avoir plusieurs semaines d'écart entre t1 et t2 !! + +### 5. Règle du stock limité de certifications actives + + paramètre : **sigStock** + +Par certification active nous entendons certification inscrite en blockchain et qui n'a pas encore expirée. + +A tout bloc et pour tout membre, l'ensemble des certifications émises par ce membre et actives doit être inférieur ou égal à sigStock. Lorsque ce quota est atteint, le membre en question devra attendre qu'une certification active dont il est l'émétteur expire pour pouvoir en écrire une autre. + +### 6. Règle de l'intervalle d'écriture entre deux certifications + + paramètre : **sigPeriod** + +Lorsqu'une certification émise par un membre A est écrite en blockchain, aucune autre certification émise par A ne pourra être écrite en blockchain avant `sigPeriod` secondes. + +### 7. Règle de la fenêtre d'écriture d'une certification + + paramètre : **sigWindow** + +Lorsqu'une certification est émise par un membre A, elle restera stockée en "piscine" pour au plus `sigWindow` secondes. Si la certification en question n'a toujours pas été écrite en blockchain passé ce délai, elle est purement supprimée. + +### 8. Règle de la fenêtre d'écriture d'une identité + + paramètre : **idtyWindow** + +Lorsqu'une identitée est émise, elle restera stockée en "piscine" pour au plus `idtyWindow` secondes. Si l'identitée en question n'a toujours pas été écrite en blockchain passé ce délai, elle est purement supprimée. + +## Le cas particulier de la toile initiale au block zéro + + L'application des règles présentées ne rend l'expansion d'une toile possible qu'a partir d'une toile pré-éxistante, il y a donc un cas particulier ou certaines règles ne s'appliquent pas : l'écriture du block zéro. + +Seules les règles 2 et 5 s'appliquent lors de l'écriture du block zéro. + +Dans la pratique, c'est l'humain qui génère le bloc zéro qui choisi manuellement qu'elles identités il écrira dans le block zéro, mais toutes les identités et certifications écrites dans le block zéro doivent respecter les règles 2 et 5 et de plus le block zéro doit être signé avec la clé privée d'une des identités écrites. +Dés lors qu'un bloc zéro correct a été généré, toute identité inscrite dans ce block zéro peut soumettre le block suivant, de fait l'auteur du block zéro n'a donc plus la main. + +### 1. Règle de distance et Membres Référents + +## Origine des règles et cas de la Ğ1 + +### 1. Distance et taille limite + +La règle de distance à pour objectif de limiter la taille maximale d'une région sybil ainsi que la taille maximale de la communauté monétaire. +`xpercent` permet d'éviter une minorité de blocage (membres trop peu actifs). + +![zone sybil]({filename}/images/wiki/toile-de-confiance/zone-sybil.png) + +Les régions sybil sont isolés du reste du graphe, car les comptes sybil ne recevrons de certifications que de la part d'autres comptes sybil ou de la part des auteurs de l'attaque. Ainsi, tout plus court chemins entre un membre légitime et un compte, sybil passe forcément par un auteur de l'attaque. La limite de la profondeur de la région sybil dépend donc de la distance max entre des auteurs de l'attaque et les xpercent% membres référents les plus proches, cette distance caractérisqtique est nommée `stepAttackers`. +La taille maximale d'une région sybil crée par sigQty membres malveillants dépend du levier L=sigQty/sigStock : + + taille max région sybil = (sigStock-sigQty)*(1-L^(stepMax-stepAttackers))/(1-L) + +Et de même la taille maximale théorique de la toile de confiance est : + + WoTmax = (sigStock)*L^(stepMax-1) + +Sauf que dans les fait, la plupart des membres ne consommeront pas tout leur stock de certifications. De nombreuses études sociologiques montrent qu'un humain connait en moyenne 50 personnes, remplaçons donc sigStock par 50 : + + WoTmoy= (50)*(50/sigQty)^(stepMax-1) + +Notre toile de confiance peut donc être dimensionnée avec seulement 2 paramètres, notre objectif avec la Ğ1 est de créer une zone économique libre de l'ordre du million d'utilisateurs, voyons donc quelles combinaisons du couple (sigQty;stepMax) permettent d'attendre le million : + +![graphe WoTmoy en fonction de sigQty et stepMax]({filename}/images/wiki/toile-de-confiance/graphe-WoTmoy.png) + +La taille max d'une région sybil croît linéairement par rapport a sigQty mais exponentionellement par rapport à stepMax, donc pour avoir une toile la plus solide possible nous devons minimiser la valeur de stepMax. le graphe ci-dessus nous montre que la valeur de stepMax la plus faible pêrmettant d'attendre le million de membres est 5. +Pour la valeur de sigQty nous avons le choix entre 4 pour atteindre 1,2million ou 5 pour atteindre 1/2 million. +Sachant que la formule WoTmoy nous donne un ordre de grandeur et qu'elle considère tout les comtpes comme référents (ce qui n'est pas le cas en réalité), la taille maximale réelle que nous pourrons atteindre est certainement plus élevée, 1/2 millon est donc suffisant d'autant que plus sigQty est faible plus il est facile de lancer une attaque sybil (c'est plus simple d'être 4 complices que d'être 5). Par mesure de sécurité nous avons donc choisi 5, ce qui nous donne déjà : + +stepMax = 5 +sigQty = 5 +sigStock >= 50 + +la taille max d'une région sybil est donc : (sigStock-sigQty)*(1-(sigStock/5)^(5-stepAttackers))/(1-(sigStock/5)) + +avec sigStock = 50 cela fait une région sybil de :45*(1-10^(5-stepAttackers))/(-9) + +Une bonne façon de nous protéger est donc de maximiser stepAttackers. C'est pour cela que nous avons fait en sorte que dans la toile initiale Ğ1 beaucoup de membres référents soit déjà à 4 de distance les un des autres. + +Autre moyen de nous prémunir d'une attaque sybil, si elle était suffisamment lente pour que nous ayons le temps de la détecter alors les membres référentes pourraits tendre volontairement la toile pour stopper l'élargissement de la zone sybil le temps que les auteurs de l'attaque soit déchut de leur statut de membre par non renouvellement des certifications légitimes dont ils avaient bénéficier pour devenir membre. +Le problème c'est qu'une attaque sybil peut etre propagée par des comptes robots qui ce certifieront très vite et de manière optimale, comment donc pourrions nous les ralentir de force ? +En imposant un délai minimal entre deux certifications ! + +### 2. une question de temps + + Nous venons de voir que pour ralentir de déploiement d'une attaque sybil afin d'avoir le temps de la détecter et de prendre des mesures, nous pourrions imposer un délai minimal entre deux écritures de certifications par le même compte. c'est la raison pour laquelle nous avons créer le paramètre sigPeriod. + +Voici un graphe d'évolution de la taille d'une région sybil en fonction de sigPeriod et de stepAttackers : + +f[stepAttackers](t) = {p=0, t + p=1, t(sigStock/5) + ...p=n, t(sigStock/5)^n} + +![graphe taille sybil en fonction de sigPeriod et stepAttackers]({filename}/images/wiki/toile-de-confiance/graphe-sigPeriod.png) + +### 3. Une confiance éternelle ? (sigValidity, msValidity) + +### 4. Éviter que les piscines ne deviennent des dépots sédimentaires (idtyWindow, sigWindow, msWindow) + +Il faut nettoyer régulièrement les piscines pour éviter qu'elles n'atteignent des tailles astronomiques et pour garantir que même les petites machines peu puissantes puissent éxécuter un noeud duniter. +Pour ce faire il faut que les identités et certifications en attentes restent le moins longtemps possible en piscine, elle doivent cependant y rester suffisamment longtemps pour avoir une chance raisonnable d'être inscrites en blockchain. + +### 5. Éviter de limiter les membres connaissant beaucoup de monde (sigStock) + +### 6. Se prémunir des minorités de blocage (xpercent) + +### 7. L'ajout de msPeriod, une protection anti-spam + +Ce paramètre un peu a part, rajouter après le bloc zéro, ne sert pas a réguler la toiel de confiance mais a proteger le réseau informatique qui porte la monnaie contre les atatque de type spam. +En effet, des membres malveillants qui souhaitent nuire au bon fonctionnement de la monnaie pourrait demander leur renouvellement a chaque block (toute les 5 min), ou pire encore, envoyer des centaines de requete de renouvellement par minute pour déborder les noeuds duniter. En l'absence de limitation, les noeuds duniter sont sencés traiter toutes vos requetes de renouvellement, même si vous vous êts renouvellés il y a 5min ! +Pour nous prémunir de cette possibilité d'attaque nous avons ajouté le paramètre `msPeriod`. +Par souci de simplicité, nous avons choisi de lui attribuer la même valeurs qu'aux paramètres idtyWindow, sigWindow et msWindow. + +## Mesure + +* [Étude de l'évolution de la toile Ğ1](#) _(page encore inexistante)_ -- GitLab From eab63d30debe7b0b9fce0a395988de09c7f19da6 Mon Sep 17 00:00:00 2001 From: librelois <elois@ifee.fr> Date: Tue, 30 Jan 2018 01:16:40 +0100 Subject: [PATCH 2/6] typos --- content/pages/wiki/toile-de-confiance.md | 56 ++++++++++++------------ 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/content/pages/wiki/toile-de-confiance.md b/content/pages/wiki/toile-de-confiance.md index ed8ecda..34d9e39 100644 --- a/content/pages/wiki/toile-de-confiance.md +++ b/content/pages/wiki/toile-de-confiance.md @@ -8,7 +8,7 @@ L'Objet de cet article est de détailler le fonctionnement des différents param Aucune connaissance particulière n'est requise pour comprendre ce qui suit, car je vais à chaque fois bien définir toutes les notions abordés et tout les termes utilisés :) Cependant nous irons assez loin, nous rentrerons nottament dans le détail du protocole duniter (uniquement sur les parties toile de confiance bien sur) ainsi que dans des aspects de théorie des graphes car cela me semble essentiel pour vraiment comprendre tout les rouages d'une toile de confiance duniter. -Rassurez vous, nous allons y aller progressivement, nous commencerons par une vision d'ensemble pusi nosu détaillerons graduellement :) +Rassurez vous, nous allons y aller progressivement, nous commencerons par une vision d'ensemble puis nous détaillerons graduellement :) ## Prérequis Avant de lire cet article, il est vivement recommendé d'étudier la [licence Ğ1](https://duniter.org/fr/files/licence_g1.txt) et de lire les pages suivantes : @@ -26,9 +26,9 @@ Nous avons besoin d'une toile de confiance pour répondre à 2 objectifs : Chaque monnaie duniter possède sa propre blockchain au sein de laquelle sont définis ses propres paramètres monétaires (dans le bloc zéro), il s'agit d'un ensemble de "curseurs" qu'il faut ajuster en fonction des objectifs visés. A l'heure ou j'écris ces lignes le protocole duniter (noté DUP) comporte 21 paramètres monétaires dont 10 concernent la toile de confiance ! Nous décrirons en détail les 10 paramètres qui concernent la toile de confiance, nous n'aborderons pas les autres. -Sachez simplement que dans le cas de la monnaie Ğ1 le DU est créer toutes les 24h (86400secondes) mais que cet intervalle de temps régit par le paramètre `dt` peut très bien etre fixée a d'autres valeurs d'autres monnaies. +Sachez simplement que dans le cas de la monnaie Ğ1 le DU est créer toutes les 24h (86400secondes) mais que cet intervalle de temps régit par le paramètre `dt` peut très bien etre fixée a d'autres valeurs pour d'autres monnaies. -Nous ne traiterons pas ici le 2ème objectif relatif a la preuve de travail car ce n'est pas l'objet de cet article, la seule chose a comprendre c'est que la toile de confiance nous permet **d'identifier** les membres qui calculent des blocks, et cette identification nous permet d'imposer une rotation des membres calculateurs, ce ne serait pas possible sans système d'identification. Cette rotation des membres calculateurs est essentielle, sans elle un membre très riche pourrait investir dans des fermes de calcul géante pour prendre le controle de la blockchain et paraliser toute la communauté ! +Nous ne traiterons pas ici le 2ème objectif relatif a la preuve de travail car ce n'est pas l'objet de cet article, la seule chose a comprendre c'est que la toile de confiance nous permet **d'identifier** les membres qui calculent des blocks, et cette identification nous permet d'imposer une rotation des membres calculateurs, ce ne serait pas possible sans système d'identification. Cette rotation des membres calculateurs est essentielle, sans elle un membre très riche pourrait investir dans des fermes de calcul géantes pour prendre le controle de la blockchain et paraliser toute la communauté ! Revennons donc au 1er objectif, s'assurer que chaque humain n'est qu'un seul compte membre. En pratique, le risque zéro n'existe pas, notre objectif n'est donc pas de concevoir une toile de confiance au sein de laquelle la fraude serait impossible (ce qui est de toute manière impossible). @@ -42,11 +42,11 @@ réagir. > **Attend, une attaque quoi ?** Une [**attaque sybil**](https://fr.wikipedia.org/wiki/Attaque_Sybil), c'est le nom que l'on donne à une attaque d'un système de réputation par la création de fausses identités. -Une toile de confiance est en cas particulier de [**système de réputation**](https://en.wikipedia.org/wiki/Reputation_system). +Une toile de confiance est un cas particulier de [**système de réputation**](https://en.wikipedia.org/wiki/Reputation_system). Il y a beaucoup de stratégies de scénarios d'attaques sybil possibles ainsi que de mobiles différents. Notre objectif est que la toile de confiance nous prémunisse des attaques sybil susceptibles de compromettre le bon fonctionnement de la monnaie ou/et du réseau informatique qui la porte. -Ce qui veut dire que les micro attaques sybil orchestrés par un petit groupe dont l'objectif est seulement un petit enrichissement personnel ne nous intéressent pas ici, ce n'est pas a la toile de confaince de nous prémunir de ces micro attaques, mais a la justice de la communauté concernée, tout comme ce n'est pas a la commune de vous prémunir d'un cambriolage chez vous, mais la commune vas vous garantir le fonctionnement des réseaux d'eau, le nettoiement de la voirie, etc +Ce qui veut dire que les micro attaques sybil orchestrés par un petit groupe dont l'objectif est seulement un petit enrichissement personnel ne nous intéressent pas ici, ce n'est pas a la toile de confiance de nous prémunir de ces micro attaques, mais a la justice de la communauté concernée, tout comme ce n'est pas a la commune de vous prémunir d'un cambriolage chez vous, mais la commune vas vous garantir le fonctionnement des réseaux d'eau, le nettoiement de la voirie, etc De la même façon, la toile de confiance duniter nous garantie collectivement le bon fonctionnement de notre monnaie et du réseau informatique qui la porte, et c'est déjà énorme ! ## l'Importance de l'indépendance à tout autre systèmes d'identification @@ -60,7 +60,7 @@ Il est essentiel pour nous de ne dépendre d'aucun état ni d'aucune institution ### un peu de vocabulaire -graphe : Ensemble de point(nommé sommets) reliées entre eux par des flèches (nommés arcs). +graphe : Ensemble de points (nommés sommets) reliées entre eux par des flèches (nommées arcs). graphe simple : graphe sans boucle (arc reliant un sommet a lui-même) et sans arcs superposés (plusieurs arcs reliant le même couple de sommets dans le même sens). @@ -74,7 +74,7 @@ degré d'un sommet : nombre d'arc reliant ce somment (dans les deux sens). demi-degré extérieur d'un sommet A : nombre d'arc ayant pour extrémité initiale le sommet A -demi-degré intérieur d'un sommet A : nombre d'arc ayant pour extrémité finale du sommet A +demi-degré intérieur d'un sommet A : nombre d'arc ayant pour extrémité finale le sommet A chemin : trajet qu'il faut suivre pour se rendre d'un sommet A à un sommet B en respectant le sens des arcs. Le nombre d'arc traversés est la longueur du chemin. @@ -93,9 +93,9 @@ Pour finir sur cet histoire d'ancien membre, au bout d'un certain délai qui dé > Qu'entend tu par identité ? Une identité c'est un groupe de 3 informations : une clé publique, un nom, et un blockstamp*. -Un blockstamp c'est une référence a un block précis d'une blockchain ce qui permet de dater le moment auquel l'identité a été créée, et de relier l'identité a une blockchain particulière, donc a une monnauie particulière (car chaque monnaie a sa propre blockchain). +Un blockstamp c'est une référence a un block précis d'une blockchain ce qui permet de dater le moment auquel l'identité a été créée, et de relier l'identité a une blockchain particulière, donc a une monnaie particulière (car chaque monnaie a sa propre blockchain). -Une identité peut etre dans 5 états différents : en attente*, membre, ancien membre, révoqué ou exclu. +Une identité peut etre dans 5 états différents : en attente*, membre, ancien membre, révoquée ou exclue. Nous reviendrons plus en détail sur chacun de ses états. Résumons tout cela avec un exemple : @@ -133,7 +133,7 @@ Dans un toile aboutie, c'est à dire dans une toile ou chaque membre a certifier > **Quand s'applique la règle de distance ?** -la vérification de la règle de distance étant couteuse en calcul, elle ne s'applique que lors de l'obtention et du renouvellement du statut de membre. (Voir partie "renouvellement du statut de membre"). +La vérification de la règle de distance étant couteuse en calcul, elle ne s'applique que lors de l'obtention et du renouvellement du statut de membre. (Voir partie "renouvellement du statut de membre"). _Cas particulier : la règle de distance ne s'applique pas au block zéro (écriture de la toile initiale)._ ### 2. Règle du nombre minimal de certifications reçus @@ -141,16 +141,16 @@ _Cas particulier : la règle de distance ne s'applique pas au block zéro (écri paramètre : **sigQty** C'est la règle la plus simple, elle stipule que tout membre doit a tout moment (comprendre a tout bloc) être le destinataire d'au moins `sigQty` certifications actives. -Si ne serait-ce que pour le temps d'un seul bloc, un membre A se retrouve avec moins de `sigQty` certifications actives reçus, alors il perd le statut de membre a ce bloc là , il doit alors publier une demande de renouvellement. +Si ne serait-ce que pour le temps d'un seul bloc, un membre A se retrouve avec moins de `sigQty` certifications actives reçus, alors il perd le statut de membre a ce bloc là , il doit alors publier une demande de renouvellement de son adhésion. -### 3. Règle de renouvellement +### 3. Règle de renouvellement de l'adhésion paramètres : **msValidity**, **msPeriod** et **msWindow** L'obtention du statut de membre n'est pas un acquis pour la vie, mais pour une durée de `msValidity` secondes. -Tout membre (ou ancien membre non révoqué et non exclu définitivement) peut a tout moment émettre une demande de renouvellement a condition que son dernier renouvellement date de plus de `msPeriod` secondes (Lorsque qu'un membre ne s'est jamais renouveller la date de dernier renouvellement correspond a la date d'obtention du statut de membre). -Lorsqu'une demande de renouvellement est émise, elle est stockée en "piscine" pour une durée maximale de `msWindow` secondes, puis elle sera inscrite en blockchain dés que le membre en question respectera la règle de distance **et** la règle sigQty (s'il les respectent déjà , dés qu'un noeud ayant reçu la demande de renouvellement trouve un block). +Tout membre (ou ancien membre non révoqué et non exclu définitivement) peut a tout moment émettre une demande de renouvellement de son adhésion a condition que son dernier renouvellement date de plus de `msPeriod` secondes (Lorsque qu'un membre ne s'est jamais renouveller la date de dernier renouvellement correspond a la date d'obtention du statut de membre). +Lorsqu'une demande de renouvellement d'adhésion est émise, elle est stockée en "piscine" pour une durée maximale de `msWindow` secondes, puis elle sera inscrite en blockchain dés que le membre en question respectera la règle de distance **et** la règle sigQty (s'il les respectent déjà , dés qu'un noeud ayant reçu la demande de renouvellement trouve un block). Tout membre dont le dernier renouvellement date de plus de `msValidity` secondes perd le statut de membre au premier bloc ou cette durée est atteinte. Dans ce cas, l'ancien membre dispose a nouveau d'une durée de `msValidity` secondes pour redevenir membre par cette même procédure de renouvellement. Passé ce délai, donc `2*msValidity` après le dernier renouvellement, l'ancien membre est exclu définitivement et ne pourra plus jamais redevenir membre avec ce compte. S'il souhaite redevenir membre il devra se créer un nouveau compte à partir de zéro. @@ -158,9 +158,9 @@ Tout membre dont le dernier renouvellement date de plus de `msValidity` secondes paramètre : **sigValidity** -Toute certification inscrite en blockchain expire **sigValidity** secondes après son émission. +Toute certification inscrite en blockchain expire **sigValidity** secondes après son **émission**. -/!\ l'émission et l'écriture d'une certification sont des instants différents. Lorsque membre A émet une certifiation à un instant t1, elle est d'abord stockée en piscine à cet instant t1, puis sera écrite en blockchain a un instant t2, dés que les règles de la toile de permette, il peut y avoir plusieurs semaines d'écart entre t1 et t2 !! +/!\ l'émission et l'écriture d'une certification sont des instants différents. Lorsque membre A émet une certifiation à un instant t1, elle est d'abord stockée en piscine à cet instant t1, puis sera écrite en blockchain a un instant t2, dés que les règles de la toile le permettent, il peut y avoir plusieurs semaines d'écart entre t1 et t2 !! ### 5. Règle du stock limité de certifications actives @@ -197,8 +197,6 @@ Seules les règles 2 et 5 s'appliquent lors de l'écriture du block zéro. Dans la pratique, c'est l'humain qui génère le bloc zéro qui choisi manuellement qu'elles identités il écrira dans le block zéro, mais toutes les identités et certifications écrites dans le block zéro doivent respecter les règles 2 et 5 et de plus le block zéro doit être signé avec la clé privée d'une des identités écrites. Dés lors qu'un bloc zéro correct a été généré, toute identité inscrite dans ce block zéro peut soumettre le block suivant, de fait l'auteur du block zéro n'a donc plus la main. -### 1. Règle de distance et Membres Référents - ## Origine des règles et cas de la Ğ1 ### 1. Distance et taille limite @@ -208,7 +206,7 @@ La règle de distance à pour objectif de limiter la taille maximale d'une régi ![zone sybil]({filename}/images/wiki/toile-de-confiance/zone-sybil.png) -Les régions sybil sont isolés du reste du graphe, car les comptes sybil ne recevrons de certifications que de la part d'autres comptes sybil ou de la part des auteurs de l'attaque. Ainsi, tout plus court chemins entre un membre légitime et un compte, sybil passe forcément par un auteur de l'attaque. La limite de la profondeur de la région sybil dépend donc de la distance max entre des auteurs de l'attaque et les xpercent% membres référents les plus proches, cette distance caractérisqtique est nommée `stepAttackers`. +Les régions sybil sont isolés du reste du graphe, car les comptes sybil ne recevrons de certifications que de la part d'autres comptes sybil ou de la part des auteurs de l'attaque. Ainsi, tout plus court chemins entre un membre légitime et un compte sybil passe forcément par un auteur de l'attaque. La limite de la profondeur de la région sybil dépend donc de la distance max entre les auteurs de l'attaque et les xpercent% membres référents les plus proches, cette distance caractérisqtique est nommée `stepAttackers`. La taille maximale d'une région sybil crée par sigQty membres malveillants dépend du levier L=sigQty/sigStock : taille max région sybil = (sigStock-sigQty)*(1-L^(stepMax-stepAttackers))/(1-L) @@ -233,9 +231,9 @@ stepMax = 5 sigQty = 5 sigStock >= 50 -la taille max d'une région sybil est donc : (sigStock-sigQty)*(1-(sigStock/5)^(5-stepAttackers))/(1-(sigStock/5)) +la taille max d'une région sybil est donc : `(sigStock-sigQty)*(1-(sigStock/5)^(5-stepAttackers))/(1-(sigStock/5))` -avec sigStock = 50 cela fait une région sybil de :45*(1-10^(5-stepAttackers))/(-9) +avec sigStock = 50 cela fait une région sybil de : `45*(1-10^(5-stepAttackers))/(-9)` Une bonne façon de nous protéger est donc de maximiser stepAttackers. C'est pour cela que nous avons fait en sorte que dans la toile initiale Ğ1 beaucoup de membres référents soit déjà à 4 de distance les un des autres. @@ -261,18 +259,22 @@ f[stepAttackers](t) = {p=0, t Il faut nettoyer régulièrement les piscines pour éviter qu'elles n'atteignent des tailles astronomiques et pour garantir que même les petites machines peu puissantes puissent éxécuter un noeud duniter. Pour ce faire il faut que les identités et certifications en attentes restent le moins longtemps possible en piscine, elle doivent cependant y rester suffisamment longtemps pour avoir une chance raisonnable d'être inscrites en blockchain. +Pour la Ğ1, nous avons estimer que 2 mois était un minimum pour que tout les certificateur potentiels d'une nouvelle identité aient le temps de se synchroniser. Nous voulions aussi que cette durée corresponde a un faible nombre d'unités d'une grandeur usuelle, afin d'être facilement intégrée et mémorisée par le plus grand nombre. +Typiquement, choisir 7 semaines aurait été plus compliqué a intégrer et retenir, nous voulions que les durées a connaitre reste le plus facilement intégrables et mémorisables. +1 mois nous semblait trop court, la valeur de 2 mois s'est donc imposée. Et par souci de simplicité, nous avons appliquer cette même valeur de 2 mois aux 3 paramètres idtyWindow, sigWindow et msWindow. ### 5. Éviter de limiter les membres connaissant beaucoup de monde (sigStock) +De nombreuses études sociologiques montrent qu'un humain connait en moyenne 50 personnes, mais c'est une moyenne, certains humains en connaissent beaucoup plus, d'autres beaucoup moins. +La encore, nous avons trancher par le critère "nombre facile a retenir". +Bien que l'impact de sigStock sur la taille max des régions sybil soit secondaire, il conviens tout de même de ne pas choisir un sigStock trop grand ! +150 nous semblait trop élevé, nous avons donc choisis 100. + ### 6. Se prémunir des minorités de blocage (xpercent) ### 7. L'ajout de msPeriod, une protection anti-spam -Ce paramètre un peu a part, rajouter après le bloc zéro, ne sert pas a réguler la toiel de confiance mais a proteger le réseau informatique qui porte la monnaie contre les atatque de type spam. -En effet, des membres malveillants qui souhaitent nuire au bon fonctionnement de la monnaie pourrait demander leur renouvellement a chaque block (toute les 5 min), ou pire encore, envoyer des centaines de requete de renouvellement par minute pour déborder les noeuds duniter. En l'absence de limitation, les noeuds duniter sont sencés traiter toutes vos requetes de renouvellement, même si vous vous êts renouvellés il y a 5min ! +Ce paramètre un peu a part, rajouté après le bloc zéro, ne sert pas a réguler la toile de confiance mais a proteger le réseau informatique qui porte la monnaie contre les atatque de type spam. +En effet, des membres malveillants qui souhaitent nuire au bon fonctionnement de la monnaie pourraient demander leur renouvellement a chaque block (toute les 5 min), ou pire encore, envoyer des centaines de requete de renouvellement par minute pour déborder les noeuds duniter. En l'absence de limitation, les noeuds duniter sont cencés traiter toutes vos requetes de renouvellement, même si vous vous êtes renouvellés il y a 5min ! Pour nous prémunir de cette possibilité d'attaque nous avons ajouté le paramètre `msPeriod`. Par souci de simplicité, nous avons choisi de lui attribuer la même valeurs qu'aux paramètres idtyWindow, sigWindow et msWindow. - -## Mesure - -* [Étude de l'évolution de la toile Ğ1](#) _(page encore inexistante)_ -- GitLab From 66ef6e7cb62dfb7b4ac3378417190bef06e1eb34 Mon Sep 17 00:00:00 2001 From: librelois <elois@ifee.fr> Date: Tue, 30 Jan 2018 15:14:43 +0100 Subject: [PATCH 3/6] add sigValidity & msValidity history --- content/pages/wiki/toile-de-confiance.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/content/pages/wiki/toile-de-confiance.md b/content/pages/wiki/toile-de-confiance.md index 34d9e39..b44faac 100644 --- a/content/pages/wiki/toile-de-confiance.md +++ b/content/pages/wiki/toile-de-confiance.md @@ -255,6 +255,22 @@ f[stepAttackers](t) = {p=0, t ### 3. Une confiance éternelle ? (sigValidity, msValidity) +Si toute certification restait valable at vitam eternam, cela serait problématique pour au moins 2 raisons : +D'une part il est important que les membres qui décedent cessent de créer des DU +D'autre part, il est important que les faux comptes détectet par la communauté puissent ne pas rester membre indéfiniment. + +Pour ce faire, il est nécessaire que les certifications est une durée de vie limités et qu'il faille donc renouveller sa confiance envers ses pairs régulièrement. +D'un autre coté, il ne faut pas non plus que les membres passent leur vie a renouveller leurs certifications plutot qu'a effectuer des échanges économiques. +De plus, des certifications a durée de vie trop courte rendrait l'acte de certification trop léger, il faut que l'acte de certification reste conséquent pour être pris au sérieux. +Enfin, nous souhaitons également que la durée de vie d'une certification soit une durée vraiment très très simple a retenir pour que le plus rgand nombre l'est bien en tête. + +Une fois tout ces critères pris en compte, nous hésitions entre 1 an, 2 ans ou 3 ans. +Historiquement, nous avons d'abord trancher sur les valeurs de sigPeriod et sigStock, ce qui impliquait qu'il fallait a minima 495 jours pour épuiser tout son stock de certifications, 1 an n'est donc pas possible. +3 ans nous semblait trop long, nous avons donc choisi 2 ans. + +Mais considérer qu'un mort va continuer a créer des DU dont personne ne pourra bénéficier pendant une durée pouvant aller jusqu'a 2 ans, cela nous semblait trop. C'est pourquoi nous avons opter pour une durée de vie plus faible concernant le renouvellement de l'adhésion. +Nous avons donc choisi 1 an mais nous aurions aussi pu choisir 6 mois, la valeur de **msValidity** est au final assez secondaire et pourrait facilement etre modifée dans le futur si la communauté le souhaite. + ### 4. Éviter que les piscines ne deviennent des dépots sédimentaires (idtyWindow, sigWindow, msWindow) Il faut nettoyer régulièrement les piscines pour éviter qu'elles n'atteignent des tailles astronomiques et pour garantir que même les petites machines peu puissantes puissent éxécuter un noeud duniter. -- GitLab From ffd6cd64b28b1f1915bcb9b0bdf52ce1bd587830 Mon Sep 17 00:00:00 2001 From: Moul <moul@moul.re> Date: Tue, 30 Jan 2018 20:39:13 +0100 Subject: [PATCH 4/6] =?UTF-8?q?[enh]=20proofreading.=20Better=20=C4=9E1=20?= =?UTF-8?q?license=20link.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/pages/wiki/toile-de-confiance.md | 273 +++++++++++------------ 1 file changed, 136 insertions(+), 137 deletions(-) diff --git a/content/pages/wiki/toile-de-confiance.md b/content/pages/wiki/toile-de-confiance.md index b44faac..cd0d02f 100644 --- a/content/pages/wiki/toile-de-confiance.md +++ b/content/pages/wiki/toile-de-confiance.md @@ -4,209 +4,208 @@ Date: 2017-07-12 Slug: toile-de-confiance Authors: librelois -L'Objet de cet article est de détailler le fonctionnement des différents paramètres d'une toile de confiance duniter ainsi que d'expliquer comment on été choisies les valeurs de ses paramètres dans le cas de la monnaie Ğ1. +L'objet de cet article est de détailler le fonctionnement des différents paramètres d'une toile de confiance duniter ainsi que d'expliquer comment ont été choisis les valeurs de ses paramètres dans le cas de la monnaie Ğ1. -Aucune connaissance particulière n'est requise pour comprendre ce qui suit, car je vais à chaque fois bien définir toutes les notions abordés et tout les termes utilisés :) -Cependant nous irons assez loin, nous rentrerons nottament dans le détail du protocole duniter (uniquement sur les parties toile de confiance bien sur) ainsi que dans des aspects de théorie des graphes car cela me semble essentiel pour vraiment comprendre tout les rouages d'une toile de confiance duniter. -Rassurez vous, nous allons y aller progressivement, nous commencerons par une vision d'ensemble puis nous détaillerons graduellement :) +Aucune connaissance particulière n'est requise pour comprendre ce qui suit, car je vais à chaque fois bien définir toutes les notions abordées et tous les termes utilisés :) +Cependant nous irons assez loin, nous rentrerons nottament dans le détail du protocole duniter (uniquement sur les parties toile de confiance biensûr) ainsi que dans des aspects de théorie des graphes car cela me semble essentiel pour vraiment comprendre tous les rouages d'une toile de confiance duniter. +Rassurez-vous, nous allons y aller progressivement, nous commencerons par une vision d'ensemble puis nous détaillerons graduellement :) ## Prérequis -Avant de lire cet article, il est vivement recommendé d'étudier la [licence Ğ1](https://duniter.org/fr/files/licence_g1.txt) et de lire les pages suivantes : +Avant de lire cet article, il est vivement recommendé d'étudier la [licence Ğ1](https://duniter.org/fr/wiki/licence-g1) et de lire les pages suivantes : * [Devenir membre de la toile de confiance Ğ1](../devenir-membre) * [Certifier de nouveaux membres](../certifier-de-nouveaux-membres) * [Question Fréquentes sur la toile de confiance](../faq) -## Pourquoi à t'on besoin d'une toile de confiance +## Pourquoi a-t-on besoin d’une toile de confiance ? -Nous avons besoin d'une toile de confiance pour répondre à 2 objectifs : -1. S'assurer que chaque être humain membre de la monnaie co-créer bien le même nombre de Dividende Universel par intervalle de création (Dans le cas de la Ğ1 cet intervalle vaut `86400` (=1 jour exprimé en secondes), c'est le paramètre monétaire* `dt`). -2. Identifier les calculateurs de block pour leur affecter une difficulté personnalisée. Cela est nécessaire afin d'éviter que le mécanisme de [preuve de travail](../duniter/preuve-de-travail) ne permette une centralisation du support de la monnaie (la blockchain) comme c'est hélas le cas dans de nombreuses crypto-monnaies non-libres. +Nous avons besoin d'une toile de confiance pour répondre à deux objectifs : +1. S'assurer que chaque être humain membre de la monnaie co-créer bien le même nombre de Dividendes Universel par intervalles de création (dans le cas de la Ğ1 cet intervalle est `86400` (=1 jour exprimé en secondes), c'est le paramètre monétaire* `dt`). +2. Identifier les calculateurs de blocs pour leur affecter une difficulté personnalisée. Cela est nécessaire afin d'éviter que le mécanisme de [preuve de travail](../duniter/preuve-de-travail) ne permette une centralisation du support de la monnaie (la blockchain) comme c'est hélas le cas dans de nombreuses crypto-monnaies non-libres. -> Attend c'est quoi un "paramètre monétaire" ? +> Attends c'est quoi un "paramètre monétaire" ? -Chaque monnaie duniter possède sa propre blockchain au sein de laquelle sont définis ses propres paramètres monétaires (dans le bloc zéro), il s'agit d'un ensemble de "curseurs" qu'il faut ajuster en fonction des objectifs visés. A l'heure ou j'écris ces lignes le protocole duniter (noté DUP) comporte 21 paramètres monétaires dont 10 concernent la toile de confiance ! -Nous décrirons en détail les 10 paramètres qui concernent la toile de confiance, nous n'aborderons pas les autres. -Sachez simplement que dans le cas de la monnaie Ğ1 le DU est créer toutes les 24h (86400secondes) mais que cet intervalle de temps régit par le paramètre `dt` peut très bien etre fixée a d'autres valeurs pour d'autres monnaies. +Chaque monnaie Duniter possède sa propre blockchain au sein de laquelle sont définis ses propres paramètres monétaires (dans le bloc zéro), il s'agit d'un ensemble de "curseurs" qu'il faut ajuster en fonction des objectifs visés. À l'heure ou j'écris ces lignes le protocole Duniter (noté DUP) comporte vingt-et-un paramètres monétaires dont dix concernent la toile de confiance ! +Nous décrirons en détail les dix paramètres qui concernent la toile de confiance, nous n'aborderons pas les autres. +Sachez simplement que dans le cas de la monnaie Ğ1, le DU est créé toutes les 24 h (86 400 secondes) mais que cet intervalle de temps régit par le paramètre `dt` peut très bien être fixée à d'autres valeurs pour d'autres monnaies. -Nous ne traiterons pas ici le 2ème objectif relatif a la preuve de travail car ce n'est pas l'objet de cet article, la seule chose a comprendre c'est que la toile de confiance nous permet **d'identifier** les membres qui calculent des blocks, et cette identification nous permet d'imposer une rotation des membres calculateurs, ce ne serait pas possible sans système d'identification. Cette rotation des membres calculateurs est essentielle, sans elle un membre très riche pourrait investir dans des fermes de calcul géantes pour prendre le controle de la blockchain et paraliser toute la communauté ! +Nous ne traiterons pas ici le deuxième objectif relatif à la preuve de travail, car ce n'est pas l'objet de cet article, la seule chose à comprendre est que la toile de confiance nous permet **d'identifier** les membres qui calculent des blocs, et que cette identification nous permet d'imposer une rotation des membres calculateurs, ce ne serait pas possible sans système d'identification. Cette rotation des membres calculateurs est essentielle, sans elle un membre très riche pourrait investir dans des fermes de calcul géantes pour prendre le contrôle de la blockchain et paraliser toute la communauté ! -Revennons donc au 1er objectif, s'assurer que chaque humain n'est qu'un seul compte membre. +Revenons donc au premier objectif, s'assurer que chaque humain n'ait qu'un seul compte membre. En pratique, le risque zéro n'existe pas, notre objectif n'est donc pas de concevoir une toile de confiance au sein de laquelle la fraude serait impossible (ce qui est de toute manière impossible). -Voici donc une reformulation plus réaliste en 4 sous-objectifs : -1. Rendre l’acte de certification suffisamment lourd pour obliger les membres à un minimum de vigilance. +Voici donc une reformulation plus réaliste en quatre sous-objectifs : +1. Rendre l’acte de certification suffisamment lourd pour obliger les membres à un minimum de vigilance. 2. Rendre la fraude suffisamment difficile pour qu'elle soit marginale. -3. Éviter que les éventuelles attaques sybil est un impact significatif sur la monnaie. (_que les faux DU créer est un poid négligeable par rapport a la masse monétaire légitime._) -4. Rendre la croissance de régions sybil suffisamment lente pour que la communauté est le temps de -réagir. +3. Éviter que les éventuelles attaques sybil aient un impact significatif sur la monnaie. (_que les faux DU créés aient un poids négligeable par rapport à la masse monétaire légitime._) +4. Rendre la croissance de régions sybil suffisamment lente pour que la communauté est le temps de réagir. -> **Attend, une attaque quoi ?** +> **Attends, une attaque quoi ?** Une [**attaque sybil**](https://fr.wikipedia.org/wiki/Attaque_Sybil), c'est le nom que l'on donne à une attaque d'un système de réputation par la création de fausses identités. Une toile de confiance est un cas particulier de [**système de réputation**](https://en.wikipedia.org/wiki/Reputation_system). Il y a beaucoup de stratégies de scénarios d'attaques sybil possibles ainsi que de mobiles différents. -Notre objectif est que la toile de confiance nous prémunisse des attaques sybil susceptibles de compromettre le bon fonctionnement de la monnaie ou/et du réseau informatique qui la porte. -Ce qui veut dire que les micro attaques sybil orchestrés par un petit groupe dont l'objectif est seulement un petit enrichissement personnel ne nous intéressent pas ici, ce n'est pas a la toile de confiance de nous prémunir de ces micro attaques, mais a la justice de la communauté concernée, tout comme ce n'est pas a la commune de vous prémunir d'un cambriolage chez vous, mais la commune vas vous garantir le fonctionnement des réseaux d'eau, le nettoiement de la voirie, etc -De la même façon, la toile de confiance duniter nous garantie collectivement le bon fonctionnement de notre monnaie et du réseau informatique qui la porte, et c'est déjà énorme ! +Notre objectif est que la toile de confiance nous prémunisse contre les attaques sybil susceptibles de compromettre le bon fonctionnement de la monnaie ou/et du réseau informatique qui la porte. +Ce qui veut dire que les micro-attaques sybil orchestrés par un petit groupe dont l'objectif est seulement un petit enrichissement personnel ne nous intéressent pas ici, ce n'est pas à la toile de confiance de nous prémunir de ces micro-attaques, mais à la justice de la communauté concernée, tout comme ce n'est pas à la commune de vous prémunir d'un cambriolage chez vous, mais la commune va vous garantir le fonctionnement des réseaux d'eau, le nettoyage de la voirie, etc… +De la même façon, la toile de confiance Duniter nous garantie collectivement le bon fonctionnement de notre monnaie et du réseau informatique qui la porte, et c'est déjà énorme ! -## l'Importance de l'indépendance à tout autre systèmes d'identification +## l’importance de l’indépendance à tout autre systèmes d’identification -Il nous ai très régulièrement proposé de nous baser sur des systèmes d'identification centralisés et alimentés par des monnaies non-libre dépendant d'un état ou d'un autre. -Mais nous serions alors dépendant de ces systèmes d'identification centralisés pour le bon fonctionnement de notre toile de confiance, ça n'a pas de sens. -De plus, les membres d'une monnaie libre peuvent être de n'importe quelle nationalité ou culture, nous perdrions cette universalité en dépendant d'un système d'identification d'un état ou d'un autre, en plus cela exclurait les sans-papier et les apatrides. -Il est essentiel pour nous de ne dépendre d'aucun état ni d'aucune institution. Nous ne dépendons que du réseau internet, et encore, il existe d'autres réseaux, si internet vennait a s'étteindre les humains membres d'une monnaies libres pourrait très bien créer leur propre réseau d'information, c'est déjà ce que font certaines associations en créant leurs propres bout de réseau, donc c'est possible. +Il nous est très régulièrement proposé de nous baser sur des systèmes d'identification centralisés et alimentés par des monnaies non-libre dépendant d'un état ou d'un autre. +Mais, nous serions alors dépendants de ces systèmes d'identification centralisés pour le bon fonctionnement de notre toile de confiance, ça n'a pas de sens. +De plus, les membres d'une monnaie libre peuvent être de n'importe quelle nationalité ou culture, nous perdrions cette universalité en dépendant d'un système d'identification étatique. De plus, cela exclurait les sans-papiers et les apatrides. +Il est essentiel pour nous de ne dépendre d'aucun état ni d'aucune institution. Nous ne dépendons que du réseau internet, et encore, il existe d'autres réseaux, si internet vennait a s'éteindre, les humains membres d'une monnaie libre pourrait très bien créer leur propre réseau d'information, c'est déjà ce que font certaines d’associations en créant leurs propres bout de réseau, donc c'est possible. ## Quelques bases en théorie des graphes -### un peu de vocabulaire - -graphe : Ensemble de points (nommés sommets) reliées entre eux par des flèches (nommées arcs). - -graphe simple : graphe sans boucle (arc reliant un sommet a lui-même) et sans arcs superposés (plusieurs arcs reliant le même couple de sommets dans le même sens). - -graphe orientés : graphe ou les arcs ont un sens, l'arc A->B est donc différent de l'arc B->A. - -extrémité initiale et finale d'un arc : l'arc A->B à pour extrémité initiale A et pour extrémité finale B. - -sommet isolé : sommet n'étant lié a aucun arc. - -degré d'un sommet : nombre d'arc reliant ce somment (dans les deux sens). - -demi-degré extérieur d'un sommet A : nombre d'arc ayant pour extrémité initiale le sommet A - -demi-degré intérieur d'un sommet A : nombre d'arc ayant pour extrémité finale le sommet A - -chemin : trajet qu'il faut suivre pour se rendre d'un sommet A à un sommet B en respectant le sens des arcs. Le nombre d'arc traversés est la longueur du chemin. - -### définition d'une toile de confiance duniter - -Les toiles de confiance duniter (une par monnaie) sont des graphes simples orientés et sans sommets isolés. +### Un peu de vocabulaire + +- graphe : ensemble de points (nommés sommets) reliées entre eux par des flèches (nommées arcs). +- +- graphe simple : graphe sans boucle (arc reliant un sommet à lui-même) et sans arcs superposés (plusieurs arcs reliant le même couple de sommets dans le même sens). +- +- graphe orientés : graphe ou les arcs ont un sens, l'arc A –> B est donc différent de l'arc B –> A. +- +- extrémité initiale et finale d'un arc : l'arc A –> B a pour extrémité initiale A et pour extrémité finale B. +- +- sommet isolé : sommet n'étant lié à aucun arc. +- +- degré d'un sommet : nombre d'arcs reliant ce sommet (dans les deux sens). +- +- demi-degré extérieur d'un sommet A : nombre d'arcs ayant pour extrémités initiales le sommet A +- +- demi-degré intérieur d'un sommet A : nombre d'arcs ayant pour extrémités finales le sommet A +- +- chemin : trajet qu'il faut suivre pour se rendre d'un sommet A à un sommet B en respectant le sens des arcs. Le nombre d'arcs traversés est la longueur du chemin. + +### Définition d’une toile de confiance Duniter + +Les toiles de confiance Duniter (une par monnaie) sont des graphes simples orientés et sans sommets isolés. Les sommets en sont les membres et les arcs les certifications. Pourquoi orientés ? -Certifier est un acte personnel qui n'engage que l'émetteur de la certification, la confiance qu'il accorde au receveur n'est pas forcément réciproque dans tout les cas (elle l'est souvent), mais on peut pas imposer au receveur de faire confiance a l'emetteur. +Certifier est un acte personnel qui n'engage que l'émetteur de la certification, la confiance qu'il accorde au récepteur n'est pas forcément réciproque dans tous les cas (elle l'est souvent), mais on peut pas imposer au récepteur de faire confiance à l'émetteur. -De plus, tout les sommets sont des identités membres ou ayant déjà été membres par le passé, les sommets correspondant aux anciens membres sont dans un état particulier dit "désactivé". Les sommets désactivés ne peuvent plus émettrent ou recevoirs de nouvelles certifications, mais les certifications qu'ils ont émis et reçus avant de perdre leur statut de membre restent actives sur les autres membres jusqu'a leur date d'expiration dans le but d'éviter un éffondrement de la toile en cascade. Si ces anciens membres ne redeviennent pas membres alors les certifications qu'ils avaient émis et reçus finiront par expirés, et les sommets "désactivés" en question finiront donc par devenir des sommets isolés. +De plus, tous les sommets sont des identités membres ou ayant déjà été membres par le passé, les sommets correspondant aux anciens membres sont dans un état particulier dit "désactivé". Les sommets désactivés ne peuvent plus émettre ou recevoir de nouvelles certifications, mais les certifications qu'ils ont émis et reçus avant de perdre leurs statuts de membre restent actives vers les autres membres jusqu’à leurs dates d'expirations dans le but d'éviter un effondrement en cascade de la toile de confiance. Si ces anciens membres ne redeviennent pas membres alors les certifications qu'ils avaient émis et reçus finiront par expirer, et les sommets "désactivés" en question finiront donc par devenir des sommets isolés. -Pour finir sur cet histoire d'ancien membre, au bout d'un certain délai qui dépend d'un paramètre monétaire le sommet désactivé est supprimé et l'identité associée passe à l'état révoquée, c'est a dire que cette identité ne pourra plus jamais redevenir membre. l'Humain qui possédais cette identité reste toutefois libre de redemander son adhésion dans la toile sous une nouvelle identité :) +Pour finir sur cette histoire d'ancien membre, au bout d'un certain délai qui dépend d'un paramètre monétaire, le sommet désactivé est supprimé et l'identité associée passe à l'état révoqué, c'est-à -dire que cette identité ne pourra plus jamais redevenir membre. L’humain qui possédait cette identité reste toutefois libre de redemander son adhésion dans la toile sous une nouvelle identité :) -> Qu'entend tu par identité ? +> Qu’entends-tu par identité ? -Une identité c'est un groupe de 3 informations : une clé publique, un nom, et un blockstamp*. -Un blockstamp c'est une référence a un block précis d'une blockchain ce qui permet de dater le moment auquel l'identité a été créée, et de relier l'identité a une blockchain particulière, donc a une monnaie particulière (car chaque monnaie a sa propre blockchain). +Une identité est un groupe de trois informations : une clé publique, un nom, et un blockstamp. +Un blockstamp est une référence à un bloc précis d'une blockchain. Ça permet de dater le moment auquel l'identité a été créée, et de relier l'identité à une blockchain particulière, donc à une monnaie particulière (car chaque monnaie a sa propre blockchain). -Une identité peut etre dans 5 états différents : en attente*, membre, ancien membre, révoquée ou exclue. +Une identité peut être dans cinq états différents : en attente, membre, ancien membre, révoquée ou exclue. Nous reviendrons plus en détail sur chacun de ses états. -Résumons tout cela avec un exemple : +Résumons tout cela avec un exemple : A -> B -> C | \--> D - Si pour une raison x ou y A perd son statut de membre alors la toile s'éffondre et tout les autres membres perdent aussi leur statut de membre en cascade. pour éviter cela, la certification A->B restera valide jusqu'à sa date d'expiration, laissant a B le temps de ce faire certifier par C ou D par exemple. +Si pour une raison x ou y, A perd son statut de membre, alors la toile s'effondre et tous les autres membres perdent aussi leurs statuts de membre en cascade. Pour éviter cela, la certification A –> B restera valide jusqu'à sa date d'expiration, laissant à B le temps de se faire certifier par C ou D par exemple. -L'absence de sommet isolé implique également que lorsque qu'un nouveau membre est ajouté a la toile de confiance il faut ajouter en même temps (c'est à dire dans le même bloc) l'ensemble des certifications qui lui permette devenir membre. -C'est pourquoi nous avons besoin d'un espace de stockage intermédiaire qui contient les identités **en attente*** de devenir membre ainsi que les certifications émises par des membres envers ces identités, c'est espace c'est la fameuse "piscine" des noeuds duniter (que l'on aurait aussi pu nommer "bac a sable" puisque dans le code de duniter c'est le terme `sandbox` qui est utilisé). Attention ces "piscine" contiennent également d'autres types de documents qui ne sont pas mentionnés ici. +L'absence de sommet isolé implique également que lorsque qu'un nouveau membre est ajouté à la toile de confiance il faut ajouter en même temps (c'est-à -dire dans le même bloc) l'ensemble des certifications qui lui permettent de devenir membre. +C'est pourquoi nous avons besoin d'un espace de stockage intermédiaire qui contient les identités **en attente** de devenir membre ainsi que les certifications émises par des membres envers ces identités, c'est espace c'est la fameuse "piscine" des nœuds Duniter (que l'on aurait aussi pu nommer "bac à sable" puisque dans le code de Duniter c'est le terme `sandbox` qui est utilisé). Notons que ces "piscines" contiennent également d'autres types de documents non mentionnés ici. -## Définition des règles d'une toile de confiance duniter +## Définition des règles d’une toile de confiance Duniter - Les toiles de confiance duniter (une par monnaie) sont régies par 8 règles présentées ci-après. -L'application de ses règles dépendent de 11 paramètres variables d'une monnaie à l'autre, la valeur de 10 d'entre eux sont fixés dans le block zéro, le 11ème paramètre `msPeriod` est en dur dans le code car il a été ajouté après l'écriture du bloc zéro de la Ğ1. +Les toiles de confiance Duniter (une par monnaie) sont régies par huit règles présentées ci-après. +L'application de ces règles dépendent de onze paramètres variables d'une monnaie à l'autre. La valeur de dix d'entre eux sont fixés dans le bloc zéro, le onzième paramètre `msPeriod` est écrit en dur dans le code, car il a été ajouté après l'écriture du bloc zéro de la Ğ1. Cette partie ne présente que les définitions des règles, les raisons d'être de ces règles sont présentés dans le cadre de l'historicité de leur apparition dans la partie "Origine des règles et cas de la Ğ1". -### 1. Règle de distance et Membres Référents +### 1. Règle de distance et membres référents - paramètres : **StepMax** et **xPercent** + Paramètres : **StepMax** et **xPercent** Ces deux paramètres sont très fortement liés et définissent ensemble une seule et même règle : la règle de distance. Pour définir la règle de distance, nous devons au préalable définir ce qu'est un membre référent : -> **Membre référent** : un membre A est référent si et seulement si ses deux demi-degrés sont supérieurs ou égaux à `CEIl(N^(1/stepMax))` où N est le nombre total de membres.** +> **Membre référent** : un membre A est référent si et seulement si ses deux demi-degrés sont supérieurs ou égaux à `CEIl(N^(1/stepMax))` où N est le nombre total de membres.** -Nous pouvons maintenant définir la règle de distance : +Nous pouvons maintenant définir la règle de distance : -> **Règle de distance** : un membre A respecte la règle de distance si et seulement si pour plus de xPercent % des membres référents R il existe un chemin de R vers A d'une longueur inférieure ou égale à `stepMax`.** +> **Règle de distance** : un membre A respecte la règle de distance si et seulement si pour plus de xPercent % des membres référents R il existe un chemin de R vers A d'une longueur inférieure ou égale à `stepMax`.** -La notion de membre référent ne sert qu'a l'application de la règle de distance, les membres référents n'ont aucun privilèges sur les membres non-référents. -Dans un toile aboutie, c'est à dire dans une toile ou chaque membre a certifier tout les membres qu'il est en mesure de légitimement certifier, tout les membres devraient êtres référents, mais de part la croissance progressive de la toile d'une part et le remplacement générationnel d'autre part, il existe a tout instant t des membres qui n'ont pas encore certifier tout les membres qu'il sont en mesure de légitimement certifier, ces membres là serait bloquants s'il était pris en compte dans la règle de distance, et la toile de confiance ne pourrait jamais acceuillir de nouveaux membres. (Vous pouvez le visualiser sur la page "qualité toile" de currency-monit en cochant l'option "si le concept de membre référent n'existait pas"). +La notion de membre référent ne sert qu'à l'application de la règle de distance, les membres référents n'ont aucuns privilèges sur les membres non-référents. +Dans un toile aboutie, c'est-à -dire dans une toile ou chaque membre a certifié tous les membres qu'il est en mesure de certifier légitimement, tous les membres devraient êtres référents, mais de part la croissance progressive de la toile d'une part et le remplacement générationnel d'autre part, il existe à tous instants `t` des membres qui n'ont pas encore certifié tous les membres qu'ils sont en mesure de certifier légitimement. Ces membres seraient bloquants s'ils étaient pris en compte dans la règle de distance, et la toile de confiance ne pourrait jamais acceuillir de nouveaux membres. (Vous pouvez le visualiser sur la page "qualité toile" de currency-monit en cochant l'option "si le concept de membre référent n'existait pas"). > **Quand s'applique la règle de distance ?** La vérification de la règle de distance étant couteuse en calcul, elle ne s'applique que lors de l'obtention et du renouvellement du statut de membre. (Voir partie "renouvellement du statut de membre"). -_Cas particulier : la règle de distance ne s'applique pas au block zéro (écriture de la toile initiale)._ +_Cas particulier : la règle de distance ne s'applique pas au bloc zéro (écriture de la toile initiale)._ ### 2. Règle du nombre minimal de certifications reçus - paramètre : **sigQty** + Paramètre : **sigQty** -C'est la règle la plus simple, elle stipule que tout membre doit a tout moment (comprendre a tout bloc) être le destinataire d'au moins `sigQty` certifications actives. -Si ne serait-ce que pour le temps d'un seul bloc, un membre A se retrouve avec moins de `sigQty` certifications actives reçus, alors il perd le statut de membre a ce bloc là , il doit alors publier une demande de renouvellement de son adhésion. +C'est la règle la plus simple, elle stipule que tout membre doit à tout moment (comprendre à tous blocs) être le destinataire d'au moins `sigQty` certifications actives. +Si ne serait-ce que pour le temps d'un seul bloc, un membre A se retrouve avec moins de `sigQty` certifications actives reçus, alors il perd le statut de membre à ce bloc. Il doit alors publier une demande de renouvellement de son adhésion. -### 3. Règle de renouvellement de l'adhésion +### 3. Règle de renouvellement de l’adhésion - paramètres : **msValidity**, **msPeriod** et **msWindow** + Paramètres : **msValidity**, **msPeriod** et **msWindow** L'obtention du statut de membre n'est pas un acquis pour la vie, mais pour une durée de `msValidity` secondes. -Tout membre (ou ancien membre non révoqué et non exclu définitivement) peut a tout moment émettre une demande de renouvellement de son adhésion a condition que son dernier renouvellement date de plus de `msPeriod` secondes (Lorsque qu'un membre ne s'est jamais renouveller la date de dernier renouvellement correspond a la date d'obtention du statut de membre). -Lorsqu'une demande de renouvellement d'adhésion est émise, elle est stockée en "piscine" pour une durée maximale de `msWindow` secondes, puis elle sera inscrite en blockchain dés que le membre en question respectera la règle de distance **et** la règle sigQty (s'il les respectent déjà , dés qu'un noeud ayant reçu la demande de renouvellement trouve un block). +Tout membre (ou ancien membre non révoqué et non exclu définitivement) peut à tout moment émettre une demande de renouvellement de son adhésion à condition que son dernier renouvellement date de plus de `msPeriod` secondes (lorsque qu'un membre ne s'est jamais renouvellé, la date du dernier renouvellement correspond à la date d'obtention du statut de membre). +Lorsqu'une demande de renouvellement d'adhésion est émise, elle est stockée en "piscine" pour une durée maximale de `msWindow` secondes, puis elle sera inscrite en blockchain dès que le membre en question respectera la règle de distance **et** la règle sigQty (s’il les respecte déjà , dès qu'un nœud ayant reçu la demande de renouvellement trouve un bloc). -Tout membre dont le dernier renouvellement date de plus de `msValidity` secondes perd le statut de membre au premier bloc ou cette durée est atteinte. Dans ce cas, l'ancien membre dispose a nouveau d'une durée de `msValidity` secondes pour redevenir membre par cette même procédure de renouvellement. Passé ce délai, donc `2*msValidity` après le dernier renouvellement, l'ancien membre est exclu définitivement et ne pourra plus jamais redevenir membre avec ce compte. S'il souhaite redevenir membre il devra se créer un nouveau compte à partir de zéro. +Tout membre dont le dernier renouvellement date de plus de `msValidity` secondes perd le statut de membre au premier bloc ou cette durée est atteinte. Dans ce cas, l'ancien membre dispose à nouveau d'une durée de `msValidity` secondes pour redevenir membre par cette même procédure de renouvellement. Passé ce délai, donc `2 × msValidity` après le dernier renouvellement, l'ancien membre est exclu définitivement et ne pourra plus jamais redevenir membre avec ce compte. S'il souhaite redevenir membre il devra se créer un nouveau compte à partir de zéro. -### 4. Règle d'expiration des certifications +### 4. Règle d’expiration des certifications - paramètre : **sigValidity** + Paramètre : **sigValidity** Toute certification inscrite en blockchain expire **sigValidity** secondes après son **émission**. -/!\ l'émission et l'écriture d'une certification sont des instants différents. Lorsque membre A émet une certifiation à un instant t1, elle est d'abord stockée en piscine à cet instant t1, puis sera écrite en blockchain a un instant t2, dés que les règles de la toile le permettent, il peut y avoir plusieurs semaines d'écart entre t1 et t2 !! +/!\ L'émission et l'écriture d'une certification ont lieu à des instants différents. Lorsque le membre A émet une certifiation à un instant t1, elle est d'abord stockée en piscine à cet instant t1, puis sera écrite en blockchain à un instant t2, dès que les règles de la toile le permettent, il peut y avoir plusieurs semaines d'écarts entre t1 et t2 !! ### 5. Règle du stock limité de certifications actives - paramètre : **sigStock** + Paramètre : **sigStock** -Par certification active nous entendons certification inscrite en blockchain et qui n'a pas encore expirée. +Par certification active nous entendons certification inscrite en blockchain et qui n'a pas encore expiré. -A tout bloc et pour tout membre, l'ensemble des certifications émises par ce membre et actives doit être inférieur ou égal à sigStock. Lorsque ce quota est atteint, le membre en question devra attendre qu'une certification active dont il est l'émétteur expire pour pouvoir en écrire une autre. +À tout bloc et pour tout membre, l'ensemble des certifications émises par ce membre et actives doit être inférieur ou égal à sigStock. Lorsque ce quota est atteint, le membre en question devra attendre qu'une certification active dont il est l'émetteur expire pour pouvoir en écrire une autre. -### 6. Règle de l'intervalle d'écriture entre deux certifications +### 6. Règle de l’intervalle d’écriture entre deux certifications - paramètre : **sigPeriod** + Paramètre : **sigPeriod** Lorsqu'une certification émise par un membre A est écrite en blockchain, aucune autre certification émise par A ne pourra être écrite en blockchain avant `sigPeriod` secondes. -### 7. Règle de la fenêtre d'écriture d'une certification +### 7. Règle de la fenêtre d’écriture d’une certification - paramètre : **sigWindow** + Paramètre : **sigWindow** Lorsqu'une certification est émise par un membre A, elle restera stockée en "piscine" pour au plus `sigWindow` secondes. Si la certification en question n'a toujours pas été écrite en blockchain passé ce délai, elle est purement supprimée. -### 8. Règle de la fenêtre d'écriture d'une identité +### 8. Règle de la fenêtre d’écriture d'une identité - paramètre : **idtyWindow** + Paramètre : **idtyWindow** Lorsqu'une identitée est émise, elle restera stockée en "piscine" pour au plus `idtyWindow` secondes. Si l'identitée en question n'a toujours pas été écrite en blockchain passé ce délai, elle est purement supprimée. -## Le cas particulier de la toile initiale au block zéro +## Le cas particulier de la toile initiale au bloc zéro - L'application des règles présentées ne rend l'expansion d'une toile possible qu'a partir d'une toile pré-éxistante, il y a donc un cas particulier ou certaines règles ne s'appliquent pas : l'écriture du block zéro. +L'application des règles présentées ne rend l'expansion d'une toile possible qu’à partir d'une toile pré-éxistante, il y a donc un cas particulier ou certaines règles ne s'appliquent pas : l'écriture du bloc zéro. -Seules les règles 2 et 5 s'appliquent lors de l'écriture du block zéro. +Seules les règles 2 et 5 s'appliquent lors de l'écriture du bloc zéro. -Dans la pratique, c'est l'humain qui génère le bloc zéro qui choisi manuellement qu'elles identités il écrira dans le block zéro, mais toutes les identités et certifications écrites dans le block zéro doivent respecter les règles 2 et 5 et de plus le block zéro doit être signé avec la clé privée d'une des identités écrites. -Dés lors qu'un bloc zéro correct a été généré, toute identité inscrite dans ce block zéro peut soumettre le block suivant, de fait l'auteur du block zéro n'a donc plus la main. +Dans la pratique, c'est l'humain qui génère le bloc zéro qui choisi manuellement quelles identités sont écrites dans le bloc zéro, mais toutes les identités et certifications écrites dans le bloc zéro doivent respecter les règles 2 et 5 et de plus le bloc zéro doit être signé avec la clé privée d'une des identités écrites. +Dès lors qu'un bloc zéro correct a été généré, toute identité inscrite dans le bloc zéro peut soumettre le bloc suivant, de fait l'auteur du bloc zéro n'a donc plus la main. ## Origine des règles et cas de la Ğ1 ### 1. Distance et taille limite -La règle de distance à pour objectif de limiter la taille maximale d'une région sybil ainsi que la taille maximale de la communauté monétaire. +La règle de distance a pour objectif de limiter la taille maximale d'une région sybil ainsi que la taille maximale de la communauté monétaire. `xpercent` permet d'éviter une minorité de blocage (membres trop peu actifs). ![zone sybil]({filename}/images/wiki/toile-de-confiance/zone-sybil.png) -Les régions sybil sont isolés du reste du graphe, car les comptes sybil ne recevrons de certifications que de la part d'autres comptes sybil ou de la part des auteurs de l'attaque. Ainsi, tout plus court chemins entre un membre légitime et un compte sybil passe forcément par un auteur de l'attaque. La limite de la profondeur de la région sybil dépend donc de la distance max entre les auteurs de l'attaque et les xpercent% membres référents les plus proches, cette distance caractérisqtique est nommée `stepAttackers`. +Les régions sybil sont isolés du reste du graphe, car les comptes sybil ne reçevrons de certifications que de la part d'autres comptes sybil ou de la part des auteurs de l'attaque. Ainsi, tout plus court chemins entre un membre légitime et un compte sybil passe forcément par un auteur de l'attaque. La limite de la profondeur de la région sybil dépend donc de la distance maximum entre les auteurs de l'attaque et les xpercent% membres référents les plus proches, cette distance caractéristique est nommée `stepAttackers`. La taille maximale d'une région sybil crée par sigQty membres malveillants dépend du levier L=sigQty/sigStock : taille max région sybil = (sigStock-sigQty)*(1-L^(stepMax-stepAttackers))/(1-L) @@ -215,17 +214,17 @@ Et de même la taille maximale théorique de la toile de confiance est : WoTmax = (sigStock)*L^(stepMax-1) -Sauf que dans les fait, la plupart des membres ne consommeront pas tout leur stock de certifications. De nombreuses études sociologiques montrent qu'un humain connait en moyenne 50 personnes, remplaçons donc sigStock par 50 : +Sauf que dans les faits, la plupart des membres ne consommeront pas tout leurs stocks de certifications. De nombreuses études sociologiques montrent qu'un humain connaît en moyenne cinquante personnes, remplaçons donc sigStock par 50 : WoTmoy= (50)*(50/sigQty)^(stepMax-1) -Notre toile de confiance peut donc être dimensionnée avec seulement 2 paramètres, notre objectif avec la Ğ1 est de créer une zone économique libre de l'ordre du million d'utilisateurs, voyons donc quelles combinaisons du couple (sigQty;stepMax) permettent d'attendre le million : +Notre toile de confiance peut donc être dimensionnée avec seulement deux paramètres, notre objectif avec la Ğ1 est de créer une zone économique libre de l'ordre du million d'utilisateurs, voyons donc quelles combinaisons du couple (sigQty;stepMax) permettent d'attendre le million : ![graphe WoTmoy en fonction de sigQty et stepMax]({filename}/images/wiki/toile-de-confiance/graphe-WoTmoy.png) -La taille max d'une région sybil croît linéairement par rapport a sigQty mais exponentionellement par rapport à stepMax, donc pour avoir une toile la plus solide possible nous devons minimiser la valeur de stepMax. le graphe ci-dessus nous montre que la valeur de stepMax la plus faible pêrmettant d'attendre le million de membres est 5. -Pour la valeur de sigQty nous avons le choix entre 4 pour atteindre 1,2million ou 5 pour atteindre 1/2 million. -Sachant que la formule WoTmoy nous donne un ordre de grandeur et qu'elle considère tout les comtpes comme référents (ce qui n'est pas le cas en réalité), la taille maximale réelle que nous pourrons atteindre est certainement plus élevée, 1/2 millon est donc suffisant d'autant que plus sigQty est faible plus il est facile de lancer une attaque sybil (c'est plus simple d'être 4 complices que d'être 5). Par mesure de sécurité nous avons donc choisi 5, ce qui nous donne déjà : +La taille maximale d'une région sybil croît linéairement par rapport à sigQty mais exponentionellement par rapport à stepMax, donc pour avoir une toile la plus solide possible, nous devons minimiser la valeur de stepMax. Le graphe ci-dessus nous montre que la valeur de stepMax la plus faible permettant d'attendre le million de membres est de cinq. +Pour la valeur de sigQty nous avons le choix entre quatre pour atteindre 1,2 million ou cinq pour atteindre le demi million. +Sachant que la formule WoTmoy nous donne un ordre de grandeur et qu'elle considère tous les comtpes comme référents (ce qui n'est pas le cas en réalité), la taille maximale réelle que nous pourrons atteindre est certainement plus élevée, un demi millon est donc suffisant d'autant que plus sigQty est faible plus il est facile de lancer une attaque sybil (c'est plus simple d'être quatre complices que d'être cinq). Par mesure de sécurité nous avons donc choisi cinq, ce qui nous donne déjà : stepMax = 5 sigQty = 5 @@ -235,17 +234,17 @@ la taille max d'une région sybil est donc : `(sigStock-sigQty)*(1-(sigStock/5)^ avec sigStock = 50 cela fait une région sybil de : `45*(1-10^(5-stepAttackers))/(-9)` -Une bonne façon de nous protéger est donc de maximiser stepAttackers. C'est pour cela que nous avons fait en sorte que dans la toile initiale Ğ1 beaucoup de membres référents soit déjà à 4 de distance les un des autres. +Une bonne façon de nous protéger est donc de maximiser `stepAttackers`. C'est pour cela que nous avons fait en sorte que dans la toile initiale Ğ1 beaucoup de membres référents soient déjà à quatre de distance les un des autres. -Autre moyen de nous prémunir d'une attaque sybil, si elle était suffisamment lente pour que nous ayons le temps de la détecter alors les membres référentes pourraits tendre volontairement la toile pour stopper l'élargissement de la zone sybil le temps que les auteurs de l'attaque soit déchut de leur statut de membre par non renouvellement des certifications légitimes dont ils avaient bénéficier pour devenir membre. -Le problème c'est qu'une attaque sybil peut etre propagée par des comptes robots qui ce certifieront très vite et de manière optimale, comment donc pourrions nous les ralentir de force ? -En imposant un délai minimal entre deux certifications ! +Autre moyen de nous prémunir d'une attaque sybil, si elle était suffisamment lente pour que nous ayons le temps de la détecter alors les membres référentes pourraits tendre volontairement la toile pour stopper l'élargissement de la zone sybil le temps que les auteurs de l'attaque soit déchut de leur statut de membre par non renouvellement des certifications légitimes dont ils avaient bénéficié pour devenir membre. +Le problème c'est qu'une attaque sybil peut être propagée par des comptes robots qui se certifieront très rapidement et de manière optimale, comment donc pourrions-nous les ralentir de force ? +En imposant un délai minimal entre deux certifications ! ### 2. une question de temps - Nous venons de voir que pour ralentir de déploiement d'une attaque sybil afin d'avoir le temps de la détecter et de prendre des mesures, nous pourrions imposer un délai minimal entre deux écritures de certifications par le même compte. c'est la raison pour laquelle nous avons créer le paramètre sigPeriod. +Nous venons de voir que pour ralentir de déploiement d'une attaque sybil afin d'avoir le temps de la détecter et de prendre des mesures, nous pourrions imposer un délai minimal entre deux écritures de certifications par le même compte. C’est la raison pour laquelle nous avons créé le paramètre `sigPeriod`. -Voici un graphe d'évolution de la taille d'une région sybil en fonction de sigPeriod et de stepAttackers : +Voici un graphe d'évolution de la taille d'une région sybil en fonction de `sigPeriod` et de `stepAttackers` : f[stepAttackers](t) = {p=0, t p=1, t(sigStock/5) @@ -255,42 +254,42 @@ f[stepAttackers](t) = {p=0, t ### 3. Une confiance éternelle ? (sigValidity, msValidity) -Si toute certification restait valable at vitam eternam, cela serait problématique pour au moins 2 raisons : -D'une part il est important que les membres qui décedent cessent de créer des DU -D'autre part, il est important que les faux comptes détectet par la communauté puissent ne pas rester membre indéfiniment. +Si toute certification restait valable at vitam eternam, cela serait problématique pour au moins deux raisons : +D'une part il est important que les membres qui décédent cessent de créer des DU. +D'autre part, il est important que les faux comptes détectés par la communauté puissent ne pas rester membre indéfiniment. -Pour ce faire, il est nécessaire que les certifications est une durée de vie limités et qu'il faille donc renouveller sa confiance envers ses pairs régulièrement. -D'un autre coté, il ne faut pas non plus que les membres passent leur vie a renouveller leurs certifications plutot qu'a effectuer des échanges économiques. -De plus, des certifications a durée de vie trop courte rendrait l'acte de certification trop léger, il faut que l'acte de certification reste conséquent pour être pris au sérieux. -Enfin, nous souhaitons également que la durée de vie d'une certification soit une durée vraiment très très simple a retenir pour que le plus rgand nombre l'est bien en tête. +Pour ce faire, il est nécessaire que les certifications aient une durée de vie limités et qu'il faille donc renouveller sa confiance envers ses pairs régulièrement. +D'un autre côté, il ne faut pas non plus que les membres passent leur vie à renouveller leurs certifications plutôt qu'à participer à des échanges économiques. +De plus, une certification à durée de vie trop courte rendrait l'acte de certification trop léger. Il faut que l'acte de certification reste conséquent pour être pris au sérieux. +Enfin, nous souhaitons également que la durée de vie d'une certification soit une durée simple à retenir pour que le plus grand nombre s’en souvienne. -Une fois tout ces critères pris en compte, nous hésitions entre 1 an, 2 ans ou 3 ans. -Historiquement, nous avons d'abord trancher sur les valeurs de sigPeriod et sigStock, ce qui impliquait qu'il fallait a minima 495 jours pour épuiser tout son stock de certifications, 1 an n'est donc pas possible. -3 ans nous semblait trop long, nous avons donc choisi 2 ans. +Une fois tous ces critères pris en compte, nous hésitions entre un, deux ou trois ans. +Historiquement, nous avons d'abord tranché sur les valeurs de `sigPeriod` et `sigStock`, ce qui impliquait qu'il fallait a minima 495 jours pour épuiser tout son stock de certifications, un an n'est donc pas possible. +Trois ans nous semblait trop long, nous avons donc choisi deux ans. -Mais considérer qu'un mort va continuer a créer des DU dont personne ne pourra bénéficier pendant une durée pouvant aller jusqu'a 2 ans, cela nous semblait trop. C'est pourquoi nous avons opter pour une durée de vie plus faible concernant le renouvellement de l'adhésion. -Nous avons donc choisi 1 an mais nous aurions aussi pu choisir 6 mois, la valeur de **msValidity** est au final assez secondaire et pourrait facilement etre modifée dans le futur si la communauté le souhaite. +Mais considérer qu'un mort va continuer à créer des DU dont personne ne pourra bénéficier pendant une durée pouvant aller jusqu'à deux ans, cela nous semblait trop. C'est pourquoi nous avons opté pour une durée de vie plus faible concernant le renouvellement de l'adhésion. +Nous avons donc choisi un an. Mais, nous aurions aussi pu choisir six mois. La valeur de **msValidity** est au final assez secondaire et pourrait facilement être modifée dans le futur si la communauté le souhaite. -### 4. Éviter que les piscines ne deviennent des dépots sédimentaires (idtyWindow, sigWindow, msWindow) +### 4. Éviter que les piscines ne deviennent des dépôts sédimentaires (idtyWindow, sigWindow, msWindow) -Il faut nettoyer régulièrement les piscines pour éviter qu'elles n'atteignent des tailles astronomiques et pour garantir que même les petites machines peu puissantes puissent éxécuter un noeud duniter. -Pour ce faire il faut que les identités et certifications en attentes restent le moins longtemps possible en piscine, elle doivent cependant y rester suffisamment longtemps pour avoir une chance raisonnable d'être inscrites en blockchain. -Pour la Ğ1, nous avons estimer que 2 mois était un minimum pour que tout les certificateur potentiels d'une nouvelle identité aient le temps de se synchroniser. Nous voulions aussi que cette durée corresponde a un faible nombre d'unités d'une grandeur usuelle, afin d'être facilement intégrée et mémorisée par le plus grand nombre. -Typiquement, choisir 7 semaines aurait été plus compliqué a intégrer et retenir, nous voulions que les durées a connaitre reste le plus facilement intégrables et mémorisables. -1 mois nous semblait trop court, la valeur de 2 mois s'est donc imposée. Et par souci de simplicité, nous avons appliquer cette même valeur de 2 mois aux 3 paramètres idtyWindow, sigWindow et msWindow. +Il faut nettoyer régulièrement les piscines pour éviter qu'elles n'atteignent des tailles astronomiques et pour garantir que même les petites machines peu puissantes puissent exécuter un nœud Duniter. +Pour ce faire il faut que les identités et certifications en attentes restent le moins longtemps possible en piscine, elles doivent cependant y rester suffisamment longtemps pour avoir une chance raisonnable d'être inscrites en blockchain. +Pour la Ğ1, nous avons estimé que deux mois étaient un minimum pour que tous les certificateurs potentiels d'une nouvelle identité aient le temps de se synchroniser. Nous voulions aussi que cette durée corresponde à un faible nombre d'unités d'une grandeur usuelle, afin d'être facilement intégrée et mémorisée par le plus grand nombre. +Typiquement, choisir sept semaines aurait été plus compliqué à intégrer et à retenir. Nous voulions que les durées à connaître restent le plus facilement intégrable et mémorisables. +Un mois nous semblait trop court, la valeur de deux mois s'est donc imposée. Et par souci de simplicité, nous avons appliqué cette même valeur de deux mois aux trois paramètres `idtyWindow`, `sigWindow` et `msWindow`. ### 5. Éviter de limiter les membres connaissant beaucoup de monde (sigStock) -De nombreuses études sociologiques montrent qu'un humain connait en moyenne 50 personnes, mais c'est une moyenne, certains humains en connaissent beaucoup plus, d'autres beaucoup moins. -La encore, nous avons trancher par le critère "nombre facile a retenir". -Bien que l'impact de sigStock sur la taille max des régions sybil soit secondaire, il conviens tout de même de ne pas choisir un sigStock trop grand ! -150 nous semblait trop élevé, nous avons donc choisis 100. +De nombreuses études sociologiques montrent qu'un humain connait en moyenne cinquante personnes. Bien entendu, c'est une moyenne. Certains humains en connaissent beaucoup plus, d'autres beaucoup moins. +Là encore, nous avons tranché par le critère "nombre facile à retenir". +Bien que l'impact de `sigStock` sur la taille maximale des régions sybil soit secondaire, il convient tout de même de ne pas choisir un `sigStock` trop grand ! +150 nous semblait trop élevé, nous avons donc choisi 100. ### 6. Se prémunir des minorités de blocage (xpercent) ### 7. L'ajout de msPeriod, une protection anti-spam -Ce paramètre un peu a part, rajouté après le bloc zéro, ne sert pas a réguler la toile de confiance mais a proteger le réseau informatique qui porte la monnaie contre les atatque de type spam. -En effet, des membres malveillants qui souhaitent nuire au bon fonctionnement de la monnaie pourraient demander leur renouvellement a chaque block (toute les 5 min), ou pire encore, envoyer des centaines de requete de renouvellement par minute pour déborder les noeuds duniter. En l'absence de limitation, les noeuds duniter sont cencés traiter toutes vos requetes de renouvellement, même si vous vous êtes renouvellés il y a 5min ! +Ce paramètre un peu à part, rajouté après le bloc zéro, ne sert pas à réguler la toile de confiance mais à proteger le réseau informatique qui porte la monnaie contre les attaques de type spam. +En effet, des membres malveillants qui souhaitent nuire au bon fonctionnement de la monnaie pourraient demander leur renouvellement à chaque bloc (toutes les cinq minutes), ou pire encore, envoyer des centaines de requêtes de renouvellement par minute pour submerger les nœuds Duniter. En l'absence de limitation, les nœuds Duniter sont cencés traiter toutes les requêtes de renouvellement, même si l’adhésion a été renouvellées il y a cinq minutes ! Pour nous prémunir de cette possibilité d'attaque nous avons ajouté le paramètre `msPeriod`. -Par souci de simplicité, nous avons choisi de lui attribuer la même valeurs qu'aux paramètres idtyWindow, sigWindow et msWindow. +Par souci de simplicité, nous avons choisi de lui attribuer la même valeurs qu'aux paramètres `idtyWindow`, `sigWindow` et `msWindow`. -- GitLab From b00058a52c21d1bb2eafb56c3f00488fc28bd2be Mon Sep 17 00:00:00 2001 From: librelois <elois@ifee.fr> Date: Thu, 12 Apr 2018 23:20:22 +0200 Subject: [PATCH 5/6] comply markdownlint --- content/pages/wiki/toile-de-confiance.md | 96 ++++++++++++------------ 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/content/pages/wiki/toile-de-confiance.md b/content/pages/wiki/toile-de-confiance.md index cd0d02f..2fd72ed 100644 --- a/content/pages/wiki/toile-de-confiance.md +++ b/content/pages/wiki/toile-de-confiance.md @@ -10,15 +10,18 @@ Aucune connaissance particulière n'est requise pour comprendre ce qui suit, car Cependant nous irons assez loin, nous rentrerons nottament dans le détail du protocole duniter (uniquement sur les parties toile de confiance biensûr) ainsi que dans des aspects de théorie des graphes car cela me semble essentiel pour vraiment comprendre tous les rouages d'une toile de confiance duniter. Rassurez-vous, nous allons y aller progressivement, nous commencerons par une vision d'ensemble puis nous détaillerons graduellement :) -## Prérequis +# Prérequis + Avant de lire cet article, il est vivement recommendé d'étudier la [licence Ğ1](https://duniter.org/fr/wiki/licence-g1) et de lire les pages suivantes : + * [Devenir membre de la toile de confiance Ğ1](../devenir-membre) * [Certifier de nouveaux membres](../certifier-de-nouveaux-membres) * [Question Fréquentes sur la toile de confiance](../faq) -## Pourquoi a-t-on besoin d’une toile de confiance ? +# Pourquoi a-t-on besoin d’une toile de confiance Nous avons besoin d'une toile de confiance pour répondre à deux objectifs : + 1. S'assurer que chaque être humain membre de la monnaie co-créer bien le même nombre de Dividendes Universel par intervalles de création (dans le cas de la Ğ1 cet intervalle est `86400` (=1 jour exprimé en secondes), c'est le paramètre monétaire* `dt`). 2. Identifier les calculateurs de blocs pour leur affecter une difficulté personnalisée. Cela est nécessaire afin d'éviter que le mécanisme de [preuve de travail](../duniter/preuve-de-travail) ne permette une centralisation du support de la monnaie (la blockchain) comme c'est hélas le cas dans de nombreuses crypto-monnaies non-libres. @@ -33,6 +36,7 @@ Nous ne traiterons pas ici le deuxième objectif relatif à la preuve de travail Revenons donc au premier objectif, s'assurer que chaque humain n'ait qu'un seul compte membre. En pratique, le risque zéro n'existe pas, notre objectif n'est donc pas de concevoir une toile de confiance au sein de laquelle la fraude serait impossible (ce qui est de toute manière impossible). Voici donc une reformulation plus réaliste en quatre sous-objectifs : + 1. Rendre l’acte de certification suffisamment lourd pour obliger les membres à un minimum de vigilance. 2. Rendre la fraude suffisamment difficile pour qu'elle soit marginale. 3. Éviter que les éventuelles attaques sybil aient un impact significatif sur la monnaie. (_que les faux DU créés aient un poids négligeable par rapport à la masse monétaire légitime._) @@ -55,29 +59,29 @@ Mais, nous serions alors dépendants de ces systèmes d'identification centralis De plus, les membres d'une monnaie libre peuvent être de n'importe quelle nationalité ou culture, nous perdrions cette universalité en dépendant d'un système d'identification étatique. De plus, cela exclurait les sans-papiers et les apatrides. Il est essentiel pour nous de ne dépendre d'aucun état ni d'aucune institution. Nous ne dépendons que du réseau internet, et encore, il existe d'autres réseaux, si internet vennait a s'éteindre, les humains membres d'une monnaie libre pourrait très bien créer leur propre réseau d'information, c'est déjà ce que font certaines d’associations en créant leurs propres bout de réseau, donc c'est possible. -## Quelques bases en théorie des graphes - -### Un peu de vocabulaire - -- graphe : ensemble de points (nommés sommets) reliées entre eux par des flèches (nommées arcs). -- -- graphe simple : graphe sans boucle (arc reliant un sommet à lui-même) et sans arcs superposés (plusieurs arcs reliant le même couple de sommets dans le même sens). -- -- graphe orientés : graphe ou les arcs ont un sens, l'arc A –> B est donc différent de l'arc B –> A. -- -- extrémité initiale et finale d'un arc : l'arc A –> B a pour extrémité initiale A et pour extrémité finale B. -- -- sommet isolé : sommet n'étant lié à aucun arc. -- -- degré d'un sommet : nombre d'arcs reliant ce sommet (dans les deux sens). -- -- demi-degré extérieur d'un sommet A : nombre d'arcs ayant pour extrémités initiales le sommet A -- -- demi-degré intérieur d'un sommet A : nombre d'arcs ayant pour extrémités finales le sommet A -- -- chemin : trajet qu'il faut suivre pour se rendre d'un sommet A à un sommet B en respectant le sens des arcs. Le nombre d'arcs traversés est la longueur du chemin. - -### Définition d’une toile de confiance Duniter +# Quelques bases en théorie des graphes + +## Un peu de vocabulaire + +* graphe : ensemble de points (nommés sommets) reliées entre eux par des flèches (nommées arcs). + +* graphe simple : graphe sans boucle (arc reliant un sommet à lui-même) et sans arcs superposés (plusieurs arcs reliant le même couple de sommets dans le même sens). + +* graphe orientés : graphe ou les arcs ont un sens, l'arc A –> B est donc différent de l'arc B –> A. + +* extrémité initiale et finale d'un arc : l'arc A –> B a pour extrémité initiale A et pour extrémité finale B. + +* sommet isolé : sommet n'étant lié à aucun arc. + +* degré d'un sommet : nombre d'arcs reliant ce sommet (dans les deux sens). + +* demi-degré extérieur d'un sommet A : nombre d'arcs ayant pour extrémités initiales le sommet A + +* demi-degré intérieur d'un sommet A : nombre d'arcs ayant pour extrémités finales le sommet A + +* chemin : trajet qu'il faut suivre pour se rendre d'un sommet A à un sommet B en respectant le sens des arcs. Le nombre d'arcs traversés est la longueur du chemin. + +## Définition d’une toile de confiance Duniter Les toiles de confiance Duniter (une par monnaie) sont des graphes simples orientés et sans sommets isolés. Les sommets en sont les membres et les arcs les certifications. @@ -101,20 +105,20 @@ Résumons tout cela avec un exemple : A -> B -> C | - \--> D + \--> D Si pour une raison x ou y, A perd son statut de membre, alors la toile s'effondre et tous les autres membres perdent aussi leurs statuts de membre en cascade. Pour éviter cela, la certification A –> B restera valide jusqu'à sa date d'expiration, laissant à B le temps de se faire certifier par C ou D par exemple. L'absence de sommet isolé implique également que lorsque qu'un nouveau membre est ajouté à la toile de confiance il faut ajouter en même temps (c'est-à -dire dans le même bloc) l'ensemble des certifications qui lui permettent de devenir membre. C'est pourquoi nous avons besoin d'un espace de stockage intermédiaire qui contient les identités **en attente** de devenir membre ainsi que les certifications émises par des membres envers ces identités, c'est espace c'est la fameuse "piscine" des nœuds Duniter (que l'on aurait aussi pu nommer "bac à sable" puisque dans le code de Duniter c'est le terme `sandbox` qui est utilisé). Notons que ces "piscines" contiennent également d'autres types de documents non mentionnés ici. -## Définition des règles d’une toile de confiance Duniter +# Définition des règles d’une toile de confiance Duniter Les toiles de confiance Duniter (une par monnaie) sont régies par huit règles présentées ci-après. L'application de ces règles dépendent de onze paramètres variables d'une monnaie à l'autre. La valeur de dix d'entre eux sont fixés dans le bloc zéro, le onzième paramètre `msPeriod` est écrit en dur dans le code, car il a été ajouté après l'écriture du bloc zéro de la Ğ1. Cette partie ne présente que les définitions des règles, les raisons d'être de ces règles sont présentés dans le cadre de l'historicité de leur apparition dans la partie "Origine des règles et cas de la Ğ1". -### 1. Règle de distance et membres référents +## 1. Règle de distance et membres référents Paramètres : **StepMax** et **xPercent** @@ -135,14 +139,14 @@ Dans un toile aboutie, c'est-à -dire dans une toile ou chaque membre a certifié La vérification de la règle de distance étant couteuse en calcul, elle ne s'applique que lors de l'obtention et du renouvellement du statut de membre. (Voir partie "renouvellement du statut de membre"). _Cas particulier : la règle de distance ne s'applique pas au bloc zéro (écriture de la toile initiale)._ -### 2. Règle du nombre minimal de certifications reçus +## 2. Règle du nombre minimal de certifications reçus Paramètre : **sigQty** C'est la règle la plus simple, elle stipule que tout membre doit à tout moment (comprendre à tous blocs) être le destinataire d'au moins `sigQty` certifications actives. Si ne serait-ce que pour le temps d'un seul bloc, un membre A se retrouve avec moins de `sigQty` certifications actives reçus, alors il perd le statut de membre à ce bloc. Il doit alors publier une demande de renouvellement de son adhésion. -### 3. Règle de renouvellement de l’adhésion +## 3. Règle de renouvellement de l’adhésion Paramètres : **msValidity**, **msPeriod** et **msWindow** @@ -153,7 +157,7 @@ Lorsqu'une demande de renouvellement d'adhésion est émise, elle est stockée e Tout membre dont le dernier renouvellement date de plus de `msValidity` secondes perd le statut de membre au premier bloc ou cette durée est atteinte. Dans ce cas, l'ancien membre dispose à nouveau d'une durée de `msValidity` secondes pour redevenir membre par cette même procédure de renouvellement. Passé ce délai, donc `2 × msValidity` après le dernier renouvellement, l'ancien membre est exclu définitivement et ne pourra plus jamais redevenir membre avec ce compte. S'il souhaite redevenir membre il devra se créer un nouveau compte à partir de zéro. -### 4. Règle d’expiration des certifications +## 4. Règle d’expiration des certifications Paramètre : **sigValidity** @@ -161,7 +165,7 @@ Toute certification inscrite en blockchain expire **sigValidity** secondes aprè /!\ L'émission et l'écriture d'une certification ont lieu à des instants différents. Lorsque le membre A émet une certifiation à un instant t1, elle est d'abord stockée en piscine à cet instant t1, puis sera écrite en blockchain à un instant t2, dès que les règles de la toile le permettent, il peut y avoir plusieurs semaines d'écarts entre t1 et t2 !! -### 5. Règle du stock limité de certifications actives +## 5. Règle du stock limité de certifications actives Paramètre : **sigStock** @@ -169,25 +173,25 @@ Par certification active nous entendons certification inscrite en blockchain et À tout bloc et pour tout membre, l'ensemble des certifications émises par ce membre et actives doit être inférieur ou égal à sigStock. Lorsque ce quota est atteint, le membre en question devra attendre qu'une certification active dont il est l'émetteur expire pour pouvoir en écrire une autre. -### 6. Règle de l’intervalle d’écriture entre deux certifications +## 6. Règle de l’intervalle d’écriture entre deux certifications Paramètre : **sigPeriod** Lorsqu'une certification émise par un membre A est écrite en blockchain, aucune autre certification émise par A ne pourra être écrite en blockchain avant `sigPeriod` secondes. -### 7. Règle de la fenêtre d’écriture d’une certification +## 7. Règle de la fenêtre d’écriture d’une certification Paramètre : **sigWindow** Lorsqu'une certification est émise par un membre A, elle restera stockée en "piscine" pour au plus `sigWindow` secondes. Si la certification en question n'a toujours pas été écrite en blockchain passé ce délai, elle est purement supprimée. -### 8. Règle de la fenêtre d’écriture d'une identité +## 8. Règle de la fenêtre d’écriture d'une identité Paramètre : **idtyWindow** Lorsqu'une identitée est émise, elle restera stockée en "piscine" pour au plus `idtyWindow` secondes. Si l'identitée en question n'a toujours pas été écrite en blockchain passé ce délai, elle est purement supprimée. -## Le cas particulier de la toile initiale au bloc zéro +# Le cas particulier de la toile initiale au bloc zéro L'application des règles présentées ne rend l'expansion d'une toile possible qu’à partir d'une toile pré-éxistante, il y a donc un cas particulier ou certaines règles ne s'appliquent pas : l'écriture du bloc zéro. @@ -196,9 +200,9 @@ Seules les règles 2 et 5 s'appliquent lors de l'écriture du bloc zéro. Dans la pratique, c'est l'humain qui génère le bloc zéro qui choisi manuellement quelles identités sont écrites dans le bloc zéro, mais toutes les identités et certifications écrites dans le bloc zéro doivent respecter les règles 2 et 5 et de plus le bloc zéro doit être signé avec la clé privée d'une des identités écrites. Dès lors qu'un bloc zéro correct a été généré, toute identité inscrite dans le bloc zéro peut soumettre le bloc suivant, de fait l'auteur du bloc zéro n'a donc plus la main. -## Origine des règles et cas de la Ğ1 +# Origine des règles et cas de la Ğ1 -### 1. Distance et taille limite +## 1. Distance et taille limite La règle de distance a pour objectif de limiter la taille maximale d'une région sybil ainsi que la taille maximale de la communauté monétaire. `xpercent` permet d'éviter une minorité de blocage (membres trop peu actifs). @@ -240,19 +244,15 @@ Autre moyen de nous prémunir d'une attaque sybil, si elle était suffisamment l Le problème c'est qu'une attaque sybil peut être propagée par des comptes robots qui se certifieront très rapidement et de manière optimale, comment donc pourrions-nous les ralentir de force ? En imposant un délai minimal entre deux certifications ! -### 2. une question de temps +## 2. une question de temps Nous venons de voir que pour ralentir de déploiement d'une attaque sybil afin d'avoir le temps de la détecter et de prendre des mesures, nous pourrions imposer un délai minimal entre deux écritures de certifications par le même compte. C’est la raison pour laquelle nous avons créé le paramètre `sigPeriod`. Voici un graphe d'évolution de la taille d'une région sybil en fonction de `sigPeriod` et de `stepAttackers` : -f[stepAttackers](t) = {p=0, t - p=1, t(sigStock/5) - ...p=n, t(sigStock/5)^n} - ![graphe taille sybil en fonction de sigPeriod et stepAttackers]({filename}/images/wiki/toile-de-confiance/graphe-sigPeriod.png) -### 3. Une confiance éternelle ? (sigValidity, msValidity) +## 3. Une confiance éternelle ? (sigValidity, msValidity) Si toute certification restait valable at vitam eternam, cela serait problématique pour au moins deux raisons : D'une part il est important que les membres qui décédent cessent de créer des DU. @@ -270,7 +270,7 @@ Trois ans nous semblait trop long, nous avons donc choisi deux ans. Mais considérer qu'un mort va continuer à créer des DU dont personne ne pourra bénéficier pendant une durée pouvant aller jusqu'à deux ans, cela nous semblait trop. C'est pourquoi nous avons opté pour une durée de vie plus faible concernant le renouvellement de l'adhésion. Nous avons donc choisi un an. Mais, nous aurions aussi pu choisir six mois. La valeur de **msValidity** est au final assez secondaire et pourrait facilement être modifée dans le futur si la communauté le souhaite. -### 4. Éviter que les piscines ne deviennent des dépôts sédimentaires (idtyWindow, sigWindow, msWindow) +## 4. Éviter que les piscines ne deviennent des dépôts sédimentaires (idtyWindow, sigWindow, msWindow) Il faut nettoyer régulièrement les piscines pour éviter qu'elles n'atteignent des tailles astronomiques et pour garantir que même les petites machines peu puissantes puissent exécuter un nœud Duniter. Pour ce faire il faut que les identités et certifications en attentes restent le moins longtemps possible en piscine, elles doivent cependant y rester suffisamment longtemps pour avoir une chance raisonnable d'être inscrites en blockchain. @@ -278,16 +278,16 @@ Pour la Ğ1, nous avons estimé que deux mois étaient un minimum pour que tous Typiquement, choisir sept semaines aurait été plus compliqué à intégrer et à retenir. Nous voulions que les durées à connaître restent le plus facilement intégrable et mémorisables. Un mois nous semblait trop court, la valeur de deux mois s'est donc imposée. Et par souci de simplicité, nous avons appliqué cette même valeur de deux mois aux trois paramètres `idtyWindow`, `sigWindow` et `msWindow`. -### 5. Éviter de limiter les membres connaissant beaucoup de monde (sigStock) +## 5. Éviter de limiter les membres connaissant beaucoup de monde (sigStock) De nombreuses études sociologiques montrent qu'un humain connait en moyenne cinquante personnes. Bien entendu, c'est une moyenne. Certains humains en connaissent beaucoup plus, d'autres beaucoup moins. Là encore, nous avons tranché par le critère "nombre facile à retenir". Bien que l'impact de `sigStock` sur la taille maximale des régions sybil soit secondaire, il convient tout de même de ne pas choisir un `sigStock` trop grand ! 150 nous semblait trop élevé, nous avons donc choisi 100. -### 6. Se prémunir des minorités de blocage (xpercent) +## 6. Se prémunir des minorités de blocage (xpercent) -### 7. L'ajout de msPeriod, une protection anti-spam +## 7. L'ajout de msPeriod, une protection anti-spam Ce paramètre un peu à part, rajouté après le bloc zéro, ne sert pas à réguler la toile de confiance mais à proteger le réseau informatique qui porte la monnaie contre les attaques de type spam. En effet, des membres malveillants qui souhaitent nuire au bon fonctionnement de la monnaie pourraient demander leur renouvellement à chaque bloc (toutes les cinq minutes), ou pire encore, envoyer des centaines de requêtes de renouvellement par minute pour submerger les nœuds Duniter. En l'absence de limitation, les nœuds Duniter sont cencés traiter toutes les requêtes de renouvellement, même si l’adhésion a été renouvellées il y a cinq minutes ! -- GitLab From eab029148eceeb004d89953f658c71e8ffc91460 Mon Sep 17 00:00:00 2001 From: librelois <elois@ifee.fr> Date: Fri, 13 Apr 2018 00:39:46 +0200 Subject: [PATCH 6/6] wot details article : add images --- .../toile-de-confiance/impact_sig_period.png | Bin 0 -> 68146 bytes .../images/wiki/toile-de-confiance/wot-moy.png | Bin 0 -> 47253 bytes .../wiki/toile-de-confiance/wot-sybil.jpg | Bin 0 -> 22107 bytes content/pages/wiki/toile-de-confiance.md | 8 ++++---- 4 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 content/images/wiki/toile-de-confiance/impact_sig_period.png create mode 100755 content/images/wiki/toile-de-confiance/wot-moy.png create mode 100755 content/images/wiki/toile-de-confiance/wot-sybil.jpg diff --git a/content/images/wiki/toile-de-confiance/impact_sig_period.png b/content/images/wiki/toile-de-confiance/impact_sig_period.png new file mode 100644 index 0000000000000000000000000000000000000000..d3f56fd62439344dc39d9599911e3837f5e14394 GIT binary patch literal 68146 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 Q68txB)*|y8W;Xl&4{0}T>;M1& literal 0 HcmV?d00001 diff --git a/content/images/wiki/toile-de-confiance/wot-moy.png b/content/images/wiki/toile-de-confiance/wot-moy.png new file mode 100755 index 0000000000000000000000000000000000000000..beaf76bb47226453cb18e1acddf7406661ee96d9 GIT binary patch literal 47253 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 literal 0 HcmV?d00001 diff --git a/content/images/wiki/toile-de-confiance/wot-sybil.jpg b/content/images/wiki/toile-de-confiance/wot-sybil.jpg new file mode 100755 index 0000000000000000000000000000000000000000..5c94b58b44db35387774b6bc823cf33bbe67a863 GIT binary patch literal 22107 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 literal 0 HcmV?d00001 diff --git a/content/pages/wiki/toile-de-confiance.md b/content/pages/wiki/toile-de-confiance.md index 2fd72ed..adbbfa2 100644 --- a/content/pages/wiki/toile-de-confiance.md +++ b/content/pages/wiki/toile-de-confiance.md @@ -207,7 +207,7 @@ Dès lors qu'un bloc zéro correct a été généré, toute identité inscrite d La règle de distance a pour objectif de limiter la taille maximale d'une région sybil ainsi que la taille maximale de la communauté monétaire. `xpercent` permet d'éviter une minorité de blocage (membres trop peu actifs). -![zone sybil]({filename}/images/wiki/toile-de-confiance/zone-sybil.png) +![zone sybil]({filename}/images/wiki/toile-de-confiance/wot-sybil.jpg) Les régions sybil sont isolés du reste du graphe, car les comptes sybil ne reçevrons de certifications que de la part d'autres comptes sybil ou de la part des auteurs de l'attaque. Ainsi, tout plus court chemins entre un membre légitime et un compte sybil passe forcément par un auteur de l'attaque. La limite de la profondeur de la région sybil dépend donc de la distance maximum entre les auteurs de l'attaque et les xpercent% membres référents les plus proches, cette distance caractéristique est nommée `stepAttackers`. La taille maximale d'une région sybil crée par sigQty membres malveillants dépend du levier L=sigQty/sigStock : @@ -224,7 +224,7 @@ Sauf que dans les faits, la plupart des membres ne consommeront pas tout leurs s Notre toile de confiance peut donc être dimensionnée avec seulement deux paramètres, notre objectif avec la Ğ1 est de créer une zone économique libre de l'ordre du million d'utilisateurs, voyons donc quelles combinaisons du couple (sigQty;stepMax) permettent d'attendre le million : -![graphe WoTmoy en fonction de sigQty et stepMax]({filename}/images/wiki/toile-de-confiance/graphe-WoTmoy.png) +![graphe WoTmoy en fonction de sigQty et stepMax]({filename}/images/wiki/toile-de-confiance/wot-moy.png) La taille maximale d'une région sybil croît linéairement par rapport à sigQty mais exponentionellement par rapport à stepMax, donc pour avoir une toile la plus solide possible, nous devons minimiser la valeur de stepMax. Le graphe ci-dessus nous montre que la valeur de stepMax la plus faible permettant d'attendre le million de membres est de cinq. Pour la valeur de sigQty nous avons le choix entre quatre pour atteindre 1,2 million ou cinq pour atteindre le demi million. @@ -248,9 +248,9 @@ En imposant un délai minimal entre deux certifications ! Nous venons de voir que pour ralentir de déploiement d'une attaque sybil afin d'avoir le temps de la détecter et de prendre des mesures, nous pourrions imposer un délai minimal entre deux écritures de certifications par le même compte. C’est la raison pour laquelle nous avons créé le paramètre `sigPeriod`. -Voici un graphe d'évolution de la taille d'une région sybil en fonction de `sigPeriod` et de `stepAttackers` : +Voici un graphe d'évolution de la taille d'une région sybil en fonction de `sigPeriod` : -![graphe taille sybil en fonction de sigPeriod et stepAttackers]({filename}/images/wiki/toile-de-confiance/graphe-sigPeriod.png) +![graphe taille sybil en fonction de sigPeriod et stepAttackers]({filename}/images/wiki/toile-de-confiance/impact_sig_period.png) ## 3. Une confiance éternelle ? (sigValidity, msValidity) -- GitLab