Bug majeur sur Duniter 0.2x à 0.4x & stratégie de développement d’une crypto-monnaie

@vit a découvert un bug concernant les identités : leur blockstamp n’est pas correctement vérifié par Duniter, ce qui permet à un attaquant de contourner la règle d’expiration.

Concrètement, sachez que lorsque vous créez votre identité sur TestNet via Sakia/Cesium, alors vous disposez d’une semaine pour obtenir les certifications nécessaires pour être intégré dans la monnaie, et passé ce délai l’identité périme. L’attaquant peut ici créer son identité sans se soucier de cette règle, ce qui lui donne plus de temps pour obtenir ses certifications.

Toutefois TestNet n’a probablement jamais été le témoin de cet avantage, qui reste très minime. D’ailleurs, le bonus de temps obtenu par un attaquant décale d’autant l’inscription effective : par exemple s’il cible un bloc qui interviendra dans 3 jours mais réussit à recueillir ses certifications en 1 journée, alors il devra tout de même attendre 2 jours pour que son inscription s’opère.

Bref, plus de peur que de mal. Ceci sera corrigé dans DUP (DUniter Protocol) 0.5, et donc Duniter 0.50.

Il n’y aura aucun impact sur la blockchain existante, qui continue comme si de rien n’était. Nous considérerons que DUP 0.2 à 0.4 ne contenait pas de règle quant à la validité du blockstamp, mais que celle-ci sera présente dans la version 0.5.

Avis aux amateurs : vous pouvez encore profiter de ce bonus.

https://github.com/duniter/duniter/issues/677

Arf, j’ai eu justement le cas la semaine dernière sur le Sou : une personne s’est inscrite (via Cesium) en référencant un bloc qui a été annulé (rollback lors de la résolution du fork). du coup j’ai de la chance : son inscription va quand pouvoir passer :wink: (enfin le SELF + les certifications attachés). mais peut-etre pas son adhésion (qui a le meêm horodatage), si ?

Lors de la lecture des /wot/pending (visible dans “Annuaire”, puis “inscriptions en attente”) je compare le hash self/bloc courrant. C’est ainsi que j’ai vu le problème.

Bref, cela pointe la difficulté pour les clients de choisir le bon bloc avant d’écrire un document (n’importe lequel d’ailleurs : identité, adhésion, transaction, certification) :

  • si on prend le “dernier” bloc du noeud, on a bien l’heure la plus proche de la réalité, mais on a un risque de fork, donc d’invalidation du document
  • si on prend un bloc plus ancien, l’heure affichés dans les clients ne sera pas exacte… je trouve cela embêtant.

Une solution est d’envoyer les documents à plusieurs noeuds, en s’adaptant à leur dernier bloc; C’est à dire générer des documents en fonction de leur “version” de la blockchain.
je vais partir la dessus, je crois…

Vos avis ?

Le problème, je pense, est que plusieurs documents apparaîtront lorsqu’on fera un lookup, et les utilisateurs risquent de ne pas réussir à certifier la bonne version de l’identité.

Cela apporterait de la confusion et un risque d’erreur.

Encore une fois, n’interprétons pas trop vite des résultats locaux comme des propriétés globales : les forks ne se produisent que 1 à quelques fois par semaine sur le Bitcoin, et il est communément admis que 6 blocs sont une garantie suffisante que l’historique ne changera pas.

TestNet est une monnaie de test, avec paramètres pour une monnaie en accéléré. Une monnaie de production aura vraisemblablement une fenêtre d’inscription de plusieurs jours, voire semaines ou mois, et alors il est possible de prendre un bloc de référence 300 blocs en arrière par exemple (= environ 1 journée de blocs à 5 minutes par bloc) sans que cela n’handicape l’utilisateur. Et alors, peu de risque de perdre ses documents.

Ces problèmes sont inimement liés à TestNet, ou à la jeunesse du protocole.

Oui, sur le Sou nous opté pour 3 mois.

Ca répond à ma question :wink:
Avec la conséquence suivante : la date d’inscription, si l’on l’affiche à partir du blocktamp, ne correspondra pas. Peut-etre que pour nous (cgeek) c’est un détail (surement même), mais je vois bien que les utilisateurs lambda vont etre perturbés.

Les solutions que je vois :

  • les clients (sakia, cesium, etc.) choisissent de prendre comme bloc de référence N bloc en arrière (disons 6 blocs ?)
  • les clients corrige l’heure affichée, en ajoutant N * dt
  • éventuellement en affichant un signe indiquant l’approximation (du type ~)

Suis-je trop dans le détail ?

T’es bien dans le détail mais j’aime bien ton idée de contournement :slight_smile:

Il y a aussi la solution qui consiste à regarder le réseau et voir s’il y a fork ou pas. Si pas de fork, comme c’est la majorité des cas, prendre le bloc courant. Et bien sûr face à l’heure : indiquer « blockchain time » (ou BCT comme j’aime l’abréger) pour être précis.

