Suite aux discussions concernant le Whitepaper et le spam de transactions, je suis arrivé à une proposition qui me semble possible pour empêcher le spam, hors protocole. Cette proposition nécessite la création d’un nouveau noeud ou d’une option sur les noeuds existants. Elle se base simplement sur une priorisation des tx acceptées en piscine en fonction de la distance TdC au membre calculant.
Ce n’est évidemment qu’un brouillon. Il y a certainement des points que je ne maîtrise pas, par exemple une limite de la taille des Whitelist.
Etat actuel et prévu
- Duniter priorise déjà l’enregistrement des tx de la clef publique du noeud
- @elois prévoit d’implémenter dans DuniTrust la possibilité d’ajout d’une Whitelist
- Les discussions que j’ai pu avoir autour des mesures anti-spam non-protocolaires montrent que les tx qui seraient priorisées sont celles concernant des pubkeys “proches” des membres calculant (abonnement, cotisation à la transaction, noeud communautaire, etc.).
D’où mon interrogation : est-il possible d’utiliser la proximité avec le membre calculant dans la TdC pour prioriser des transactions légitimes par rapport à des transactions de spam ?
Lexique
Whitelist : liste de pubkeys dont on fait passer les transactions entrantes et sortantes en priorité. Elles sont enregistrées dans la pool, quitte à élaguer des tx moins prioritaires.
Whitelist “arbitraire” : est entrée directement par l’admin du noeud sur des critères arbitraires, par exemple une whitelist sur abonnement est “arbitraire”.
commercer : envoyer de la monnaie (non en recevoir)
Proposition initiale
-
je suis membre et je possède un noeud
-
j’ai envie de vivre dans un environnement économique fluide
-
donc je vais exécuter un script régulièrement sur mon noeud, qui va mettre sur ma whitelist :
- toutes les pubkeys avec lesquels j’ai commercé depuis 1 an
- toutes les pubkeys avec lesquels les membres à 1 pas de moi ont commercé depuis 1 an
-
Une autre solution, plus sujette à spam, serait de whitelister :
- toutes les pubkeys avec lesquels j’ai commercé depuis 1 an
- toutes les pubkeys avec lesquels eux-mêmes ont commercé depuis 1 an
… ainsi, l’environnement économique dans lequel je me trouve a au moins un noeud où les tx sont prioritaires. Le spam n’est pas évité à l’échelle du réseau, mais mon environnement proche en est un minimum protégé. Si des noeuds avec une telle option appartiennent à des membres bien répartis sur le réseau, alors la G1 est protégée du spam par la TdC
Inconvénient : la whitelist peut être très grosse. Mais :
- le délai choisi (1 an) pour faire partie de la whitelist peut tout à fait être réduit.
- on peut choisir les X dernieres pubkeys avec lesquelles ces comptes ont commercé.
- Par exemple, je whitelist les 100 derniers comptes vers lesquels moi ou mes contacts WOT directs ont envoyé de la monnaie → ma whitelist est limitée à maximum 10000 pubkeys.
- Je whitelist les 100 dernieres pubkeys avec lesquelles j’ai commercé, et les leurs → pareil, limite à 10000.
Evolution de la proposition et généralisation
Si je possède un petit Rasp qui calcule 1 blocs/semaine (~50 tx), je priorise ainsi ~200 tx/mois pour mon environnement proche. C’est ridicule pour 10000 pubkeys. Donc il faut re-prioriser, et si possible généraliser à tout le réseau calculant. Tous les noeuds qui le décideraient auraient plusieurs whitelists de priorités différentes, mises à jour régulièrement (chaque semaine ?) :
- priorité 0 : mes tx
- priorité -1: les tx de la Whitelist arbitraire
- priorité -2 : les tx des X derniers comptes avec lesquels j’ai commercé et des membres à 1 pas
- priorité -3 : les tx des X derniers comptes avec lesquels ils ont commercé et des membres à 2 pas
- priorité -4 : pubkeys avec lesquelles les membres à 2 pas ont commercé (pas certain de ça) + membres à 3 pas (on se base desormais sur les comptes membres et plus sur les comptes avec lesquels j’ai commercé)
- etc…
- les pubkeys qui n’ont reçu de transactions depuis aucun compte membre (ni émis vers) passent en dernier si elles ne font pas partie d’une whitelist arbitraire.
On a ainsi plusieurs whitelists, basées sur la TdC, qui priorisent les tx en fonction de leur proximité directe avec un compte membre. Un.e attaquant.e qui voudrait spammer le réseau devrait se rapprocher des membres pour pouvoir enregistrer ses transactions, et pourrait être ainsi identifié.e (et blacklisté.e). Le passage par un anonymiseur la ferait s’éloigner des comptes membres. Ses tx passeraient en dernier, sauf si elles sont destinées à un compte membre, et dans ce cas soit l’attaquant.e perd des unités, soit iel est démasqué.e.
… Et si un.e attaquant.e ne peut pas bloquer la majorité des transactions légitimes, il est probable qu’il n’y ait pas d’attaque spam du tout et que les transactions non prioritaires (typiquement vers/entre des comptes anonymes) puissent passer. En revanche, en cas de surcharge légitime du réseau, les systèmes de whitelist ou de paiement à la transaction seraient d’actualité.
Inconvénient 1 : cela suppose de créer des Whitelist contenant de très nombreuses pubkeys. Je n’ai aucune idée de la place que cela représente ni du temps de calcul.
Inconvénient 2 : cela favorise les membres proches (TdC) d’un membre calculant.
Je trouve cette solution assez élégante, en toute subjectivité @Salome_Iris, en demandant des précisions sur le spam, a fait un Ğtravail remarquable