Compte portefeuille partagé

Il serait pratique pour certaines situations de créer un mécanisme de compte portefeuille partagé. Par exemple, aujourd’hui dans une association il y a un trésorier qui détient les identifiants du compte. Il peut très bien les perdre, décéder, partir avec l’argent… Un système plus sûr pourrait fonctionner avec un compte appartenant à plusieurs personnes, dont un nombre minimum est requis pour valider une signature.

Techniquement, ça doit être assez compliqué à réaliser et ça implique peut-être de gros changements. J’imagine quelques pistes :

  • Utiliser le secret de Shamir pour les identifiants secrets, le problème est que soit ça nécessite une machine de confiance pour faire les calculs, soit il faut des clés à usage unique pour que les calculs puissent être faits par les nœuds Duniter.
  • Le compte partagé émet un document listant les clés publiques de ses propriétaires et les paramètres du partage. Ensuite, toutes les documents émis par ce compte doivent être signés par un certain nombre de ces clés publiques. On peut donc, si une personne quitte ou rejoint le groupe, modifier la liste. Chaque clé publique aurait un poids défini : dans une association, les 6 membres du CA auraient un poids de 10, les adhérents un poids de 1, et le seuil pour valider une transaction serait 50. (le secret de Shamir offre ce mécanisme)

Qu’en pensez vous ?

5 Likes

Dans la même famille d’algos, il y a probablement quelque chose à faire du côté des codes de Reed-Solomon. En gros à partir d’une donnée, tu crées n fragments dont k seulement sont nécessaires pour récupérer la donnée (k<=n). C’est très utilisé pour la sauvegarde redondante de données. Du coup, chacun des détenteurs du compte détient seulement un (ou plusieurs s’il a plus de poids) fragment et c’est la combinaison de k fragments qui permet de reconstituer le code d’origine. Le problème avec le secret de Shamir est que si quelqu’un donne une clé incohérente, le résultat peut être différent de l’original. Alors qu’avec un système de type Reed-Solomon, si tu as un nombre de clés plus grand que k tu peux corriger les éventuelles erreurs.

En tout cas il faudrait avoir une machine de confiance, comme tu dis, pour reconstituer la clé. Mais il me semble que ce que préparait @nanocryk rendait facilement possible ce genre de choses avec du multisig, mais je ne sais pas du tout où il en est. Peut-être que la version rust d’@elois envisage ce genre d’utilisation à terme ?

1 Like

https://en.bitcoin.it/wiki/Multisignature

1 Like

Le multisig est déja possible dans Duniter. La complexité réside plutot côté UI-UX. Pour l’instant aucun client ne s’est penché là dessus :slight_smile:

4 Likes

Désolé j’ai eu la flemme de vérifier ^^ mais c’est bien ce qu’il me semblait. :sweat_smile:

Rassurez vous coté bitcoin également, c’est la gestion via les wallets qui est manquante, rarement simple. ^^

1 Like

Comme le dit @Inso le multisig est déjà présent dans duniter et donc dans Durs aussi :wink:
Ce qui manque pour que ce soit facilement utilisable par les clients c’est la notion d’adresse pointant sur un script, j’avais créer un ticket a cet effet ici : Add function P2SH : Pay to script hash (#1165) · Issues · nodes / typescript / duniter · GitLab


Plus généralement j’ai beaucoup d’idées pour les évolutions futures du protocole blockchain mais je ne proposerai rien tant que Durs ne sera pas en v1 (ce qui vas me demander encore au moins 2 ans si je reste seul dev principal dessus et que mon employeur UNL me garde.), je proposerai quand je serait en capacité d’implémenter mes propositions :slight_smile:

Dans tout les cas je suivrai les évol du protocole appliqué par Duniter, donc si @cgeek implémente une évol je suivrais, mais je ne serait pas moteur sur le protocole tant que Durs ne sera pas en v1.

3 Likes

Pour l’instant je ne compte rien faire évoluer, sauf cas de force majeure.

Je laisse les nouveaux faire, et même je suis prêt à l’aider à mesure de ma disponibilité, comme toi Eloïs j’ai un boulot en UNL pour le moment qui me prend un temps fou.

Par contre je réfléchis à des choses, mais rien à dévoiler pour le moment. Dans tous les cas je n’implémente plus rien de structurant ou critique sans en parler avant.

3 Likes

Un outil CLI de sharding en Rust :

https://crates.io/crates/agree

@1000i100 si ça t’intéresse.