Et si fork en cours, il est aussi possible de prévenir l’utilisateur « la blockchain est actuellement sujette à embranchements et pourraient empêcher votre inscription, une date antérieure à l’heure courante sera utilisée » ou même pas de message de prévention du tout, et utiliser un bloc antérieur commun aux forks comme blockstamp.

Car vis-à-vis de cette solution :

Rien ne garantit que tous les clients opéreront de cette façon, et on pourrait accuser Sakia/Cesium d’afficher des informations fausses. D’ailleurs il est inexact d’afficher dans les clients « date et heure d’inscription » pour parler du blockstamp, il vaudrait mieux parler de “témoin temporel” ou “indicateur temporel” par exemple.

Je pense que tu te poses des problèmes qui n’ont pas lieu d’être car tu te focalises sur “les utilisateurs lambda [qui] vont être perturbés”.

Voici la méthode qui me paraît la plus appropriée : les utilisateurs initiaux à viser sont plutôt informaticiens, ou utilisateurs avancés capables de comprendre les principes d’une blockchain ou au moins de monnaie cryptographique, et également de monnaie libre. Et une fois que ce cercle s’est approprié les concepts, alors il peut lui-même les transmettre aux cercles d’utilisateurs suivants, qui eux seront peut-être plus distants de tout cela et plutôt de “simples utilisateurs lambda”.

Et tout cela élimine immédiatement le problème des “utilisateurs qui vont être perturbés” : on peut d’ailleurs observer que les 1ères voitures n’étaient pas autonomes, mais ont d’abord dues être pilotés par des utilisateurs expérimentés devant manier un levier de vitesse, une pédale d’embrayage, un accélérateur et une pédale de freinage conjointement à un volant de direction. Désormais des voitures à boîte automatique gèrent toutes seules l’embrayage, et des constructeurs proposent désormais des voitures à conduite autonome. Mais cela ne s’est pas fait en 3 ou 4 ans ! Et si l’on avait dû se focaliser sur les utilisateurs lambdas incapables de comprendre le fonctionnement d’une voiture (c’est à ce niveau là que tu les rabaisses, t’en rends-tu comptes ?), alors on aurait probablement jamais eu de voitures du tout.

Une fois cela compris et accepté, alors on peut développer en toute sérénité et produire le meilleur de nous-même.

2 « J'aime »

Oui, je vais tenter le truc de la détection du fork. ca devra être jouable.

Quand a la suite de la discussion au sujet des utilisateurs, peu importe nos divergences d’opinions. Seul l’avenir permettra de savoir quels utilisateurs seront concernés dans les prochaines années (à moins d’etre prophète, ou de croire que les expériences passées réduises le futur à un éternel recommencement). Je crois pour ma part que cela dépendra de nos choix présents, plus que d’un déterministe quelconque. Ce que nous croyons a par ailleurs tendance a se réaliser. Si tu crois que les geek seront forcément les utilisateurs des premières années, alors ton esprit et tes actions vont vouloir te donner raison, et tes réalisations iront dans ce sens (consciemment ou non).
Si tu prends la décision de démocratiser les monnaies libres au plus tôt, en conséquence tes actions (ou questions - cf les miennes) iront dans ce sens.

Fort heureusement, personne ne détient la vérité sur un futur qui n’est pas écrit. Il dépend de choix présent… et aussi de nos silences, d’ailleurs : allez hop je me tais ! :wink:

1 « J'aime »

Je te réponds malgré ta volonté de silence, non pas dans l’espoir de convaincre quelqu’un qui ne souhaite pas l’être, mais afin de permettre à ceux qui nous lisent de comprendre nos positions.

Alors voici.

Pas vraiment : les expériences passées sont aussi une source d’indications très forte.

Non, mais il est possible d’avoir une grande certitude : c’est là-dessus qu’est bâtie la science, ce qui nous permet notamment de réaliser des prédictions à la limite de la divinité telle que la découverte d’une planète par des équations, ou encore la possibilité de voyager par les airs.

Notamment on peut observer que le Bitcoin ou Ethereum se sont bâtis sur des early adopters, des personnes qui ont compris le fonctionnement de l’outil, y ont adhéré et l’on promu auprès de leurs pairs, avec explications.

A l’inverse, on peut citer le cas de Auroracoin qui a rapidement coulé, faute de mineurs. S’ils avaient eu des utilisateurs impliqués, ceux-ci auraient pu souhaiter maintenir celle-ci et mettre en place des installations de minage, ou mieux ces personnes auraient pu alerter sur ce mur inévitable qui leur faisait face. D’ailleurs je n’ai pas vérifié, mais s’ils ont été alertés, alors on peut se demander pourquoi les développeurs de Auroracoin, connaissant ce mur, ont préférer foncer dedans.

Autre expérience : cette démarche d’apprentissage par des pairs initiés a d’ailleurs montré une efficacité bien supérieure à un apprentissage pyramidal élève-professeur par Celine Alvarez dans l’expérience de l’école maternelle de Gennevilliers, où celle-ci note l’impact considérable de l’échange où les plus petits obtiennent de nombreuses connaissances par leurs aînés qui ne demandent qu’à expliquer ce qu’ils ont appris, et où ces derniers voient leurs connaissances consolidées par le fait de réaliser une explication. De sorte que s’il n’y a qu’un initié (le professeur) qui s’époumone aux explications, l’efficacité n’y est pas. De même, un pair non initié n’est pas capable de transmettre une connaissance qu’il n’a pas.

Bref, voyant ces expériences, je déduis que ta démarche mènera vraisemblablement à un échec. Et je trouve dommage de dépenser autant d’énergie pour un tel résultat.

2 « J'aime »

Tu peux à la rigueur “supposer l’échec”, mais le “déduire” je ne crois pas.
Je suis malgré tout d’accord sur ce point : que les personnes initiés sont les meilleures placées pour répandre le truc à d’autres cercles.
En fait, tout dépend de ce qu’on appelle “initiés”. De mon point de vue, on peut très bien avoir compris les monnaies libres, et être initiés et moteur pour propager cela, sans etre initié techniquement à la BlockChain.

Un early adopters ne peut il pas aussi simplement comprendre à quoi sa sert, et savoir utiliser le truc, sans forcément ouvrir le capot, c’est à dire ici comprendre nos histoire de date/heure décalée ?
Je crois que si.

Enfin, pour revenir à l’histoire de l’heure et rester concret, c’est aussi un truc que je fais pour moi (tout geek que je suis). Par élégéance, je préfère que l’heure indiquée, si elle est indiquée, soit la bonne où la plus proche possible. En fait je suis le premiers concernés par ces petits conforts (il en va de même pour les animations dans Cesium, etc.)
On peut dire aussi que je me fais plaisir, dans le détail :wink: C’est un peu ma pause café à moi !

1 « J'aime »

Je déduis à partir d’hypothèses, donc je fais une supposition oui. J’ai utilisé le mot vraisemblablement pour être précis.

Oui mais alors ces personnes là ne seront pas présentes en cas de bug majeur pour participer à le débusquer, à le corriger, et à propager la compréhension de ce qui s’est passé et de ce qu’il faut entreprendre pour résoudre telle ou telle partie du problème. Or c’est bien ça la 1ère chose à réaliser : avoir une monnaie P2P qui tourne techniquement. Si ça ne fonctionne pas, tu te retrouves bien malin avec des utilisateurs qui ne peuvent pas utiliser.

J’insite : Duniter est un projet technique. Faire autre chose que de la technique c’est ne pas réaliser le projet, mais faire autre chose.

C’est pourtant simple : tu ne mets pas des jardiniers pour participer au lancement d’une fusée dont le but est de se poser sur Mars. Non pas que l’activité de jardinier soit inutile en soi, mais qu’elle n’a pas d’intérêt à la réalisation de la mission se poser sur Mars. En revanche, ils seront très utiles dans un second temps quand il s’agira de développer une colonie. Mais à quoi bon parler colonisation alors qu’on n’a même pas réussi à poser quoi que ce soit sur ladite planète ?

En fait, j’ai le sentiment que l’état actuel de développement de Duniter est grandement surestimé. Pourtant je peux déjà assurer à tout le monde qu’il y aura des problèmes majeurs, voire critiques et qui nécessiteront l’attention de tous les acteurs techniques participant à Duniter pour les résoudre. On a vraiment besoin de techniciens, des informaticiens, en tout 1er lieu. Sans quoi c’est l’effondrement assuré. Les jardiniers, c’est ensuite.

Vous en avez les prémisses avec le protocole 0.4, dont un bug très grossier vient à peine d’être débusqué fait l’objet de ce fil.

2 « J'aime »

Le lien Auracoin est mort.

Les deux citations précédentes contiennent de très bons arguments :thumbsup:

Oui, c’est le même schéma d’apprentissage qu’à 42 : le fameux peer-learning.
J’ai bien fait de fuir les schémas pyramidaux d’apprentissage.
Je n’arrivais plus à apprendre de cette manière comprenant que j’apprenais beaucoup plus efficacement de nouvelles connaissances et savoirs faire plus utiles à mes yeux avec mes pairs via Internet. De plus ma créativité est décuplée.

1 « J'aime »

C’est le mode de fonctionnement de la communauté du libre, c’est pas nouveau :wink:

J’ai eu une discussion à ce sujet avec le Champion du Monde d’Echecs Garry Kasparov en 1990. Je lui ai demandé :

  • Garry, que pensez-vous qu’il faille faire pour devenir un meilleur joueur d’échecs !?

Sa réponse :

  • Il faut jouer avec des joueurs de niveau légèrement supérieur. Car de niveau trop élevé vous ne comprenez pas pourquoi vous perdez, et quand vous jouez avec des joueurs de niveau inférieur vous n’apprenez pas, ce sont eux qui apprennent de vous.

A noter que le jeu d’échecs possède un classement qui permet de connaître la force relative de manière très efficace : le classement Elo. Avec 400 points de plus vous avez 92% de chances de gain, avec 400 points de moins seulement 8%.

La différence de classement entre un débutant (1200 Elo) et le Champion du Monde (2850 Elo) étant de plus de 4 fois 400 points.

1 « J'aime »